BLOG main image
분류 전체보기 (239)
Rails (65)
Ruby (34)
이야기 (40)
스토리큐 (61)
그 밖에.. (30)
C# (6)
드리밍 인 코드
The note of Legendre
작은아이의 생각
agiletalk's me2DAY
[rails] Growl4Rails
美소년 ㅇㅅㅇ씨의 一日
마사키군의 생각
ayukawa's me2DAY
작은아이의 생각
agiletalk's me2DAY
63,417 Visitors up to today!
Today 22 hit, Yesterday 22 hit

 SUBSCRIBE

2009/04/03 23:45

이번 글에서는 친구 목록을 가져오는 방법에 대해서 소개한다.

친구 목록 가져오기

친구목록을 가져오는 코드는 다음과 같다.

  1. var os = opensocial.Container.get();
  2. var req = os.newDataRequest();
  3. var params = {};
  4. params[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER;
  5. params[opensocial.IdSpec.Field.NETWORK_DISTANCE] = 1;
  6. var idspec = opensocial.newIdSpec(params);
  7. var opt_params = {};
  8. opt_params[opensocial.DataRequest.PeopleRequestFields.FIRST] = 20;
  9. opt_params[opensocial.DataRequest.PeopleRequestFields.MAX] = 100;
  10. opt_params[opensocial.DataRequest.PeopleRequestFields.SORT_ORDER] = opensocial.DataRequest.SortOrder.NAME;
  11. req.add(req.newFetchPeopleRequest(idspec, opt_params), "friends");
  12. req.send(function(respnse) {
  13.   if (respnse.hadError()) {
  14.     canvas.message.error("Error in getting friends");
  15.   } else {
  16.     var friends = respnse.get("friends").getData();
  17.     onSuccess(friends);
  18.   }
  19. });

이 중 핵심인 함수는 newFetchPeopleRequest()이다. 이 함수의 프로토타입은 다음과 같다.

  1. Object newFetchPeopleRequest(idSpec, opt_params)

첫 번째 파라미터는 idspec이다. idspec을 만들 때 NETWORK_DISTANCE 를 1로 지정해 주어서 USER_ID의 친구를 가져오도록 한다.
두 번째 파라미터 opt_params는 opensocial.DataRequest.PeopleRequestFields 이다. 이 파라미터로 가져올 친구 목록의 조건을 지정해 줄 수 있다. 파라미터에 대해 간단히 살펴보면,

FIRST : 가져올 친구들 중 첫 번째 친구의 index이다. 페이지네이션을 할 때 사용된다.

MAX : 가져올 친구들의 수이다. 100까지만 의미를 갖는다. 즉 한 번에 가져올 수 있는 친구는 100명이다.

SORT_ORDER : 어떤 순으로 가져올 것인지를 정한다. NAME 과 TOP_FRIENDS가 있다. TOP_FRIENDS는 사용자가 친구 목록에 대해 정한 우선순위이다.

FILTER : 친구들을 가져올 때 사용할 필터다. HAS_APP로 하면 이 애플리케이션을 설치한 사용자만 가져온다. 현재 MySpace에서는 응답이 좀 어의없이 온다. 버그인 듯 싶다.

PROFILE_DETAILS : 친구들을 가져올 때 친구의 어떤 항목을 가져올 지를 정한다. opensocial.Person.Field 필드의 값을 배열로 정해 주면 된다. 현재 MySpace에서는 이 파라미터를 사용할 수 없다. 사용하면 아무 일어나지 않는다.(ㅡ_ㅡ)

친구 목록을 가져올 때 궁금한 것 중 하나가 '어떤 친구가 이 애플리케이션을 설치하고 있는가?' 이다. 애플리케이션을 설치하지 않은 친구에게는 초대 메시지를 보내도록 유도하고 싶기 때문이다. opensocial 규격에는 opensocial.Person.Field.HAS_APP 를 이용해 이 정보를 줄 수 있도록 하고 있다. 그러나 안타깝게도, newFetchPeopleRequest로 가져오는 친구정보 중에는 HAS_APP가 없다.(MySpace의 버그같다.) 더구나 PROFILE_DETAILS을 사용할 수도 없다. FILTER를 사용하는 방법이 있는데, 응답이 좀 이상하다.(친구의 프로파일 URL이었던가..?) 난감하다.

친구 선택기

facebook에서는 개발자들을 위해 친구 선택기를 제공한다. 페이스북 애플리케이션을 개발할 때 편리하게 이용할 수 있다. MySpace에서는 쓸만한 친구 선택기가 없다.(못찾은 것일수도..) 그래서 간단하게 하나 만들어 봤다.

기능은 아주 단순한다.

  • 친구 목록을 보여주고, 앞 뒤로 이동할 수 있다.
  • 친구를 한명 선택할 수 있다.
  • 이름으로 검색할 수 있다.

jQuery를 사용하고 있으며, opensocial API 0.8을 이용하고 있다. 다운로드

모듈화가 완전치 않고, 테스트가 충분하지 않아서 어디서나 잘 동작할는지 모르겠다. 하고자 하는 것은 애플리케이션이 시작되면서 모든 친구 목록을 가져온 후 그 목록에서 친구 선택을 하는 것이다.

다음과 같은 식으로 사용을 한다. per_page는 한 페이지에 보여질 친구들의 수이고, onSelect는 친구가 선택되었을 때 수행될 함수이다.

  1. <div id='friend_picker' />
  2. friend_picker.show("friend_picker", {
  3.       per_page: 30,
  4.       onSelect: function(friend) {
  5.         // do something
  6.       }
  7.     });

스크린샷 한장.