2015년 2월 27일 금요일

Graph API

페이스북의 그래프 API를 간단하게 사용해보았다.

발단


페이스북에 이런 글이 보였다.
혹시 지인 중에 ㅇㅇ학과 졸업생이나 재학중인 사람 있는분?
일주일 정도 아르바이트 할 사람이 필요한데, 아는 사람이 없네요-
ㅇㅇ하고 ㅇㅇ하는 작업하면 될 듯-
추천할 사람 있으면 댓글이나 메세지 좀 주세용!
지인 중에 해당 학과를 전공했다는 말을 들은 사람은 없지만, 페이스북 친구 중에는 있을 지도 모르고, 페이스북에 출신학교와 전공을 기재한 사람들에 대해서는 자동화된 방법으로 조회할 수 있지 않을까하는 생각이 들었다.

그래프 API


페이스북에서는 그래프 API라는 것을 제공한다. Graph API Explorer를 사용해보면 그래프 API를 보다 쉽게 이해할 수 있다. 그 주소는 다음과 같다.


API Version


현재 그래프 API의 버전은 v2.2이다.

Access Token


그래프 API에 접근하기 위해서는 Access Token을 발급받아야 한다. Get Access Token 버튼을 클릭고, 권한 선택 팝업에서 Get Access Token 버튼을 클릭한다.



Graph API Explorer가 공개 프로필에 접근할 것임을 알리는 팝업 창이 뜨면 확인 버튼을 클릭한다. (원상 복구, 즉 삭제는 앱 설정에서 가능하다.)


이제 Graph API Explorer의 Access Token 필드에 값이 채워져 있을 것이다.

Graph API와 FQL Query 


Graph API와 FQL Query 중 Graph API가 선택되어 있을 것이다. Graph API만 사용할 수 있고, FQL Query는 사용 금지(deprecate)되었다.

GET


GET 버튼 옆에는 질의를 입력하는 란이 있고 다음과 같은 질의가 채워져있을 것이다.
/v2.2/me?fields=id,name

이 질의는 /me라는 노드에 대하여 id와 name 필드를 조회하며, Submit 버튼을 클릭해보면 다음과 유사한 결과를 얻는다.
{
  "id": "714517298603516",
  "name": "Yong Choi"
}

Locale


로케일이 English(US)로 선택되어 있다면 한국어로 변경해보자. 질의가 다음과 같이 변경되었을 것이다. 다시 submit해보자.

GET /v2.2/me?fields=id,name&locale=ko_KR

페이스북에서 한국어 이름을 설정하였다면 name 필드의 값이 한국어로 바뀐 것을 볼 수 있을 것이다.

{
  "id": "714517298603516",
  "name": "최용"
}

필드


왼쪽의 박스에는 질의에 관련된 필드들이 표시되며, Search for a field를 클릭하여 다른 필드를 추가할 수 있다.


currency를 클릭하면 질의 입력란이 다음과 같이 변경된다.
GET /v2.2/me?fields=id,name,currency&locale=ko_KR

Submit 버튼을 클릭하고 그 결과를 확인해보자.

{
  "id": "714517298603516",
  "name": "최용",
  "currency": {
    "currency_offset": 1,
    "usd_exchange": 0.000898425,
    "usd_exchange_inverse": 1113.0589642986,
    "user_currency": "KRW"
  }
}

질의 중첩


위의 결과에서 currency 중 user_currency만 보고 싶다면, 다음과 같이 질의를 수정할 수 있다.

GET /v2.2/me?fields=id,name,currency{user_currency}&locale=ko_KR

그 결과는 다음과 같다.
{
  "id": "714517298603516",
  "name": "최용",
  "currency": {
    "user_currency": "KRW"
  }
}

학력


이번에는 나의 학력 및 전공을 조회해보자. Get Access Token 버튼을 클릭하고, 권한 선택 팝업의 User Data Permissions 중 user_education_history를 선택한 다음, Get Access Token 버튼을 클릭한다.

페이스북이 Graph API Explorer 앱에 제공하는 정보에 변동이 생겼으므로 다음 그림과 같은 팝업에서 다시 한번 확인을 해주어야 한다.


이제 다음과 같이 학력에 대하여 질의해보자.

GET /v2.2/me?fields=id,name,education&locale=ko_KR

다음 그림과 비슷한 결과를 얻을 수 있을 것이다.


친구 리스트


 이제 페이스북 친구를 질의해보도록 하자. 접근 권한이 필요하므로 Get Access Token 버튼을 클릭하고, user_friends를 선택한다. 다음의 질의를 제출(submit)하면 친구들의 name과 id를 볼 수 있을 것이다. .

GET /v2.2/me?fields=friends&locale=ko_KR

친구들의 학력(education)을 조회하기 위해서는 다음과 같이 할 수 있다.

GET /v2.2/me?fields=friends{name,education}&locale=ko_KR

다른 사용자의 정보 조회


내가 아닌 다른 사람의 정보를 알고 싶으면, 앞에서 살펴본 질의의 me 대신에 해당 사용자의 ID를 넣으면 된다.

GET /v2.2/100001357580243?fields=id,name,education&locale=ko_KR


페이스북에서 사용자를 식별하는 기본적인 방법은 숫자로 된 ID이다. 해당 사용자의 프로필 페이지 주소가 다음과 같은 형식으로 나타난다면 id 값을 복사한다.

https://www.facebook.com/profile.php?id=100001357580243


사용자에 따라서는 다음과 같이 영문자와 숫자로 이루어진 프로필 주소를 갖기도 한다.

https://www.facebook.com/sk8erchoi

이때에는 다음과 같이 주소의 www를 graph로 바꾸어서 열어보면 ID를 알아낼 수 있다.

https://graph.facebook.com/sk8erchoi

{
   "id": "100001357580243",
   "first_name": "\uc6a9",
   "gender": "male",
   "last_name": "\ucd5c",
   "link": "https://www.facebook.com/sk8erchoi",
   "locale": "ko_KR",
   "name": "\ucd5c\uc6a9",
   "username": "sk8erchoi"
}

다른 사용자의 친구 리스트


그렇다면, 앞에서 나의 친구 리스트를 얻은 것과 마찬가지로, me를 다른 사용자의 ID로 바꾸어서 질의하면 해당 사용자의 친구 리스트를 얻을 수 있지 않을까하는 생각을 하게 된다.
그렇지만, 그 시도는 다음과 같은 메시지와 함께 실패하였다.

{
  "error": {
    "message": "Unsupported operation", 
    "type": "OAuthException", 
    "code": 100
  }
}

한계와 의문점


이번 시도를 통해 그래프 API에 대한 대략적인 이해를 얻었고, 다음과 같은 몇 가지의 한계 및 의문점을 확인했다.

  • 다른 사람의 친구 목록은 조회할 수 없다.
    원래의 아이디어는 내 지인이 아니라, 구인한다고 글 올린 사람을 중심으로 해서 그 지인의 지인까지 2단계를 찾아보고자 하는 것이었다. 그렇지만 Graph API Explorer를 사용해서는 다른 사람의 친구 목록을 조회할 수 없다. 권한을 요청하고 조회를 수행하는 앱을 만들어서 배포한다면 1단계까지는 가능할 것 같고, 링크드인처럼 널리 퍼진다면 다단계도 가능하겠다.
  • 어떤 사람의 학력은 나오고, 어떤 사람은 안 나오는데 그 이유를 모르겠다.
  • 페이징으로 인해서 Graph API Explorer에서는 전체 결과를 읽어볼 수가 없다. 페이지를 차례대로 넘겨보든지, 페이징을 disable시키든지 해야하는 데 방법을 모르겠다.

참고

댓글 없음:

댓글 쓰기