c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

TwitterをMechanizeでさわる

一個だけ注意だ、WWW::Mechanizeだと動かん。WWW::Mechanize::GZipつかうんだ。
OAuthのaccess Tokenをバルクにとってくるとか、人に聞かれたら嘲笑される(用途的な意味で)系のコード書いてるんだが、どうもTwitterってGzipのヘッダー無しでGzipなContentを返してくるから注意だぜ!
(ものすごいバイナリな感じの出力がされる。出力を保存して gzip -dc < imifu して読める物がでてきたら、gzip圧縮されとる)

※以下のコードは単体では意味をなしません。BOT量産する俺みたいなクズにしか用はないと思うので、細かい解説はしない。

#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
use DateTime;
use WWW::Mechanize;
use WWW::Mechanize::GZip;

my $LOGIN_ID = 'uzulla';
my $LOGIN_PASS = 'password';

my $mc = WWW::Mechanize::GZip->new();

my $OAUTH_GW = ' ここら辺参考に>http://d.hatena.ne.jp/uzulla/20100216#p2 ';

my $res = $mc->get($OAUTH_GW);

$res = $mc->submit_form(
        form_id=>'login_form',
    fields => {
        'session[username_or_email]'     => $LOGIN_ID,
        'session[password]' => $LOGIN_PASS
        }) or die 'login failed' ;

$res = $mc->follow_link( url_regex => qr/oauth_verifier=/i );

print $res->content();

exit;

最近Twitterエラーが多すぎるので、適切にエラー処理、リトライなりを挟みましょう。