「ツイッターで話題の(このブログの)記事」リストを一時撤収
2013-08-22-1
[ThisSite][Programming]
2010年ごろから、このブログのサイドバーに「ツイッターでの話題の(このブログの)記事」のリストを出していました。仕組みは適当で、このブログのURLでTOPSYを検索し、その結果をスクレイピングして、JavaScript に変換してくっつけてるだけ。
ところが、最近TOPSYで動的にページ生成するようになったのをうけて、まったく動かなくなりました。APIを使ってくださいということでしょうが、有料だし、いろいろハックする時間もないのであきらめます。余裕があるときに、また何か別の手を考えてみます。
使ってたソースをここに載せておきます。前述の通り、動作しませんが、やっつけスクレイピングタスクのための自分用テンプレートとして。
topsy2js.pl :
張りつけ用のHTMLコード片:
ところが、最近TOPSYで動的にページ生成するようになったのをうけて、まったく動かなくなりました。APIを使ってくださいということでしょうが、有料だし、いろいろハックする時間もないのであきらめます。余裕があるときに、また何か別の手を考えてみます。
使ってたソースをここに載せておきます。前述の通り、動作しませんが、やっつけスクレイピングタスクのための自分用テンプレートとして。
topsy2js.pl :
#!/usr/bin/perl use strict; use warnings; use Encode; use LWP::Simple; use Getopt::Long; use JSON; $Getopt::Long::autoabbrev = 1; my %opt; GetOptions(\%opt, "encoding=s", "number=s", "output=s", "url=s"); my $encoding = $opt{'encoding'} || "utf8"; my $number = $opt{'number'} || -1; my $output_fn = $opt{'output'} || "rss.js"; my $url = $opt{'url'} || "http://topsy.com/s/site%3Achalow.net"; my $jstr = get($url); my @items; while ($jstr =~ m%(<div class="list-link-v3.*?class="trackback-link.*?</a>)%gsm) { my $c = $1; my ($turl, $num) = $c =~ m%<a href="(.+?)" class="trackback-link.+?">([\d,]+) more</a>%; $turl = "http://topsy.com$turl"; my ($url, $title) = $c =~ m%href="(.+?)".+?>(.+?)</a>%; push @items, qq(<a href="$turl" target="_blank" ) .qq(style="font-weight:bold;color:red">$num</a> ) .qq(<a href="$url" target="_blank">$title</a>); } my $str = join("<br>", @items); if (open(my $fh, ">:encoding($encoding)", $output_fn)) { print $fh "document.writeln('$str');\n"; close $fh; }
張りつけ用のHTMLコード片:
<div class="stdbox"> <table> <tr><td> <a href="http://topsy.com/s/site%3Achalow.net" target="_blank">ツイッターで話題の記事</a></td></tr> <tr><td> <script type="text/javascript" src="http://chalow.net/var/topsy.js"></script> </td></tr> </table> </div>