携帯百景でフォロー/フォロワーの差分を取ってみる

一ヶ月の出張予定が二ヶ月になって夏服しかなくてしょんぼりなid:natu_nですが、
長期出張中にドハマりしてるのが携帯百景(ケイタイヒャッケイ)、携帯電話で撮影した写真に文字をのせてwebにアップして、みんなにコメントをつけてもらったりつけたり出来るサービスです。

特に継続してアップした写真を見れるってこと以外にあまり意味はないけど、Twitterみたいにフォロー/フォロワーな関係を築くことが出来ます。

しばらく前にwebで確認したら誰にフォローされてないんだろ?って疑問になって*1、リハビリついでにザックリ書いてみました

#!/usr/bin/perl
use FindBin::libs;
use strict;
use warnings;
use CGI;
use Encode;
use Perl6::Say;
use Readonly;
use URI;
use WWW::Mechanize;
use Web::Scraper;

Readonly my $MOVAPIC_URL_PREFIX => 'http://movapic.com/';
Readonly my $MOVAPIC_FOLLOWER_URL_SUFFIX => '/follower';
Readonly my $MOVAPIC_FOLLOWING_URL_SUFFIX => '/following';

my $mech = WWW::Mechanize->new;
my $q    = new CGI;
my $name = $q->param('name');
my $flg  = $q->param('flg');

my $uri = URI->new(
        $MOVAPIC_URL_PREFIX 
      . $name
      . (
          $flg == 0 ? $MOVAPIC_FOLLOWER_URL_SUFFIX
                    : $MOVAPIC_FOLLOWING_URL_SUFFIX
      )
);

my $s = scraper {
    process '//div[3]/div//td[2]/p/a', 'screen_names[]' => 'text';
    process 'a.nextLink',              'next'           => '@href';
};

my @screen_names = ();
my $url          = URI->new($uri);

while (1) {
    $mech->get( $url->as_string );
    die $mech->res->status_line unless $mech->success;
    my $res = $s->scrape( $mech->content );
    push @screen_names, @{ $res->{screen_names} };
    last unless $res->{next};
    $url->path_query( $res->{next} );
}

say encode( 'utf-8', $_ ) for sort @screen_names;

パラメータはnameが自分(または確認したい人の)ユーザ名と、flgが0:フォローワー、1:フォローで
例えばこんなふうに実行すると

$ perl ./keitai100.pl  name=natu flg=0 > followers.txt
$ perl ./keitai100.pl  name=natu flg=1 > following.txt
$ diff -U 0 following.txt followers.txt

意外な人にフォローされてなくてビックリとかできます

備考

use FindBin::libs;
use Perl6::Say;
use Readonly;

なんかは趣味の世界なので普通に書いても全然問題ないです
あと、次ページの辿りかたなどはWeb::Scraper で全ての following/followers の screen_name を取得する - nipottern - はてなグループ::ついったー部を参考にしてます

*1:フォローしてないのは画面でわかる仕組みになっています