Twitterの書き込みをアバウトミーにシンクロするPerlスクリプト
スポンサードリンク
(2009-4-9 23:09追記)
このページのスクリプトを改良したスクリプトを
Twitterの書き込みをアバウトミーにシンクロするPerlスクリプト、Config::Pitを使ってパスワードをスクリプトの中に書かない版
にて書きました。
Twitterの自分の書き込みをRSSの差分をとることで抽出して、アバウトミーに書き込みます。cronで好きな間隔でまわすといいよ。
M.C.P.C.: アバウトミーにひとことを投稿するPerlスクリプトの最終目標。
当たり前すぎていつも書くの忘れているけれども、自分のパスワード書いているから、パーミッションとかしっかりしておきましょう。
filename: twitter2aboutme.pl
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode; use URI::Fetch; use XML::Feed; use WWW::Mechanize; # Twitterの自分のタイムラインのRSSを入れよう my $uri = 'http://twitter.com/statuses/user_timeline/' . '14119989.rss'; # aboutmeの自分のアカウント情報を入れよう my $username = 'hoge'; my $password = 'fuga'; # 前回のRSSを保存するファイルのパスを入れよう my $past = './past.xml'; my $mech = WWW::Mechanize->new(); $mech->agent_alias( 'Windows Mozilla' ); # Main parse(); exit; sub parse { my $content = load(); my $feed = XML::Feed->parse(\$content); my $list; if ($feed) { # 前回のfeedが正常でない場合ループしない foreach my $entry ( $feed->entries ) { $list->{ $entry->link } = 1; } } $content = get(); $feed = XML::Feed->parse(\$content); exit unless $feed; # メンテナンスなどfeedが正常でない場合は終了 save($content); my $list2; foreach my $entry ( $feed->entries ) { if (!exists $list->{ $entry->link } ){ push @$list2, { title => $entry->title }; } } return if $#$list2 == -1; # アバウトミーログイン login( $username, $password ); # 新着分書き込み for my $item ( reverse @$list2 ) { (my $title = $item->{title}) =~s/^.+?: //o; #print encode('utf8', $title."\n"); post( encode('utf8', $title ) ); } } sub get { my $ua = new LWP::UserAgent; $ua->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6'); $ua->timeout(20); my $res = URI::Fetch->fetch( "$uri",, UserAgent => $ua ) or die URI::Fetch->errstr; return $res->content; } sub load { open my $fh, '<', $past; my $content = do { local $/; <$fh> }; close $fh; return $content; } sub save { my $content = shift; open my $fh, '>', $past; print $fh $content; close $fh; } sub login { my $username = shift; my $password = shift; my $res = $mech->get('http://aboutme.jp/mypage'); $mech->set_visible( $username, $password ); $mech->submit(); die 'Login Failed.' if ($mech->uri() eq 'https://aboutme.jp/account/login'); } sub post { my $text = shift; my $res = $mech->get('http://aboutme.jp/mypage'); $mech->form_number(2); $mech->set_visible( $text ); $mech->submit(); }
(2009-08-27 09:50訂正)
WWW::Mechanizeの最新バージョンだと、投稿が文字化けしますので、以下のとおり訂正します。
post( encode('utf8', $title ) );
↓
post( $title );
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2810
コメントする