はかますたいる!きょろの技的雑記

井上恭輔(@kyoro353)の私的かつ技的な日記です。米国サンフランシスコで暮らすエンジニアです。

mixiのAPIが個人向けに公開されたので早速試してみた - フォトボイス

mixiAPIがやっと一般公開

昨日、ついにmixiの提供する新しいGraphAPIが、個人開発者向けに公開されました!
APIを個人向けに開放するのは、今回が初めてのことです。



個人の方もmixi Graph APIがご利用可能になりました



新しいGraphAPIは、ボイス、フォト、メッセージ、チェック、更新情報、友人情報、などなど、色々と揃っていて、認証認可もOAuth2.0を使用しており、とっても使いやすく簡単です。


mixi Graph API » 技術仕様 » API共通仕様


どんな事が出来るかということですが、お遊びで、ねこのフォト付きボイスを投稿できる「今日のにゃんこボイス」というサンプルを作ってみましたので、興味がある人は使ってみて下さい。


f:id:kyoro353:20101221133345p:image


今日のにゃんこボイス



ということで、具体的にどうプログラムすればいいかを解説してみようと思います。
あなたも早速ボイスのAPIを用いて、写真付きボイスを投稿してみましょう!


ソースコードはGitHubに上げておきました。

ちなみにコンシューマキーとコンシューマシークレットは失効させてますので、ご自分で書き変えてご利用ください。ConsumerKeyとSecretの管理は厳重に!絶対人に教えちゃダメだよ!


【GitHub】kyoro / mixi_graph_api_sample_photovoice

最近GoogleCodeからgithubに乗り換えたのだけど、便利ですねー

アプリの登録と、ConsumerKey / ConsumerSecretの発行

まずはSAPポータルでアプリを登録してConsumerKeyとSecretを発行してください。


mixiDeveloperCenter/SAPポータル

f:id:kyoro353:20101221133346p:image


初回はクレジットカードの認証などが必要です。
課金というわけではなく、信頼性の担保という意味らしいです。APIの利用は無料。
アプリの登録にはメアドの確認なども要求されるので、説明に従ってください。

f:id:kyoro353:20101221133347p:image

登録が終わるとConsumerKeyとConsumerSecretが発行されます。
また、サービス登録時に設定したリダイレクトURLはプログラムでも使用するので
サービス設定とプログラムの同一性を保ってください。

サンプルプログラムを走らせてみる

githubに上げているサンプルを走らせてみます。
まず、constantsに書かれているCONSUMER_KEYとCONSUMER_SECRET、およびREDIRECT_URIを自分のものに書き換えます。
REDIRECT_URIは存在しないものでも大丈夫です。適当なものを設定してください。


変更はこれだけでOKです。
では実行。

perl post.pl

すると

Aauthorize request in this page :
https://mixi.jp/connect_authorize.pl?client_id=07c440f6acc01d7ae8f3&response_type=code&scope=w_voice&display=pc

Please input redirest url's 'code' parameter :

こんな感じで表示されるので、表示されたURLにアクセスしてアクセスを認可してください。
その後、リダイレクトされたページのURLの末尾に付いているcode=以下の値をコピペし、Enterを押します。

done.と表示されたら、自分のボイスのページを見て見ましょう。


f:id:kyoro353:20101221133348p:image

このように簡単に画像を投稿できます。

プログラムの解説

プログラムを解説します。といっても、すごい簡単です。
今回はperlで実装しましたが、どの言語もそんなに違いはありません。
クライアントライブラリなども使いません。使うのはLWPだけです(笑)

my $auth_uri = URI->new("https://mixi.jp/connect_authorize.pl");
$auth_uri->query_form_hash(
    client_id       => CONSUMER_KEY,
    response_type   => 'code',
    scope           => 'w_voice',
    display         => 'pc',
);

print "Aauthorize request in this page :\n";
print $auth_uri->as_string();
print "\n\nPlease input redirest url's 'code' parameter :\n";

認可画面のURLを生成します。
静的なURLなので、CONSUMER_KEYを変更しないのであればaタグとかでもいいです。

my $ua = LWP::UserAgent->new;

my $token_res = $ua->post('https://secure.mixi-platform.com/2/token',{
    grant_type      => "authorization_code",
    client_id       => CONSUMER_KEY,
    client_secret   => CONSUMER_SECRET,
    code            => $code,
    redirect_uri    => REDIRECT_URI,
});

my $token_res_hash = JSON::decode_json($token_res->content);
my $access_token = $token_res_hash->{access_token};

my $post_endpoint = sprintf("http://api.mixi-platform.com/2/voice/statuses/update?oauth_token=%s",$access_token);
my $post_res = $ua->post(
    $post_endpoint,
    Content_Type => 'form-data',
    Content => {
        status => 'neko neko koneko',
        photo => [ "sample.jpg" ],
    }
);

codeを受け取ったら、アクセストークンを取得します。
レスポンスはJSONで返ってくるので、デコードして格納します。
あとはAPIの仕様通りに、Content-Typeを設定して、パラメータを付けてPOSTします。


たったこれだけでOKです!
他にも面白そうなAPIが色々あるので、ぜひ皆さん遊んでみてね!