カラクリスタ

「輝かしい青春」なんて失かった人のブログ

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

概要: Perl を使って Twitter 上の一日の発言を引っこ抜く!


まあそんな前置きはどうでもいいんですが、今日ふと 無貌断片 の方に、 一日分の 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は各環境にあわせて書き換えてください。 $usernameTwitter 上の URI に使ってる scree name、$useridTwitter のタイムラインの Feed の URI のなんか ID っぽい文字列、 $timezonePerlDateTimeに指定できるタイムゾーンという感じです。

で、後の部分は 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