PHP初心者がmixi Graph API を使ってみる

PHPどころか他の言語もfizzbuzz(だっけ?)くらいしか書けないレベルの人間です。

PHPもSESSIONでページが移ってもデータが残ってる!すげー!ってレベルです。はい。
あと他の人の作ったPHPを説明通りに設置くらいは出来ます。そんなレベルです。

最近EasyBotter - プログラミングができなくても作れるTwitter botの作り方なるものを見つけて身内で遊んでる状態なんですけど、
またまた最近mixiさんが「株式会社ミクシィ
こんなものを発表してるのを見つけて、mixiの方が友達多いし…と思ってmixibotを作ってみようと思ったのが事の発端です。

目標:ボイスのタイムラインの取得。ボイスの投稿。
これをとりあえずの目標にしたいと思います。こんだけあればbotらしいこときっとできるでしょ!



開発用PCのOS
Ubuntu 10.10 64bit

動作環境
さくらのVPS
Ubuntu 10.04 LTS Server

とりあえず「mixi Graph API PHP」でgoogle先日公開された mixi の Voice API (Graph API ) をブラウザとターミナルで試してみた - isseium's blog
すばらしいブログを見つけました。ボイスのタイムラインの取得からボイスの投稿はもちろんデベロッパーの登録まで欲しかった情報が全部ってる!
タイムラインの取得とボイスの投稿はターミナル上でcurlとやらでごにょごにょするみたいだけど、やりたかったことが全部載っててもう最高です。

思いっきり参考にさせてもらいました。先日公開された mixi の Voice API (Graph API ) をブラウザとターミナルで試してみた - isseium's blog

したこと

先日公開された mixi の Voice API (Graph API ) をブラウザとターミナルで試してみた - isseium's blog
↑の0から4まで読んでデベロッパーの登録を行う。



で、出来たのがこちら。いろいろと無理やりなのは気にしないでください。

<?php
        session_start();

        # セッティング
        $consumer_key    = "";
        $consumer_secret = "";
        $redirect_url    = "";

        $authorization_url = "https://mixi.jp/connect_authorize.pl";
        $url = $authorization_url."?client_id=".$consumer_key."&response_type=code&scope=r_voice%20w_voice&display=pc";

        ini_set("default_charset", $enc);
        if (isset($_GET["code"])) {
                $_SESSION["code"] = $_GET["code"];
        } else {
                echo '<a href="'.$url.'">login</a><br />';
        }
        echo '<hr />';
        # POSTでAccessToken取得
        $host = "https://secure.mixi-platform.com/2/token";

        $data = array(
                "grant_type"    => "authorization_code",
                "client_id"     => $consumer_key,
                "client_secret" => $consumer_secret,
                "code"          => $_SESSION["code"],
                "redirect_uri"  => $redirect_url,
        );

        $data = http_build_query($data, "", "&");
        $context = array(
                "http" => array(
                        "method" => "POST",
                        "header" => implode("\r\n", array(
                                "Content-Type: application/x-www-form-urlencoded",
                                "Content-Length: ".strlen($data)
                        )),
                        "content" => $data
                )
        );
        $atdata =  file_get_contents($host, false, stream_context_create($context));

        # アクセストークンを抽出
        $my_array = json_decode($atdata,true);
        $at = $my_array["access_token"];

        # ボイスのタイムラインを取得
        $voice_api_url = "http://api.mixi-platform.com/2/voice/statuses/friends_timeline/?oauth_token=".$at;
        $voice_timeline = file_get_contents($voice_api_url);
        echo '<br />'.$voice_timeline;

        # ボイスを投稿
        $voicearray = array(
                'aaa',
                'さむい',
                'はちみつ'
        );

        $voicedata = $voicearray[rand(0,2)];
        $postdata = stream_context_create(array(
                "http" => array(
                        'method' => 'POST',
                        'header' => implode("\r\n", array(
                                'Content-Type: application/x-www-form-urlencoded',
                                'Authorization: OAuth '.$at
                        )),
                        'content' => http_build_query(array(
                                'status' => $voicedata
                        )),
                )
        ));
        $host2 = "http://api.mixi-platform.com/2/voice/statuses/update";
        $res = file_get_contents($host2, false, $postdata);
        echo '<br /><br />'.$res;