mixiアプリカンファレンスに落選したのでやっつけでアプリ作ろうとした(途中)


悔しいからつくらないもんもん!って思ってたけど、
やっぱり面白そうなので作ってみてる途中。


・閲覧者のコミュニティとマイミクをとりあえず表示。

(function() {
  var request = opensocial.newDataRequest();
  // 閲覧者のコミュニティ一覧を取得
  request.add(mixi.newFetchCommunityRequest(opensocial.IdSpec.PersonId.VIEWER), "community_data");
  // オーナーのマイミク一覧を取得?
  request.add(request.newFetchPeopleRequest(opensocial.newIdSpec({ userId: 'VIEWER', groupId: 'FRIENDS' }), { max: 1000 }), 'my_mixi_data');
  // クエリそーしん
  request.send(function (response) {
    // コミュニティ一覧処理
    var item = response.get("community_data");
    if (item.hadError()) {
      // エラー処理。item.getError() で詳細情報を取得
      return;
    }
    var communities = item.getData();
    communities.each(function (community) {
      var name = community.getName();
      var icon = community.getField(mixi.Community.Field.THUMBNAIL_URL);
      var communityList = document.getElementById('communityList');
      var text = document.createElement('span');
      text.innerHTML = '<img src="' + icon + '" />' + name + '<br />';
      communityList.appendChild(text);
    });
    // マイミク一覧処理
    var item2 = response.get("my_mixi_data");
    if (item2.hadError()) {
      // エラー処理。items.getError() で詳細情報を取得
      return;
    }
    var myMixies = item2.getData().asArray();
    var myMixiLength = myMixies.length;
    var myMixiList = document.getElementById('myMixiList');
    for (var i=0;i<myMixiLength;i++) {
      var name = myMixies[i].getDisplayName();
      var text = document.createElement('span');
      text.innerHTML = name + '<br />';
      myMixiList.appendChild(text);
    }
  });
})();


さっきまで動いてたんだけど、急にマイミクが取得できなくなったんだけど、、、
なんでだろ。
もしかして動いてるつもりになってただけ?w

はじめてのmixiアプリ?


とりあえず面白くないものを作ってみた!
訪問者と、訪問された側のユーザーで同じコミュニティに入ってるのを抽出してみます。

近似度 = 被ってたコミュニティ / 双方のコミュニティ総数(重複はカウントしない)

にしてるんだけど、
訪問者の割る側はコミュニティ総数にしといた方が数値的に気持ち良さそう、ね。

(function() {
  var request = opensocial.newDataRequest();
  // 設置者のコミュニティ一覧を取得
  request.add(mixi.newFetchCommunityRequest(opensocial.IdSpec.PersonId.OWNER),  "CLST[0]");
  // 閲覧者のコミュニティ一覧を取得
  request.add(mixi.newFetchCommunityRequest(opensocial.IdSpec.PersonId.VIEWER), "CLST[1]");
  // クエリそーしん
  request.send(function (response) {
    var CLST = document.getElementById('CLST');
    var communityDuList = document.getElementById('communityDuList');
    var CMS = {};
    var calcList = [];
    var calcLen = 0;
    for (var i=0;i<=1;i++) {
      var items = response.get('CLST['+i+']');
      if (items.hadError())
        return;
      items.getData().each(function (com) {
        var cid = com.getId().split('/')[1];
        if (i == 0) {
          CMS[cid] = {
            id  : cid,
            name: com.getName(),
            icon: com.getField(mixi.Community.Field.THUMBNAIL_URL)
          };
        }
        if (calcList[cid] == undefined) {
          calcList[cid] = [];
          calcLen++;
        }
        calcList[cid][i] = 1;
      });
    }
    // あなたもわたしも所属してます!
    var duplicateCount = 0;
    for (var id in calcList) {
      if (calcList[id][0] && calcList[id][1]) {
        var text = document.createElement('span');
        text.innerHTML = '<a href="http://mixi.jp/view_community.pl?id=' + id + '">'+
                         '<img src="' + CMS[id]['icon'] + '" title="' + CMS[id]['name'] + '" style="width:24px;height:24px;border:0px;" /></a>&nbsp;';
        CLST.appendChild(text);
        duplicateCount++;
      }
    }
    document.getElementById('similarityScore').innerHTML = parseInt((duplicateCount / calcLen) * 100) + '% (duplicated: ' + duplicateCount + ')';
  });
})();

ソースはこんな感じ。
特に面白いこともなし。使い方を何となく覚えれたかなーといった感じ。
id:amachangが前日記で、とりあえずソース晒すといいよ!みたいな事かいてたから、載せてみた!。
もっと面白いのつくりたーい。


以下、個人的メモ。


・もう少し便利な開発環境ないかなー。
 毎回設定変更であげるのは面倒且つサーバーに迷惑かけちゃう。
 OSDE(http://code.google.com/p/opensocial-development-environment/)ってのがあるんだけど、まだ入れてない。
 Eclipseめどい


・毎回利用規約に同意しなおすのめんどいw


・AってユーザーからXっていうアプリを開くやったあとトップに戻ってまたアプリを開くってやると自ユーザーで開こうとする。
 まぁこれはURIなおせばいいのか。


mod_perlだから?古いキャッシュと衝突する場合がある。
 これは仕方ないか。
 因みに設定変更をするとキャッシュクリアされてるのかわかんないけど、新しいのになってる(確率が上がってる気がする)。


・各ユーザーがインストールしたバージョンでアプリは常に動かそうとしてる。
 本家がアップデートしても古いままっぽい?