TwitterのURLのつぶやき数の取得方法@perl
URLのつぶやかれ数をperlで取得する方法メモ。
↑最近よく見るこれの数値をperlで取り出す方法
HTMLでは
<div class="textwidget"> <a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-lang="en" data-url="http://satoru.net">Tweet</a> <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
結論
http://urls.api.twitter.com/1/urls/count.jsonに
引数url(?url=http://satoru.netとか)投げたらjsonにcountが返ってくる
つまり、http://urls.api.twitter.com/1/urls/count.json?url=http://satoru.net こんなかんじ。
ソース
#!/usr/bin/perl use WebService::Simple; use Data::Dumper; binmode STDOUT, ":utf8"; my $ws = WebService::Simple->new( base_url => 'http://urls.api.twitter.com/1/urls/count.json', response_parser => 'JSON' ); my $json = $ws->get( { url => 'http://satoru.net/' } )->parse_response; print Dumper(\$json);
結果
$VAR1 = \{ 'count' => 4, 'url' => 'http://satoru.net' };
なんだ簡単なのねえ
おまけ(with memcached)
$memはmemcachedを宣言してね。
はてブ数とTwitter数を取得するための関数。URLを投げると値がかえってくる。
繰り返し使う場合を想定してurlをキーにmemcachedにキャッシュ。
sub get_hatena{ my $url = shift; my $key = "hatena:$url"; if($mem->get($key)){ return $mem->get($key); } else { my $service = WebService::Simple->new( base_url => 'http://api.b.st-hatena.com/entry.count?url=http://www.hatena.ne.jp/', ); my $res = $service->get( { url => $url } ); my $count = $res->is_success && $res->content || "0"; $mem->set($key,$count,60*60*20); return $count; } } sub get_twitter{ my $url = shift; my $key = "twitter:$url"; if($mem->get($key)){ return $mem->get($key); } else { my $service = WebService::Simple->new( base_url => 'http://urls.api.twitter.com/1/urls/count.json', response_parser => 'JSON' ); my $res = $service->get( { url => $url } ); my $count = $res->is_success && eval{$res->parse_response->{count}} || "0"; $mem->set($key,$count,60*60*20); return $count; } }