無理矢理解決。w3mでのコメント投稿
WWW::Mechanizeを利用することで日記の新規投稿は解決を見た。(対症療法的なのは仕方ない……)こうなるとやはりコメントの投稿も解決したいなあと。軽い気持ちでつくり始めたんですが、処理自体はあっさり完成したのでアップしてしまいます。プログラムの基本部分は、塚本さんが公開されています日記投稿プログラムを参考にさせていただきました。どうやらコミュニティへの投稿もちょっといじればできる雰囲気なのでそのうちやろうかな。日記のコメントは日記のid単位で処理をしないといけないので、そこをどう解決するか。という課題があったんですが、これはプログラムに日記ページのURLを渡して処理をすることで対応。で、w3mの外部ブラウザにこのプログラムを指定すると任意の日記ページを閲覧中にMを押下すればコメントの投稿ができてはっぴー(私的に)。注意として、投稿を実行する前にcomment.txtを作成するという手順は守る必要がありますけどね。そんなわけで私の今の運用はこんな感じになっております。w3mで日記閲覧→^Zでw3mをバックグラウンドに→comment.txt作成→fgでw3mに戻る→M押下して投稿実行ソースですが、mixiの仕様でインデントがばっさり落とされるので、邪道だけど全角スペースでインデント。実際に試してみようという奇特な方はvim上で開いて「%s/ /\t/g」とかしてください。あと、$mailと$passは言うまでも無く、修正必須。
#!/usr/bin/perl
# comment.pluse strict;
use WWW::Mechanize;
use Data::Dumper;
$Data::Dumper::Indent = 1;
my $url = 'http://
my $pass = ‘yourpasswd’;
$diary_url =~ /view_diary.pl?id=([0-9]+)$/;
my $diary_id = $1;
sub message{ print @_ }sub abort{ message(@_);
exit 8}if( $diary_id !~ /[0-9]+/ ){ abort(”日id記が指定されていません\n”);}
my $comment_file = ‘./comment.txt’;
abort(”$comment_fileがありません”) unless (-f $comment_file);
message(”$comment_file読み込み中\n”);
open(IN,$comment_file);
my $comment;
read(IN,$comment,-s $comment_file);
close(IN);
# トップページの取得
message(”トップページ取得中\n”);
my $mech = WWW::Mechanize->new();
my $res = $mech->get( $url );
abort(Dumper($res)) unless ($mech->success);
# ログイン
message(”ログイン中\n”);
$mech->form_number(1);
$mech->set_fields(’email’ => $mail, ‘password’ => $pass);
$res = $mech->submit;
abort(Dumper($res)) unless ($mech->success);
while( $res->header(’refresh’)){ my $refresh = $res->header(’refresh’);
message(”リフレッシュ$refreshの処理中\n”);
if( $refresh =~ /url=([^\s;]+)/){ $res = $mech->get(URI->new($1,$mech->uri)); $refresh = $mech->uri; }else{ $res = $mech->reload; } abort(Dumper($res)) unless ( $mech->success);}
# コメントする日記ページに移動
message(”指定idの日記ページへ移動中\n”);
$res = $mech->get(URI->new($diary_url, $mech->url));abort( Dumper($res)) unless ($mech->success);
# コメント本文をセットして確認画面へ
# 自分の日記の場合は削除機能部分を考慮
message(”コメント送信中\n”);
if( !defined( $mech->form_number(2)) ){ $mech->form_number(1);}
$mech->set_visible($comment);
$res = $mech->submit;abort(Dumper($res)) unless ( $mech->success);# 投稿message(”コメントを投稿中\n”);$res = $mech->form_number(1)$res = $mech->click_button(’value’ => ‘ は い ‘);abort(Dumber($res)) unless ($mech->success);# 終了message(”終了\n”);