Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

PHP 小技集

mixi日記投稿用APIを使ってPHPからmixi日記にポスト

投稿日:


via: mixi for iPhoneから発掘されたmixi日記投稿用API « ku
という事で、iPhone用のアプリをキッカケにmixi日記にポストできるAPIが見つかったそうです。Perlのサンプルコードもあって、すぐ何か作れそうですね・・・と思ったのですが、どちらかというとPHPerなんで、PHPのサンプル作ってみました。

mixi日記投稿APIのPHPサンプルコード

<?php
error_reporting(E_ALL);
require_once 'HTTP/Request.php';
// mixi USER infomation
$user        = 'mixiのログインID';
$pass        = 'mixiのパスワード';
$id          = 'mixiのユーザーID';
// WSSE Authentication
$nonce       = pack('H*', sha1(md5(time().rand().posix_getpid())));
$created     = date('Y-m-d\TH:i:s\Z');
$digest      = base64_encode(pack('H*', sha1($nonce . $created . $pass)));
$wsse_text   = 'UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"';
$wsse_header = sprintf($wsse_text, $user, $digest, base64_encode($nonce), $created);
// mixi POST URL
$url         = 'http://mixi.jp/atom/diary/member_id=' . $id;
//------------------------------------------------------------
// Post Image
//------------------------------------------------------------
$request = new HTTP_Request($url);
$request->setMethod(HTTP_REQUEST_METHOD_POST);
$request->addHeader('X-WSSE',       $wsse_header);
$request->addHeader('Content-Type', 'image/jpeg');
$request->setBody( file_get_contents('添付ファイルのパス') );
if (PEAR::isError($request->sendRequest())) {
die('request failed');
}
$res_code = $request->getResponseCode();
$headers  = $request->getResponseHeader();
$location = $headers['location'];
echo "$res_code\n";
echo "$location\n";
//------------------------------------------------------------
// Post Text
//------------------------------------------------------------
$post_data
= "<?xml version='1.0' encoding='utf-8'?>"
. "<entry xmlns='http://www.w3.org/2007/app'>"
. "<title>テスト</title>"
. "<summary>PHPからAPI経由で投稿しています。</summary>"
. "</entry>";
$request = new HTTP_Request($location);
$request->setMethod(HTTP_REQUEST_METHOD_POST);
$request->addHeader('X-WSSE', $wsse_header);
$request->setBody($post_data);
if (PEAR::isError($request->sendRequest())) {
die('request failed');
}
$res_code = $request->getResponseCode();
echo "$res_code\n";
?>

WSSE認証のところは、「PEAR :: Package :: Services_Hatena」を参考にした「mixiのあしあとAPIを使って「あしあと一覧」を作ってみた – Do You PHP はてな」をそのままパクりました。ゴメンなさい><
あと、写真と本文でポストするときの違いは、写真の場合は Content-Type を付けるって事と、写真の場合は requestBody にそのまま画像データを貼り付けるけど、本文の場合はXMLデータを送るって事かな。

ポストしてみて分かった事

ためしてませんが、先に日記本文を投稿して、そこで得られたURIにimage/jpegをpostしても写真付きの日記にできると思います。

via: mixi for iPhoneから発掘されたmixi日記投稿用API « ku

と書いてあったので、色々なパターンでポストしてみると色々制限がみえました。
・写真だけを登録する事は可能(本文には”body”とだけ表示される)
・本文だけを登録する事は可能
・写真と本文をポストしたい場合、写真→本文の順番じゃないといけない
・画像は1枚しかポストできない。
・画像は上書きもできない。Locationで返ってきたURLに画像を再ポストすると500エラー
・本文は何回でも上書き可能
PCからだとmixi日記には3枚まで写真を添付できるはずだけど、1枚だけになっているのはiPhone用のインターフェイスだからなのかな?
写真を後から追加できないというのは、ちょっと不便かもしれませんね。
もしかしたら、その辺は隠された別メソッドがあるのかもしれないけど。
あと、AtomPub といいつつ仕様がちょっとおかしいぞって話題がでています。
そのあたり、下記ページが詳しかったので参照のこと。
たけまる / AtomPub on mixi?

まとめ

PEAR化についてはshimookaさんあたりがServices_MixiAPIに追加とかしてくれると(勝手に)思い込んでいるので期待して待つ事にします。
コレ使って色々作れそうですよねぇ。
mixi日記と外部ブログとの関係について、色々不満な点があるのでその辺解決するようなサムシングを作りたいなーと思っております。
っていうかズバリ言ってしまうと、MT用PostToTwitterプラグインのmixi版みたいなやつをエムロジック放課後プロジェクトさんに作ってほしい。あ、PHP関係ないけど。

ブログのエントリーをGREE日記に自動投稿する「RSS2GREE」
mixi日記と外部ブログの微妙な関係
ブログのエントリーをmixi日記に自動投稿する「RSS2mixi」

-PHP, 小技集

執筆者:


  1. [PHP][PEAR]日記投稿APIを追加したServices_MixiAPI 0.2.0リリース

    via. mixi for iPhoneから発掘されたmixi日記投稿用API « ku, mixi日記投稿用APIを使ってPHPからmixi…

  2. WATARU より:

    はじめまして。WATARUと申します。
    今回iPhoneVer2.2を脱獄して、いろいろアプリを入れてたら、Mixiアプリの認証ができなくなり、
    「ユーザー名とパスワードを確認してください (401:Expired X-WSSE)」
    と表示されてしまいます。
    どうしたら正常に作動するようになりますか?
    お手数ですが以下までメールを頂けると幸いです。お願いいたします。

  3. yager より:

    >WATARUさん
    ワタクシはiPhoneユーザではありませんし、ここで使っているMixi APIも非公式のものですので、ワタクシからはなんのアドバイスもできそうもありません。
    そもそも、「脱獄」する事自体、こういったトラブルのリスクを伴う事を承知の上でやっている事と思いますので自己責任で解決するべき問題ではないですか?
    冷たい言い方になって申し訳ないですが、メールを差し上げる事もいたしません。
    ※ちょっと問題になりそうな気がするのでメールアドレス消しますね。

  4. WATARU より:

    御配慮感謝します。
    なんとか、復旧できました。
    ありがとうございました。

comment

メールアドレスが公開されることはありません。

関連記事

ハイビジョン映像(AVCHD)を記録するとMTSファイルになって扱いにくいのでffmpegでmp4に変換

手持ちのビデオ撮影機材が予算の関係で中古で購入したミラーレス一眼(GF1、GF3、GX1、なぜか全てPanasonic LUMIX)なんですが、高画質で録画しようとするとAVCHDのMTSファイルにな …

第6回:TinyURL の遷移先が怖くて開けない場合の対処法

twitter や、mixi でよく使われている、 TinyURL というWEBサービスは長〜いURLを短〜くしてくれるので便利なんだけど、他の人が書いている TinyURL をクリックするのがちょっ …

no image

ブログデザインをリニューアルしました!これからはCreazy!

1年以上も寝かし続け、いっそなかった事にしようと思っていたリニューアルをついに公開しました! 4回に渡って実施されたブログデザイン勉強会の後押しもあり、途中脳内が血みどろになるほど苦労してここまでこぎ …

動画を楽しもう!(Ustream.tvで録画した動画「Past Clips」のFLVをダウンロード可能にするブックマークレット)

【2012/01/03:更新】 Ust DLの公式ページができました。今後の最新情報はこちらをご確認ください。 Ust DL 公式ページ 【2010/04/13:追記】 スクリプトをアップデートしまし …

高感度撮影した写真のノイズ低減を3つのソフトで比較(Photoshop Elements, Neat Image, Photoshop Lightroom)

先日、ホタルの高感度撮影に挑戦したところ、愛用しているGF3ではノイズがかなりヒドイ状態で見るも無残だったため、少しでもノイズを除去できないかと調べてみました。画像の編集にはPhotoshop Ele …

スポンサードリンク

スポンサードリンク