Perlで一日分のTwitterの発言を取る方法

読了まで:約2分


概要: 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を使ってるんですが、空繰再繰と無貌断片に記事を投稿する時、

  1. 記事書く
  2. ローカルの管理ディレクトリに記事を追加
  3. git addして新しい記事をgitの管理下に置く
  4. git ci &amp;&amp; git pushする
  5. サーバのpost-updateフックスクリプトがサーバ上のplasxomの記事ディレクトリを update

という感じの流れになるんですが、サーバ上で記事ファイルを生成とかすると、 git add &amp;&amp; git ci &amp;&amp; git pushをやらなくちゃいけなくなるのと、 記事を追加する前にローカルでgit pull origin masterしないと問題があるのと、

Twitter の一日のまとめログのタイトルどーすんだべ!? という問題に遭遇し、

なんかスクリプト書くのがめんどくさくなった次第。 まあちょっとした手間なんだけど、やる気が萎えてしまったと言う。

まあ Twitter の一日の発言を引っこ抜く部分はできたんで、 まあ良しとしとこうかなという感じです。

以上、スクリプト書いてたらやる気がなえてしまったという話でした。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。