WWW::MechanizeとXPathでtwitterの全friendsを取得するサンプル作ってみました。 あまりやり過ぎると、オフィシャル側に怒られそうな気もしますが...
後の使い方は、適当で...
#!/usr/local/bin/perl
use warnings;
use strict;
use LWP::Simple;
use XML::Simple;
use WWW::Mechanize;
use HTML::TreeBuilder::XPath;
use HTML::Selector::XPath qw(selector_to_xpath);
use Data::Dumper;
my $username = 'your_username';
my $password = 'your_password';
my $m = WWW::Mechanize->new(timeout => 10);
$m->get('http://twitter.com/login');
$m->submit_form(
form_number => 1,
fields => {
username_or_email => $username,
password => $password,
},
button => 'commit',
);
my $xpath = selector_to_xpath('tr.vcard');
my @friends;
my $num_page = 1;
while (1) {
my $res = $m->get("http://twitter.com/friends/?page=$num_page");
my $encoding = $res->header('Content-Encoding');
my $content = $res->content;
$content = Compress::Zlib::memGunzip($content) if $encoding =~ /gzip/i;
$content = Compress::Zlib::uncompress($content) if $encoding =~ /deflate/i;
my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse($content);
$tree->eof;
my @nodes = $tree->findnodes($xpath);
for my $tr (@nodes) {
push(@friends, {
nick => $tr->findnodes('td/strong/a')->[0]->as_text,
image => $tr->findvalue('td[@class="thumb"]//img/@src')->as_string,
name => $tr->findvalue('td[@class="thumb"]//img/@alt')->as_string,
description => $tr->findvalue('td/strong/a/@title')->as_string,
url => $tr->findvalue('td[@class="thumb"]/a/@href')->as_string,
});
}
$tree->delete;
@nodes or last;
$num_page++;
}
print Dumper @friends;
最近遊んでる物、ほとんどmiyagawa氏のものばっかだな...