ふたたび mixi アプリ

| コメント(0) | トラックバック(0)

http://code.google.com/intl/ja/apis/opensocial/docs/0.8/devguide.html

を参考に、感触をつかむためにサンプルコードをいくつか書いてみた。

人やプロファイルへのアクセス

ただ、マイミクの画像とニックネームををリストするサンプル

mixi_app_mymx

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs title="list_friends">
    <Require feature="opensocial-0.8"/>
  </ModulePrefs>
  <Content type="html">
     <![CDATA[
        <script type="text/javascript">
            // 閲覧者の友人コレクション取得要求
            function request() {
                var idspec = opensocial.newIdSpec(
                    { "userId" : "VIEWER", "groupId" : "FRIENDS" });
                var req = opensocial.newDataRequest();
                req.add(req.newFetchPeopleRequest(idspec), "friends");
                req.send(response);
            }
            // 閲覧者の友人コレクション取得応答
            function response(dataResponse) {
                var friends = dataResponse.get("friends").getData();
                document.getElementById("friend_list").innerHTML
                    = printFriendsList(friends);
            }
            // 閲覧者の友人リスト表示
            function printFriendsList(friends) {
                var html = "<table border='1'>";
                html += "<tr><th>Image</th><th>NickName</th></tr>";
                friends.each( function(friend) {
                    html += "<tr>";
                    html += "<td><img src='" + friend.getField("thumbnailUrl") + "'></td>";
                    html += "<td><a href='" + friend.getField("profileUrl")
                         + "' target='_blank'>" + friend.getDisplayName() + "</a></td>";
                    html += "</tr>";
                });
                html += "</table>";
                return html;
            }
            gadgets.util.registerOnLoadHandler(request);
        </script>
        <div id="friend_list"/>
     ]]>
  </Content>
</Module>

 

データ永続化

付箋みたいに、メモデータを永続化しておく。日本語がおかしいが今後の課題。

mixi_app_parsist_dat

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs title="parsistance date sample">
    <Require feature="opensocial-0.8"/>
  </ModulePrefs>
  <Content type="html">
     <![CDATA[
        <script type="text/javascript">
            var key1 = "key_memo";
            // 永続データ読み込み要求
            function loadRequest() {
                var req = opensocial.newDataRequest();
                req.add(req.newFetchPersonRequest("VIEWER"), "viewer");
                var fields = [key1];
                req.add(req.newFetchPersonAppDataRequest("VIEWER", fields),
                        "viewer_data");
                req.send(loadResponse);
            }
            // 永続データ読み込み応答
            function loadResponse(data) {
                var viewer = data.get("viewer").getData();
                var viewer_data = data.get("viewer_data");
                if (viewer_data.hadError()) {
                    document.getElementById("message").innerHTML
                        = data.getErrorMessage();
                    return;
                }
                var dataAry = viewer_data.getData()[viewer.getId()];
                var memo = (dataAry==null)?"":dataAry[key1];
                var txtMemo = document.getElementById("memo");
                txtMemo.value = gadgets.util.unescapeString(memo);
                txtMemo.disabled = false;              
            }
            // 永続データ保存要求
            function registRequest() {
                var req = opensocial.newDataRequest();
                var txtMemo = document.getElementById("memo");
                txtMemo.disabled = true;
                req.add(req.newUpdatePersonAppDataRequest("VIEWER",
                                                  key1, txtMemo.value));
                req.send(registResponse);
            }
            // 永続データ保存応答
            function registResponse(data) {
                if (data.hadError()) {
                    document.getElementById("message").innerHTML
                        = data.getErrorMessage(); 
                    return;
                }
                loadRequest();
            }
            // 永続データ削除要求
            function removeRequest() {
                var req = opensocial.newDataRequest();
                req.add(req.newFetchPersonRequest("VIEWER"), "viewer");
                var fields = [key1];
                req.add(req.newRemovePersonAppDataRequest("VIEWER", fields),
                    "viewer_data");
                req.send(loadResponse);
            }
            gadgets.util.registerOnLoadHandler(loadRequest);
        </script>
        <p style="text-weight:bold;">Memo</p>
        <textarea id="memo" rows="3" cols="20">
        </textarea>
        <div id="message"/>
        <input type="button" id="regist" value="登録" onclick="registRequest();"/>
        <input type="button" id="remove" value="削除" onclick="javascript:removeRequest();"/>
     ]]>
  </Content>
</Module>

 

アクティビティ

トップページの更新履歴にテキストを表示させ、作成したアクティビティに誘導できる。

まだぜんぜん見ていないけど、どうもセキュリティ的に制約が多そうな感じ。

mixi_app_act01

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs title="acitivity_test">
    <Require feature="opensocial-0.8"/>
  </ModulePrefs>
  <Content type="html">
    <![CDATA[
        <script type="text/javascript">
            function postActivity(activity_msg) {
                var parms = {};
                parms[opensocial.Activity.Field.TITLE] = activity_msg;
                var activity = opensocial.newActivity(parms);
                opensocial.requestCreateActivity(
                    activity, opensocial.CreateActivityPriority.HIGH,
                    activityResultCallback);
                var panel = document.getElementById("activity_panel");
                panel.innerHTML = "アクティビティを作成するテストmixiアプリ";
            }
            function activityResultCallback(status) {
                if (status.hadError()) {
                    alert("Error Creating activity.");
                }
            }

            function startActivity() {
                postActivity("アクティビティのテストです!クリックして!");
            }
            gadgets.util.registerOnLoadHandler(startActivity);
        </script>
        <div id="activity_panel"></div>
    ]]>
  </Content>
</Module>

 

こちらにまとめてます。

なんとはなし感じは分かってきた。

トラックバック(0)

トラックバックURL: http://typea.info/mt/mt-tb.cgi/136

コメントする

このブログ記事について

このページは、pirotoが2009年6月12日 01:40に書いたブログ記事です。

ひとつ前のブログ記事は「Fedore Core 6 で yum が使えなくなっちゃった」です。

次のブログ記事は「mixi アプリの続き」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.02