帰ってきた大規模Webサービスの裏側

第3回 はじめてのmixiページアプリ開発

この記事を読むのに必要な時間:およそ 6 分

次に,フィード情報の取得に必要なアクセストークンを取得しましょうリスト3)⁠アクセストークンは2種類あり,アクセスする情報の種類により使い分けます。先ほどのプロフィール情報のようにユーザに情報へのアクセスを認可してもらう必要がある情報※11と,アプリの身元さえ確認できればユーザの認可は不要な情報の2種類です※12)⁠フィード情報は一般に公開されている情報で後者になり,先ほどのプロフィール情報とは別のアクセストークンを取得します。

リスト3 callback.php(追記)

// フィード情報の取得に必要なアクセストークンを取得
$client_access_token = getClientAccessToken();

// 指定のmixiページに投稿されているフィードを取得
$page_feeds = getPageFeeds($client_access_token, "187793"); // ページIDを指定
// フィード情報の取得に必要なアクセストークンを取得
function getClientAccessToken() {
    $param = array(
        "grant_type" => "client_credentials",
        "client_id" => CONSUMER_KEY,
        "client_secret" => CONSUMER_SECRET
    );
    $context = array(
        "http" => array(
            "method" => "POST",
            "header" => 'Content-Type: application/x-www-form-urlencoded',
            "content" => http_build_query($param, "", "&")
        )
    );

    $json = file_get_contents(MIXI_TOKEN_ENDPOINT, false, 
        stream_context_create($context));
    $list = json_decode($json, true);

    return $list["access_token"];
}

// mixiページに投稿されているフィード情報一覧を取得
function getPageFeeds($access_token, $page_id) {
    $url = MIXI_API_ENDPOINT. "/pages/". $page_id. "/feeds";

    $context = array(
        "http" => array(
            "method"  => "GET",
            "header"  => "Content-Type: application/x-www-form-urlencoded\r\n".
                         "Authorization: OAuth ". $access_token
        )
    );

    $json = file_get_contents($url, false, stream_context_create($context));
    $list = json_decode($json, true);

    return $list["entry"];
}

<?php
foreach ($page_feeds as $feed) {
    echo "<div>";
    echo "<img src='". h($feed["user"]["thumbnailUrl"]). "' />". 
         h($feed["user"]["displayName"]). "<br />";
    echo h($feed["body"]). "<br />";
    echo h($feed["created"]);
    echo "</div>";
}
?>

アクセストークンを取得したら,mixiページに投稿されているフィードの一覧を取得してみましょう※13)⁠このフィードはmixiページの「新着」で投稿・表示している情報です。フィード取得のURIのPathInfoにページIDを指定します。ページIDは,mixiページをブラウザで表示する際のURLに含まれている「page_id=xxxxx」という値です。また,mixiページからアプリが呼び出されるときのリクエストパラメータにも含まれています※14)⁠フィード一覧を取得したら,投稿者のニックネーム・投稿者の画像・本文・投稿日時を画面に表示してみましょう。

ここまでを動作させると,図2のようになります。

図2 アプリが動作した様子

図2 アプリが動作した様子

※11)
OAuth 2.0のWeb Server Flowでアクセストークンを取得します。
※12)
OAuth 2.0のClient Credentials Flowでアクセストークンを取得します。
※13)
API仕様は,mixi Developer CenterのPage APIページをご確認ください。
※14)
リクエストパラメータの詳細は,mixi Developer Centerの技術仕様概要をご覧ください。

リクエストの検証

今回は誌面の都合で説明を省略しましたが,mixiページからアプリが呼ばれたときに(本記事の場合はindex.php)⁠そのリクエストがmixiからの正しいものかを必ず確認してください。確認の方法は,mixi Developer Centerの署名付きリクエストの検証ページを参照してください。mixiページ用の公開鍵は,mixi Developer Centerの技術仕様概要をご確認ください。

さいごに

いかがでしょうか? 今回はごくごくシンプルなサンプルアプリを作りました。本記事内のコードには,さらにセキュリティ対策やエラー処理などを組み込む必要があります。このコードをもとに作ったアプリをこちらのmixiページで公開しています。

mixiページは今話題のサービスです。たくさんのAPIをご用意していますので,ぜひみなさんの工夫でバイラルする人気アプリを作ってください。

mixiではエンジニアを募集しています。

詳細はこちら

著者プロフィール

鈴木理恵子(すずきりえこ)

(株)ミクシィ プラットフォームサービス開発部 第1開発チーム

Twitter:@asyoulike007

コメント

コメントの記入