概要: Perl を使って Twitter 上の一日の発言を引っこ抜く!
- 僕が Twitter でつぶやかなくなった理由 /post/50891451761 という記事を書いてからなぜかモリモリ Twitter でつぶやくようになった nyarla です。 みんなつぶやいてますか?
まあそんな前置きはどうでもいいんですが、今日ふと 無貌断片 の方に、 一日分の Twitter の発言を投稿したらよさげなんじゃないかなーと思い投稿スクリプトを書いてたんですが、なんか途中で面倒になってきたので、 Twitter のタイムラインから一日の発言を引っこ抜く部分だけ抽出して Blog の記事にしてみることにしました。
ということで Twitter の発言から一日分を抜き出すコートは下記の通り。
#!/usr/bin/perl # this code is under public domain. use strict; use warnings; use XML::Feed; use URI; my $username = 'nyarla'; my $userid = '3402381'; my $timezone = 'Asia/Tokyo'; my $now = time; my $yesterday = $now - ( 60 * 60 * 24 ); my $page = 1; my $uri = URI->new("http://twitter.com/statuses/user_timeline/${userid}.atom"); $uri->query_form( count => 200, page => $page ); my @timelines = (); LOOP: while ( 1 ) { my $feed = XML::Feed->parse( $uri ) or die "Failed to fetch twitter timeline feed: " . XML::Feed->errstr; for my $entry ( $feed->entries ) { my $twit = $entry->content->body; $twit =~ s{^$username: [[ ]] }{}; my $date = $entry->issued; $date->set_time_zone( $timezone ); if ( $date->epoch <= $yesterday ) { last LOOP; } push @timelines, +{ twit => $tiwt, date => $date, }; $page++; $uri->query_form( count => 200, page => $page ); } sleep 1; } for my $timeline ( @timelines ) { my ( $twit, $date ) = @{qw( $timeline )}{qw( twit date )}; # your code here. } exit;
なお上記のコードは自由に使って欲しいのでパブリックドメインとします。
んで解説。
最初の方の$username
、$userid
、$timezone
は各環境にあわせて書き換えてください。
$username
は Twitter 上の URI に使ってる scree name、$userid
は Twitter のタイムラインの Feed の URI のなんか ID っぽい文字列、
$timezone
は Perl のDateTime
に指定できるタイムゾーンという感じです。
で、後の部分は Twitter のタイムラインから一日分の発言を引っこ抜く部分で、 一日分の発言が引っこ抜けるまで無限ループしてページを辿ってって、 引っこ抜けたらループを終わる、というコードです。 まあそのまんまなコード書いてるので、多分コード読めば理解できると思います。
まあコードの話は以上。
で、うちの空繰再繰と無貌断片では plasxom という自作の Blog システムを使ってて、
ファイルの管理にgit
を使ってるんですが、空繰再繰と無貌断片に記事を投稿する時、
- 記事書く
- ローカルの管理ディレクトリに記事を追加
git add
して新しい記事をgit
の管理下に置くgit ci && git push
する- サーバの
post-update
フックスクリプトがサーバ上のplasxom
の記事ディレクトリを update
という感じの流れになるんですが、サーバ上で記事ファイルを生成とかすると、
git add && git ci && git push
をやらなくちゃいけなくなるのと、
記事を追加する前にローカルでgit pull origin master
しないと問題があるのと、
Twitter の一日のまとめログのタイトルどーすんだべ!? という問題に遭遇し、
なんかスクリプト書くのがめんどくさくなった次第。 まあちょっとした手間なんだけど、やる気が萎えてしまったと言う。
まあ Twitter の一日の発言を引っこ抜く部分はできたんで、 まあ良しとしとこうかなという感じです。
以上、スクリプト書いてたらやる気がなえてしまったという話でした。