ついったーおともだちのおともだち

via. 2007-08-11 - きしだのはてな
Rubyわかりません>< かわりにPerlです><
Javaは読めないしコンパイルできる環境もないので、きちんとした移植じゃないけど。もう少し手を入れれば登場回数順にソートもできるけど、めどいのでパス。

#!/usr/bin/perl

use strict;
use warnings;

use LWP::Simple;
use XML::XPath;
use Encode;

my $uid = shift or die "Input your TwiiterID\n";
my $xml = get "http://twitter.com/statuses/friends/$uid.xml";
my $m_xp = XML::XPath->new(xml => $xml);

my $m_nodeset = $m_xp->find('/users/user');
my @following;
foreach my $node ($m_nodeset->get_nodelist) {
    my $scr_name = encode 'ascii', $m_xp->find('./screen_name', $node);
    push @following, $scr_name;
}

my %following;
foreach my $follow (@following) {
    my $r = get "http://twitter.com/statuses/friends/$follow.xml";
    my $f_xp = XML::XPath->new(xml => $r);
    my $f_nodeset = $f_xp->find('/users/user');
    foreach my $node ($f_nodeset->get_nodelist) {
        $following{encode_utf8 $f_xp->find('./name', $node)} =
            sprintf 'http://twitter.com/%s', encode_utf8 $f_xp->find('screen_name', $node);
    }
}

foreach my $name (sort keys %following) {
    print "$name => $following{$name}\n";
}

ちっとも短くないのはご愛嬌。あれです、興味ある読者への課題、ってことで。
せめて自分と自分がfollowしている人ぐらいは出力しないようにしたほうがよかったんじゃないかというのは自分でも思ってます。気が向いたら書き直すかもね。