mixi graphの日記APIで写真つき投稿

2012/7/3 [11:31:06] (火) 天気

先日mixiの日記に投稿するスクリプトを作ったんだけど(「次はmixiのgraph APIから」 http://t2aki.doncha.net/?id=1339828183)これはとりあえず本文だけの投稿で、本文をjsonにしてリクエストしている。

でも、せっかくなので、写真付きの日記も投稿できるようにしてみた。


OAuthのやりとり、access_token や refresh_token の取得などは前回の記事と同じなので、ここでは省略。

perl の lwp を使って multipart/form-data をリクエストするところのメモ。

バウンダリや、文字のエスケープなど、いろいろ考えなきゃいけないことがあって、LWP::UserAgent と HTTP::Requestだけで自作するのはよくわからんなあ、と眺めたり検索すると HTTP::Request::Common というのを使うのが定番だと。さすがperl、欲しいものはちゃんとある。感謝。


てことで


use HTTP::Request::Common qw(POST);
my $ua = LWP::UserAgent->new();
my $req = POST(
    URL,
    Content=>[
        ’request’=>JSON形式の日記本文,
        ’photo1’=>[画像ファイル]
    ],
    ’Content-Type’=>’multipart/form-data’,
    ’Authorization’=>’OAuth ’ . ACCESS_TOKEN
);
$ua->request($req);

例によってこんだけでOK。

content-type も access_token も、ここで指定するとちゃんと header に入っている。


ちょっとハマったのがPOSTの書き方。対象URLに実際にリクエストするのは、いろいろなケースがあってリクエストするものが違う。リクエストを生成するところとは別、実際に対象URLにリクエストするのは一カ所にした方がコードのメンテがしやすい。

でも、リクエストを生成しようと POST URL ... を入れるとこの時点で対象URLにリクエストしてしまう。

「LWP::UserAgent の post(...) メソッドは$ua->request(POST ...) への ショートカットとして存在しています。」

ということで、POSTと書くと飛んでいってしまう。

なので、

use HTTP::Request::Common qw(POST);

と、Common の POST を使うことを指定して、POSTと書いてもリクエスト生成だけですよ、ということに。

写真の枚数とか画像ファイルの存在チェックなどは、ここにつけたし。

perl最高っす!


あらゆる婚活してみました (彼氏いない歴20年のオタ女ですが)

『あらゆる婚活してみました (彼氏いない歴20年のオタ女ですが)』

中村純子

<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】