概要: 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 の一日の発言を引っこ抜く部分はできたんで、 まあ良しとしとこうかなという感じです。
以上、スクリプト書いてたらやる気がなえてしまったという話でした。
#FIXME