-
Notifications
You must be signed in to change notification settings - Fork 0
#Facebook 여러 대학교의 페이스북 대나무숲페이지에서 텍스트 데이터를 받아옵니다. 밑에서 우리가 페이스북 graph api를 어떻게 이용했는지 설명합니다.
우리에게 필요한 정보를 나열하면 다음과 같습니다.
- 페이지에 올라온 포스트
- 해당 포스트를 좋아요 한 사람
- 해당 포스트에 코멘트를 남긴 사람
- 페이지를 좋아요 한 사람
##Graph API 기본 엑세스토큰을 가지고 HTTP GET POST요청을 이용할 수 있습니다.
요청할때 필요한 요소들은 node, field, edge 가 있습니다. 그리고 엑세스 토큰등의 parameter들이 있습니다. 요소들의 이름을 보면 API이름이 graph인 이유를 알 수 있습니다.
- node : 유저나 페이지, 사진 등 하나의 객체입니다.
- edge : 노드와 노드간의 관계입니다. 예를 들면 페이지의 사진, 사진의 코멘트등 입니다.
- field : 어떤 객체의 정보에 관한 것입니다. 어떤 유저의 생일이나 해당 포스트의 좋아요 갯수등이 있습니다.
따라서 페이지의 사진(edge)을 요청하면 사진들의 id들, 즉 node의 id들이 리턴되고, 그 id로 해당 node에 접근해서 여러 field에 접근할 수 있는 것입니다.
#####예제
아래의 url에 뒤에 요청하려는 요소와 파라미터로 acesstoken을 함께 보내면 됩니다.
https://graph.facebook.com/{node-id}/{edge-name}?fields={field},{field}
예를 들어 내 포스트에 접근하고 싶다면 다음과 같이 요청을 보내면 됩니다.
https://graph.facebook.com/me?access_token={미리 받은 엑세스 토큰}&fields=posts.limit(5)
이런식으로 멀티레벨 필드 접근도 가능합니다.
../me?fields=albums.limit(5){name, photos.limit(2)},posts.limit(5)
위 요청은 앨범과 포스트를 요청하는데, 각 앨범의 이름과 사진 2장을 같이 요청합니다.
##페이지에 올라온 포스트 페이지에 올라온 포스트를 받아오기 위해서는 먼저 다음 요청을 합니다. (posts는 해당 페이지가 직접 게시한 포스트만 리턴합니다.)
https://graph.facebook.com/{대나무숲 페이지 id}/posts
위의 예에서는 대나무숲 페이지가 node고 posts가 edge입니다. 응답은 JSON형태로 돌아오는데, 가장 상위에 data,paging가 있습니다. data아래에는 post들에 대한 정보가 있고, paging은 포스트가 많아 다음 포스트를 더 받아와야 하는 경우를 위함입니다. paging아래에는 다시 previous와 next가 있습니다. 구조로 보자면 다음과 같습니다. previous와 next는 URL이기 때문에 따로 수정할 필요 없이 해당 URL 그대로 HTTP GET 요청을 보내면 똑같은 형태의 JSON이 응답으로 돌아옵니다.
+--data | +--post | | +--message | | +--created_time | | +--id | +--post | +--post +--paging | +--previous | +--next
우리는 여기서 paging을 통해 모든 포스트에 접근하여 각 포스트의 id와 message를 저장합니다. id는 뒤에 post node에 접근할때 쓰입니다. 실제 코드 ##해당 포스트를 좋아요 한 사람 위에서 알아낸 post-id를 이용하면 쉽게 구할 수 있습니다.
https://graph.facebook.com/{post-id}/likes
위와 같이 요청을 하면
+--data | +--id | +--id | +--id +--paging | +--previous | +--next
위와 같은 응답이 돌아옵니다. 여기서 id는 해당 포스트를 좋아요 한 사람들의 id입니다.
https://graph.facebook.com/{post-id}/likes?summary=true
위와같이 summary=true flag를 같이 보내면 summary가 같이 리턴됩니다. summary안에 total_count필드가 있는데 이는 해당 포스트가 받은 좋아요의 갯수입니다.
+--data | +--id | +--id | +--id +--paging | +--previous | +--next +--summary | +--total_count | +--can_like | +--has_liked
##해당 포스트에 코멘트를 남긴 사람
https://graph.facebook.com/{post-id}/comments?summary=true
+--data | +--array | +--from | | +--name | | +--id | +--message | +--created_time | +--id | | +--from | +--message | +--created_time | +--id | +--paging | +--previous | +--next +--summary | +--order | +--total_count | +--can_comment
##페이지를 좋아요 한 사람
아래와 같이 요청하면 되지만 유저의 허락을 받지 않으면 알 수 없는 정보인듯합니다. 그래서 우리는 사용할 수 없습니다.
https://graph.facebook.com/{user-id}/likes/{page-id}
에러가 리턴되고 다음과 같은 메세지가 실려옵니다.
{
"error": {
"message": "Unsupported get request. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api",
"type": "GraphMethodException",
"code": 100,
"fbtrace_id": "EIrDBl1vKHr"
}
}