2008/05/30


追記
最新のWeb::Scraperでは"Web::Scraper::user_agent"でユーザエージェントが変更出来る様になっています。

昨日書いたエントリ「WWW::MechanizeとXPathでtwitterのfriendsを全部取ってみる」のはてなブックマークでotsune氏から
「Web::Scraper/eg/twitter-friends.pl」
というコメントを貰いました。
ただ、この「Web::Scraper/eg/twitter-friends.pl」は、アンカーのrel属性でcontactとなっている物を並べており、私のようなfollowerが少ない人ならばいいのですが、多い人だと100人超えてしまいます。
結果、100人以上取得出来ない事になります。

以上、おしまい!...というのもアレなので...

無理やり感たっぷりですが、Web::Scraperを使ってみました。
ログインしないと、friendsが辿れないのでそこはWWW::Mechanizeに任せ、LWP::UserAgentを継承しているのを利用して、Web::Scraperの__uaを置き換えました。(ウホ!無理やり)
何か他に、キレイなやり方ないですかねぇ...

#!/usr/local/bin/perl

use warnings;
use strict;
use WWW::Mechanize;
use Web::Scraper;
use YAML;

my $username = 'your_username';
my $password = 'your_password';

my $m = WWW::Mechanize->new(timeout => 10);
$m->add_header('Accept-Encoding', 'identity');
$m->get('http://twitter.com/login');
$m->submit_form(
    form_number => 1,
    fields    => {
        username_or_email  => $username,
        password           => $password,
    },
    button    => 'commit',
);

undef &Web::Scraper::__ua;
*Web::Scraper::__ua = sub {
    $m;
};
my $twitter = scraper {
    process 'tr.vcard',
        'friends[]' => scraper {
            process 'td strong a', nick => 'TEXT';
            process 'td.thumb img', image => '@src';
            process 'td.thumb img', name => '@alt';
            process 'td strong a', description => '@title';
            process 'td.thumb a', url => '@href';
        };
    result 'friends';
};

my $num_page = 1;
while (1) {
    my $uri  = URI->new("http://twitter.com/friends/?page=$num_page");
    my $friends = $twitter->scrape($uri);
    %$friends or last;
    $num_page++;
    warn Dump $friends;
}
Posted at by




全然難しくない話
filtered feed for coderepos
CodeReposフィードにはcategoryにshare配下のパスが埋め込まれている様なので、これをマッチングに使ってるだけです。
"Search Text"には"lang/javascript"とか"lang/python"とか入力します。
これで"lang/javascript"以下だけ欲しい人とか、"lang/perl"以下だけ欲しい人とか、"poem"だけ欲しい人とかがウォッチしやすくなるのかな? ちなみに正規表現でやるまでもなかいかな...と思って単純マッチングにしてあります。正規表現がお好み人はcloneして変更して下さい。
Pipes: Filtered Feed for CodeRepos
Posted at by



2008/05/28


「はてなスター」の置かれている位置によっては思いっきり誤爆してしまうhatenaStar.jsですが、皆さんのご不満を軽減すべく誤爆確認機能をつけました。これまで :hatenastar 1 としていた場面で :hatenastar 1? とすると、つけようとしている「はてなスター」がブリンクします。
点灯している「はてなスター」を見て、「あぁ、あそこに付けるんだな」と思って頂ければと思います。
あとは安心して":↑<bs>"でコマンドヒストリを出してバックスペースで"?"を消し :hatenastar 1 と実行して下さい。
hatenaStar.js
Posted at by