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。
絶賛自作自演中です。
この記事に言及しているこのブログ内の記事
