AnyEvent + OAuth で Twitter API を叩く
最近ようやく CPAN Author になりました。
ふとAnyEvent::Twitter::StreamをOAuthに対応させたいなぁ、と思ったので(ついでにChirpUserStreamsにも) - taiyoh独言が目にとまったので、モジュールの紹介もかねて書いておきます。
AnyEvent::Twitter の _make_oauth_request() という undocumented なメソッドを使えば ChirpUserStream も OAuth 対応させることができます。
config.json は eg/gen_token.plで生成できます。
ただ、 want_body_handle やら on_header やらオプションが必要なので、根本的にはリンク先とは変わらない感じになっています。
こんなかんじ
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode; use Data::Dumper; use AnyEvent; use AnyEvent::HTTP; use AnyEvent::Twitter; use JSON; use Perl6::Slurp; my $json_text = slurp 'config.json'; my $config = decode_json($json_text); my $ua = AnyEvent::Twitter->new(%$config); my $req = $ua->_make_oauth_request( request_url => 'http://chirpstream.twitter.com/2b/user.json', request_method => 'GET', extra_params => {} ); my $cv = AE::cv; http_request('GET' => $req->to_url, want_body_handle => 1, on_header => sub { my $hdr = shift; warn "$hdr->{Status}: $hdr->{Reason}"; }, sub { my $hdl = shift; my $r = sub { my (undef, $json) = @_; if (my $text = $json->{text}) { print encode_utf8 "$json->{user}{screen_name}: $text\n"; } else { print encode_utf8 Dumper($json); } }; $hdl->on_read(sub { $hdl->push_read( json => $r ); }); } ); $cv->recv; exit; __END__
余談
GitHub - punytan/AnyEvent-Twitter-Chirp: DEPRECATED をちょっと弄れば多少マシなものはできるのかな。ただ、AnyEvent::Twitter::Chirp を書いた - punitan (a.k.a. punytan) のメモにある通りなのでメンテする予定は特にありません。