YAPC::Asia 2014 Talks 総選挙
皆様お元気でしょうか。YAPCトークに応募された方々は 日々一喜一憂していると思います。 そんな、あなたのためにツイッターランキング作ってみました。 なんとトップは2倍以上の得票を得ているんですwwww
そして、YAPCに参加する方々、自分の推しスピーカーが登壇しない 危機にあるかもしれません。ぜひ応援してあげてください。 CD買わなくても投票できます。
YAPC 2014 Talks Social Ranking
私のMojoliciousトークは81位という微妙な位置におります。 気になる方がいらっしゃりましたら、ソーシャルボタンを押してください。
参考資料
http://memememomo.hatenablog.com/entry/20100828/1282989622 http://dqn.sakusakutto.jp/2010/06/perlhtml.html
追記
フェイスブックとハテブに対応しました。
ソース
use strict; use warnings; use Mojo::Template; use LWP::UserAgent; use HTML::TreeBuilder; use HTML::TreeBuilder::XPath; use HTML::Selector::XPath 'selector_to_xpath'; use WebService::Simple; use Data::Dumper; $|=1; my $url = 'http://yapcasia.org/2014/talk/list'; my $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"; my $ua = LWP::UserAgent->new('agent' => $user_agent); #my $http_proxy = "http://your_proxy_host:8080/"; # proxyメソッドを使う場合 #$ua->proxy([qw(http https)], $http_proxy); my $res = $ua->get($url); my $html = $res->content; my $tree = HTML::TreeBuilder::XPath->new; $tree->parse($html); my @htmls = $tree->findnodes(selector_to_xpath('div.title div a')); my @speakers = $tree->findnodes(selector_to_xpath('p.name a')); my $ws_t = WebService::Simple->new( base_url => 'http://urls.api.twitter.com/1/urls/count.json', response_parser => 'JSON' ); my $ws_f = WebService::Simple->new( base_url => 'https://api.facebook.com/method/fql.query', ); my @talks = (); for $html(@htmls){ my $url = "http://yapcasia.org" . $html->attr('href'); my $json_t = $ws_t->get( { url => $url } )->parse_response; my $xml_f = $ws_f->get( { query => "select like_count from link_stat where url='" . $url . "'" } )->parse_response; my $res = $ua->get('http://api.b.st-hatena.com/entry.count?url=' . $url ); my $hatebu = $res->content; my $hatebu_c = ($hatebu eq "") ? 0 : $hatebu; my $speaker = shift @speakers; my $talk = { name => $html->as_text, url => $url, count => $json_t->{count} + $xml_f->{link_stat}->{like_count} + $hatebu_c, speaker => $speaker->as_text, }; push (@talks, $talk); } my @sorted_talks = sort { $b->{count} <=> $a->{count} } @talks; my $mt = Mojo::Template->new; my $output = $mt->render(<<'EOF', @sorted_talks); % my (@talks) = @_; % my $i = 1; <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Talks Social Ranking - YAPC::Asia Tokyo 2014 </title> </head> <body> <table> <th> <td>Rank</td> <td>Name</td> <td>Speker</td> <td>Tweeted</td> </th> % for my $talk (@talks) { <tr> <td <%= ($i>50)? 'style="color: #ee22bb; "' : '' %>><%= $i %></td> <td><a href ="<%= $talk->{url} %>"><%= $talk->{name} %></td> <td><%= $talk->{speaker} %></td> <td><%= $talk->{count} %></td> </tr> % $i++; % } </table> <footer><a href="http://dokechin.hatenablog.com">@dokechin</a> update <%= localtime %></footer> </body> </html> EOF print $output;