WordPress記事内に埋め込まれた画像というのはただIMG要素のHREF属性でURLのパスが指定されているだけだから、mixiに日記を投稿する際には一度バイナリファイルを取得するかWordPress内部のアップロード済みファイルのディレクトリパスを取得するか、どちらかの方法で実バイナリファイルを指定しなければいけないようだ。

今回はPEARのHTTP_Requestクラスを使っているのでaddFileメソッドで画像を送信する。本メソッドで引数に指定できるのはバイナリファイルのパスで、バイナリのデータそのものを渡す方法は提供されてないようだ。URLで画像を渡すこともできないらしい。なのでWordPressに実際にアップされたファイルのパスを取得してaddFileすることにする。

WordPressの関数で使えそうな関数はこれ。
wp_upload_dir - アップロードディレクトリ(パス名)を取得する

メディア設定オプションによってアップロード先は変わってしまうようだけど、とりあえずカレントのパスが取得できれば使用上は問題なさそう。

for( $i=1; $i <= count($images); $i++ ) {
$paths = preg_split('/\//', $images[$i-1]);
$filename = $paths[count($paths) - 1];
$upload_dir = wp_upload_dir();
$path = $upload_dir['path'] . '/'. $filename;
$photo = "photo" . $i;
$request->addFile($photo, $path, "image/jpeg");
}

こんな感じでmixi Diary APIに指定されたファイル名でaddFileしてあげると、うまくいくんじゃないだろうか。

試しに画像をぺたり。



サッカー場に行ったらGoogleストリートビューを撮影していた。こういう機材で撮ってたのか。

WordPressプラグインの修正その2 【WordPressからMixiへの連携】【そのひぐらし】
既存のmixi投稿用のWordpressプラグインは、今は廃止されたAPIを使っていて、WSSE認証で接続したあとでAtom APIエンドポイントに画像とテキストを投稿するようになっている。なので認証をOAuthに、Atom APIエンドポイントへの投稿をmixi Graph APIエンドポイントへの投稿にそれぞれ書き換えてあげれば同じように動く。

画像の使用に関しては、Diary APIを通じて3枚まで行える従来方式の他、Photo APIを使って事前にアップロードしておいて、レスポンスで返ってくるMediaItem IDを使って以下のように本文に埋め込めるようになった。

<photo src="v2:「Photo APIで取得したフォト情報のMediaItem ID」">

参照:Diary API

これならば日記1項目につき写真3枚までという制約がなくなるので、いくらでも画像を使えるようになりそう。アメブロもこれに少し似ていて、画像投稿用エンドポイントに画像をアップロードするとレスポンスで画像のURLを取得できるので、HTML本文でIMG要素のHREF属性で指定してあげるだけで画像を表示できる。おそらくこちらも何枚でも画像が使えるんじゃないかと思われる。

Wordpressプラグインの修正 【WordPressからMixiへの記事投稿】【そのひぐらし】