nDiki

2009年3月20日 (金)

TwitterアイコンPerl スクリプトで更新する (改)

Twitterアイコンを更新する Perl スクリプト (記事) が最近失敗することが多くなった。 どうやら同じファイル名画像アップロードするとうまく更新されないようなので、日時にもとづいたファイル名にしてからアップロードするようにしてみた。

最初に作った時から若干 Twitter のページ構造が変わってスクリプトも修正していたので、それと合わせると下記になる。

今のところ順調にアイコンチェンジできている感じだ。

 #!/usr/bin/perl

 use strict;
 use warnings;
 use WWW::Mechanize;
 use File::Temp qw(tempdir);
 use File::Spec;
 use File::Copy;

 die "no file name" if @ARGV == 0;
 my $file_name = $ARGV[0];

 my $name     = 'ユーザ名';
 my $password = 'パスワード';

 my $mechanize = WWW::Mechanize->new();
 $mechanize->get('http://twitter.com/');
 die unless $mechanize->success;
 $mechanize->submit_form(form_number => 2,
                         fields      => {
                                    'session[username_or_email]' => $name,
                                    'session[password]'          => $password}
 );
 die unless $mechanize->success;
 $mechanize->follow_link(url => '/account/settings');
 die unless $mechanize->success;
 $mechanize->follow_link(url => '/account/picture');
 die unless $mechanize->success;

 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
   = localtime(time);
 my $tmpdir = tempdir(CLEANUP => 1);
 $file_name =~ /.*(\..*)$/;
 my $suffix = $1;
 my $tmp_file_name = File::Spec->catfile(
                                     $tmpdir,
                                     sprintf("%04d%02d%02d%02d%02d%02d$suffix",
                                             $year + 1900,
                                             $mon + 1, $mday, $hour, $min, $sec
                                     ));
 copy($file_name, $tmp_file_name) or die $!;
 $mechanize->submit_form(
                   form_number => 1,
                   fields => {'profile_image[uploaded_data]' => $tmp_file_name}
 );
 die unless $mechanize->success;

[ WWW::Mechanaize ]

[ 3月20日全て ]

About

Naney Naneymx

Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。

※本サイトの内容は個人的見解であり所属組織とは関係ありません。

Process Time: 0.073187s / load averages: 0.25, 0.34, 0.32