Twitter の Archive から KML
via ttp://movatwitter.jugem.jp/?eid=60
モバツイの写ツがジオタグを付加できるようになったようなので時々試していたんだけど、私のやり方が悪いのか携帯が悪いのか全く付加されない。ExifTool がなんか警告だすのでこれが怪しいと思っている。
くやしいので Twitter の Archive から KML を生成して Google マップで表示してみた。うーん…。
http://maps.google.co.jp/?q=http://hetappi.pm.googlepages.com/hetappi-location-log.kml
一応のっけとくけど使い捨てなので。
#!/usr/bin/perl use strict; use warnings; use utf8; use URI; use LWP::UserAgent; use Web::Scraper; use Geo::Coder::Google; use Geo::GoogleEarth::Document; my @statuses = get_twitter_archive('hetappi'); my $geocoder = Geo::Coder::Google->new( apikey => 'Your API Key' ); my $ua = LWP::UserAgent->new( agent => 'Mozilla/5.0', keepalive => 1 ); $geocoder->ua($ua); my $doc = Geo::GoogleEarth::Document->new; foreach my $s(@statuses) { next unless $s->{status} =~ /L:(.+?)[\[\s]/; my $name = $1; my $location = $geocoder->geocode( location => $1 ); next unless $location; my $status = $s->{status}; if ($status =~ m!<a href="http://f\.hatena\.ne\.jp/twitter/((\d{8})\d{6})"!) { my $img = sprintf '<img src="http://f.hatena.ne.jp/images/fotolife/t/twitter/%s/%s.jpg">', $2, $1; $status =~ s!http://f\.hatena\.ne.jp/twitt\.\.\.!$img!; } $doc->Placemark( name => $name, lat => $location->{Point}->{coordinates}[1], lon => $location->{Point}->{coordinates}[0], address => $location->{address}, description => $status . '<br>' . $s->{date} ); } binmode STDOUT, ':utf8'; print $doc->render(); sub get_twitter_archive { my $id = shift; my $scraper = scraper { process '//table[@id="timeline"]/tr', 'statuses[]' => scraper { process '//.', 'id' => ['@id', sub { $_[0] =~ /status_(\d+)/; $1; }]; process '//span[@class="entry-content"]', 'status' => 'HTML'; process '//abbr', 'date' => '@title'; }; }; my $ua = LWP::UserAgent->new( keepalive => 1 ); $scraper->user_agent($ua); my @statuses; for (my $page = 1; ; ++$page) { my $uri = URI->new(sprintf 'http://twitter.com/%s?page=%s', $id, $page); my $res = $scraper->scrape($uri); last unless $res->{statuses}; push @statuses, @{$res->{statuses}}; } @statuses; }