Twitter のストリーミング API を試す
2010-04-15-2
[WebAPI][Programming]
今日から始まった謎のツイッタードラマ(?)を横目に、ツイッターの Streaming API を試してみました。この本を参考にしました。
■辻村浩 / Twitter API プログラミング
(ref. [2010-04-14-1])
ストリーミングAPIって何かというと、タイムラインがひたすらだらだらと流れ続けるAPIです。
以下紹介するのは契約無しで自由に使えるバージョンで、タイムラインから適当に間引いて全体の5%くらいが取得できるみたい。
噂では億単位のお金を払えばほぼ100%取れたりするみたいだけどよく分からない。
使い方を curl コマンドで説明。
JSONで欲しい場合はこう(U=アカウント名、P=パスワード):
XMLで欲しい場合はこう:
特定のキーワードにマッチするのだけフィルタリングもできます。
「google」を含むツイートだけ取り出すには:
Perl のサンプルプログラムをどうぞ。
さくらの500円レンタルサーバで動くように書きました(JSON.pm は必要)。
日本語のユーザの最新のつぶやきを取ってきて100件単位で出力します。
実際に使う場合は、あとから解析・分析することを前提に、数分くらいの単位でファイルに書き出すようなロジックにして、どんどんデータを蓄積していくと良いかと。
もちろんオンメモリでがっつりやっちゃってもいいし。
参考書籍:
■徳山豪 / オンラインアルゴリズムとストリームアルゴリズム (アルゴリズム・サイエンスシリーズ 5 数理技法編)
(ref. [2007-09-13-2])
ちなみに、Streaming API を使うにあたって専用の別アカウントを取りました。使い方を間違ってアカウント停止になっちゃうと困るからね。
専用アカウントはこちらです→@apipix。
絶賛自作自演中です。
■辻村浩 / Twitter API プログラミング
(ref. [2010-04-14-1])
ストリーミングAPIって何かというと、タイムラインがひたすらだらだらと流れ続けるAPIです。
以下紹介するのは契約無しで自由に使えるバージョンで、タイムラインから適当に間引いて全体の5%くらいが取得できるみたい。
噂では億単位のお金を払えばほぼ100%取れたりするみたいだけどよく分からない。
使い方を curl コマンドで説明。
JSONで欲しい場合はこう(U=アカウント名、P=パスワード):
curl -uU:P http://stream.twitter.com/1/statuses/sample.json
XMLで欲しい場合はこう:
curl -uU:P http://stream.twitter.com/1/statuses/sample.xml
特定のキーワードにマッチするのだけフィルタリングもできます。
「google」を含むツイートだけ取り出すには:
(curl の「-d」オプションは POST します。詳しくは「man curl」)curl -uU:P -dtrack=google http://stream.twitter.com/1/statuses/filter.json
Perl のサンプルプログラムをどうぞ。
さくらの500円レンタルサーバで動くように書きました(JSON.pm は必要)。
日本語のユーザの最新のつぶやきを取ってきて100件単位で出力します。
#!/usr/bin/perl use strict; use warnings; use JSON; use utf8; use open ':utf8'; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; my $user = "apipix"; my $passwd = "PASSWORD"; my $ep = "http://stream.twitter.com/1/statuses/sample.json"; my $cmd = "/usr/bin/curl -u$user:$passwd --stderr /dev/null $ep"; if (open(my $fh, '-|', $cmd)) { my @tweets = (); while (<$fh>) { my $j = from_json($_); next unless $j->{'user'} and $j->{'user'}{'lang'} eq "ja"; push @tweets, $j; if (@tweets == 100) { proc(\@tweets); @tweets = (); } } close $fh; } sub proc { my ($j_ref) = @_; foreach my $j (@$j_ref) { print "$j->{'user'}{'name'}: $j->{'text'}\n"; } }
実際に使う場合は、あとから解析・分析することを前提に、数分くらいの単位でファイルに書き出すようなロジックにして、どんどんデータを蓄積していくと良いかと。
もちろんオンメモリでがっつりやっちゃってもいいし。
参考書籍:
■徳山豪 / オンラインアルゴリズムとストリームアルゴリズム (アルゴリズム・サイエンスシリーズ 5 数理技法編)
(ref. [2007-09-13-2])
ちなみに、Streaming API を使うにあたって専用の別アカウントを取りました。使い方を間違ってアカウント停止になっちゃうと困るからね。
専用アカウントはこちらです→@apipix。
絶賛自作自演中です。
この記事に言及しているこのブログ内の記事