外部と連携しよう
mixiアプリではJavaScriptで動くため、外部ドメイン制約を超えたデータを取得するのに便利なgadgets.io.makeRequestというAPIが用意されています。makeRequestは、普通のAjax通信とは異なり、どんなドメインのデータも取得出来、メソッドもGET/POST/PUT/DELETEすべてをサポートしており、レスポンスもTEXT/DOM(HTML)/FEED/JSONと幅広く解釈出来るため非常に強力です。署名も付与出来るため、本当にmixiのコンテナを経由したことを証明出来、ユーザーIDの改ざんを防ぐことが出来ます。
makeRequestを使ってはてなブックマークのhotentryのRSSを取得するコードは以下のとおりです。
01 | <!--//--><![CDATA[// ><!-- |
04 | params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.FEED; |
05 | params[gadgets.io.RequestParameters.NUM_ENTRIES] = 10; |
10 | var err = response.errors[0]; |
14 | for (var key in response.data.Entry) { |
15 | var entry = response.data.Entry[key]; |
16 | var title = entry.Title; |
17 | var link = entry.Link; |
ここで重要なのはgadgets.io.makeRequest関数です。外部のコンテンツを取得するには、urlと取得する時の設定を用意しておいてmakeRequest関数を呼び出すだけです。
gadgets.io.makeRequest(url, callback, opt_params)
第1引数にはurlを文字列で指定します。第2引数にはコールバック関数を指定します。コールバック関数の引数にはmakeRequestの結果が入っています。第3引数にはgadgets.io.RequestParametersをキーに持つObject(hash)を指定します。ここではCONTENT_TYPEにFEEDを、NUM_ENTRIESに10を指定しています。
署名の検証は今回は解説しません。詳しくは以下のページを参考にしてください。
詳細情報:mixi Developer Center「外部サーバを呼び出してみよう」
mixiの独自APIを使ってみよう
コミュニティは、ユーザーの所属や属性、そして関心のある分野など様々な情報を含みます。このコミュニティという機能はOpenSocialでは定義されていませんが、mixi独自のAPIとして提供されています。mixi独自APIは他にもありますが、今回はコミュニティの情報を取得してみましょう。viewerの所属しているコミュニティの一覧を取得するコードは以下のとおりです。
01 | <!--//--><![CDATA[// ><!-- |
03 | var req = opensocial.newDataRequest(); |
04 | req.add(mixi.newFetchCommunityRequest(opensocial.IdSpec.PersonId.VIEWER), |
06 | req.send(function(data) { |
07 | var communities = data.get("communities").getData(); |
09 | communities.each(function(community) { |
10 | var id = community.getId(); |
11 | var name = community.getName(); |
12 | var thumbnail = community.getField(mixi.Community.Field.THUMBNAIL_URL); |
コミュニティを取得するにはmixi.newFetchCommunityRequestを使います。今までと違って、opensocialというnamespaceではなく、mixiのnamespaceであることに注意してください。これをnewFetchPersonRequestと同じようにDataRequestにaddして取得します。
Object newFetchCommunityRequest(id, opt_params)
第1引数には取得する対象を、第2引数は省略します。
詳細情報:mixi Developer Center「コミュニティ情報を取得しよう」