他人のの詳細情報を取得

今まで opensocial.newIdSpec への引数として,opensocial.IdSpec.PersonId.VIEWER や opensocial.IdSpec.PersonId.OWNER が opensocial.IdSpec.Field.USER_ID に入ったハッシュを渡してましたが,ここに任意のユーザの ID を入れても情報が取れるみたいです。

  var req = opensocial.newDataRequest();
  var params = {};
  params[opensocial.IdSpec.Field.USER_ID] = 【任意のユーザ ID を入れる】;
  var idSpec = opensocial.newIdSpec(params);
  req.add(req.newFetchPersonRequest(idSpec), "friend");
  req.send(function(data) {
    (省略)
  });

でもこの newFetchPersonRequest に opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS を渡しても血液型とか誕生日とかは取れません。

普通に mixi のプロフィール ID (=連番) だからセキュリティ的に問題があるのかな?でもどうせ公開情報しか取れないから,HTML をスクレイピングしたら取れちゃう情報のような気はするんだけどなー(笑)

ということで,ユーザの情報を取ってくる部分のソースはこんな感じになりました。

var get_friend = function(friend_id) {
  var req = opensocial.newDataRequest();
  var params = {};
  params[opensocial.IdSpec.Field.USER_ID] = friend_id;
  var idSpec = opensocial.newIdSpec(params);
  req.add(req.newFetchPersonRequest(idSpec), "friend");
  req.send(function(data) {
    if (data.hadError()) {
      var msg = data.getErrorMessage();
      alert(msg);
    } else {
      var friendItem = data.get("friend");
      if (friendItem.hadError()) {
        var code = friendItem.getErrorCode();
        var msg = friendItem.getErrorMessage();
        alert(code + " : " + msg);
      } else {
        friend = friendItem.getData();
        render_profile(friend);
      }
    }
  });
}

var render_friends = function(friends) {
  var friends_ul = document.getElementById("friends");
  friends_ul.innerHTML = "";
  friends.each(function(person) {
    var li_elm = document.createElement("li");
    var img_elm = document.createElement("img");
    var span_elm = document.createElement("span");
    img_elm.src = person.getField(opensocial.Person.Field.THUMBNAIL_URL);
    img_elm.className = "thumbnail";
    span_elm.className = "nickname";
    span_elm.innerHTML = person.getField(opensocial.Person.Field.NICKNAME);
    li_elm.appendChild(img_elm);
    li_elm.appendChild(span_elm);
    li_elm.addEventListener(
      "click",
      (function(id) {
        return function(event) {get_friend(id);}
      })(person.getField(opensocial.Person.Field.ID)),
      false
    );
    friends_ul.appendChild(li_elm);
  });
}

今回は個人の情報だけ取りましたけど,newFetchPeopleRequest で USER_ID を渡していけばマイミクのマイミクのマイミクの……(以下略) ってどんどん辿っていけますね。知り合い探しに便利かもw