今頃だけどphpでmixi Graph APIのDiary APIを使い日記投稿
「PHP(WordPress)を使ってmixiの日記を内容を投稿できないか」
という問い合わせがあり、調査したのでせっかくなので記事にまとめました。
「PHP mixi API」などで検索しても情報が古く、
APIの仕様が変更後の記事は極端に少なかったので
自分でリファレンスを読んでいくしかなかったです。
(正直、需要がないから書かれていないことは気づいています。。。笑)
mixi Partner Dashboardにてアカウント登録
公式サイトの手順通りにアプリの登録申請を行います。
そこでクレデンシャル情報(Consumer KeyとConsumer Secret)を取得します。
この2つの値はAPI連携のプログラムに必須となる情報です。
クレジットカードの登録が必要でした。
お金がかかるわけではなく、実在確認や本人認証みたいなものですね。
アクセストークンを取得する
mixiとの連携アプリケーションを使ってもらう上で一番最初にすることは、
各ユーザーにアプリの利用同意をさせる必要があります。
そのためのURLを作ります。
scopeは日記の投稿なので w_diary を指定します。
stateは適当で良いです。
https://mixi.jp/connect_authorize.pl?client_id=[Consumer Key]&response_type=code&scope=w_diary%20r_diary&state=2017
このURLにアクセスすると下記のようなページに飛びます。
~は以下のアクションの許可を要求しています。
ご確認のうえ、問題なければ同意ボタンを押してください。日記
自分と友人の日記・イイネ・コメントを取得します。
自分の日記・イイネ・コメントを投稿・削除します。
アプリ利用時にこのような画面が表示され、ユーザーに同意を求めます。
日記への投稿に関してのアクション許可のメッセージが表示されていますね。
同意するとURLにcodeが含まれた状態で自分のアプリ画面に戻ります。
http://[アプリケーションURL]/?state=2017&code=ed7aab8e63737794197ef46d35cXXXXXXXX
このcodeが各APIを利用するときに必要となってきます。
リフレッシュトークン、アクセストークンの入手
※curlでしか検証していませんので、PHPで組みなおす必要はあります。
リフレッシュトークンを取得するためのcurlコマンド
curl -F grant_type=authorization_code -F client_id=[Consumer Key] -F client_secret=[Consumer Secret] -F redirect_uri=[アプリケーションURL] -F code=ed7aab8e63737794197ef46d35cXXXXXXXX https://secure.mixi-platform.com/2/token {"refresh_token":"b0db3bf84baf1af90aed246f86263XXXXXXXX","expires_in":900,"access_token":"8e0c31fc9e0e89f63c7a538c07cf7772XXXXXXXX","token_type":"Bearer","scope":"r_diary w_diary"}
ここで取得したrefresh_tokenを使いアクセストークンを取得します。
アクセストークンを取得するためのcurlコマンド
curl -F grant_type=refresh_token -F client_id=[Consumer Key] -F client_secret=[Consumer Secret] -F refresh_token=b0db3bf84baf1af90aed246f86263XXXXXXXX https://secure.mixi-platform.com/2/token {"refresh_token":"b0db3bf84baf1af90aed246f86263XXXXXXXX","expires_in":900,"access_token":"ebb44d7facb16e52c9261de0afb97XXXXXXXX","token_type":"Bearer","scope":"r_diary w_diary"}j
コマンドをたたけば、アクセストークンが更新されて返ってきます。
900秒なので有効期間は15分です。
PHPなどのシステムに組み込む場合は、有効期限とトークンをDBに保存しAPI連携時に期限をみて更新(有効であれば飛ばす)というイメージになるかと思います。
PHPにてDiary APIでの日記投稿
developer.mixi.co.jp
アクセストークンさえ取得できればプログラムは簡単です。
サンプルコードはコピペしてつなげてもらえれば使えるはずです。
まずは投稿データを作成
privacyの引数はmixiの技術仕様をご覧ください。
<?php $post_data = array( 'title' => $title, 'body' => $body, 'privacy' => array( 'visibility' => "friends", 'show_users' => "0", ), );
エンドポイントを指定し、ヘッダー情報にトークンをセット
トークンはこのような形です。
Authorization: Bearer ebb44d7facb16e52c9261de0afb97XXXXXXXX
<?php //エンドポイント $url = 'https://api.mixi-platform.com/2/diary/articles/@me/@self'; //ヘッダーにトークンを入れる $headers = array( 'Host:api.mixi-platform.com', 'Content-Type: application/json', 'Authorization: Bearer ' . $code, );
必要な情報をjson変換しセット
今回は記事のみの投稿(画像はなし)なのでシンプルにcontentに投稿データをjson変換してセットします。
<?php //パラメータ $options = array( 'http' => array( 'method' => 'POST', 'content' => json_encode($data), 'header' => implode("\r\n", $headers), 'ignore_errors'=>true, ) );
file_get_contentsでAPI実行
本当はtry-catchなどを実装する必要がありますが、
ひとまずテスト的に@(エラー制御演算子)を使いました。
結果をdumpして出力しています。
<?php $respons = @file_get_contents($url, false, stream_context_create($options)); //結果を表示 echo "<hr><pre>"; var_dump($respons); echo "</pre>";
投稿に成功した場合、新しく作成された日記のIDが返ってきます。
アクセストークンの更新さえ上手くプログラムできれば、API実行部分はパラメータをセットして送信するだけの簡単な処理です。
調査には時間がかかりましたが、サンプルコード作成は20分程でできました。
mixi連携をお考えのかたはぜひ参考にしてください。
開発のご相談も承っております。