古い記事
ランダムジャンプ
新しい記事
2010年ごろから、このブログのサイドバーに「ツイッターでの話題の(このブログの)記事」のリストを出していました。仕組みは適当で、このブログのURLでTOPSYを検索し、その結果をスクレイピングして、JavaScript に変換してくっつけてるだけ。

ところが、最近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>