Facebook API 포스팅 가져오기 #1 API 사용
Intro
페이스북을 통해서 포스팅을 하게 되면, 여러 사람들이 볼 수 있고 모바일 앱을 이용해 편하게 사용할 수 있긴 하지만, 내 생각과 자료들이 페이스북 플랫폼에 남게 되고 과거 글은 찾아보기 힘들어 불편한 점이 있습니다.
그래서 주기적으로 페이스북 포스팅들을 블로그에 Archive하기 위해 API를 사용하여 블로그에 저장하는 것을 시도해 보았습니다.
해당 결과물은 Facebook Posting Archive 에서 보실 수 있습니다.
- Python 으로 데이터 정리 - why Python?
- Python 으로 데이터 업로드하기 - Image다운, FTP 및 웹제어
- PHP에서 최신 현황 받아오기 - PHP Json 처리
순으로 진행해 보도록 하겠습니다.
App 만들기
페이스북 개발자도구 사이트 에서 '그래프API 탐색기'로 들어갑니다.
Token 발급
App이 만들어졌으면, 다시 우측 상단의 도구>그래프 API 탐색기에 들어가면 다음과 같은 화면이 나타납니다.
우측에 있는 App이 방금 만든 앱인지 확인하시고, '사용자 또는 페이지' 를 클릭한 후, 페이지 액세스 토큰 받기를 선택합니다
원하는 페이지를 선택하시고, 다른 메시지는 무시하셔도 됩니다. (다른 권한에 대한 문제인데, 포스팅 가져오기는 됩니다.)
권한 추가에서 다음의 옵션 두개를 선택한 후 토큰 받기를 누르면 토큰이 생성됩니다.
user_posts, pages_show_list
필요한 필드 검색
좌측에 있는 필드 검색에서 필요한 정보를 찾아오도록 합니다.
저는 페이지에 제가 올린 포스트들을 받아오고 싶기 때문에 me/fields= 대신에 [페이지id]/posts?fields= 를 통해서 받아오도록 하겠습니다.
다음은 제가 필요한 필드들을 정리한 쿼리입니다.
[페이지id]/posts?fields=created_time,full_picture,icon,id,message,message_tags,picture,attachments.limit(10){url,media,unshimmed_url,media_type,title,description,description_tags,subattachments,type,target},actions&//**limit=100**// &pretty=0
- 페이지 id는 아까 전 쿼리를 통해 볼 수도 있고, 페이스북 페이지 정보란에도 있습니다.
- limit=n 으로 출력 개수를 조정할 수 있습니다. (최대 100개)
- 100개가 넘어가면 결과 값에서 'paging': {'next': 다음URL, 'previous': 이전URL} 으로 구분이 가능합니다.
URL 받아오기
결과 창 아래의 '</> 코드 받기'를 클릭하시면 여러가지 언어에서 쓸 수 있는 코드가 나옵니다.
저는 URL을 사용할 예정이므로 cURL 을 선택.
URL은 https://graph.facebook.com/v6.0/{쿼리}&access_token={액세스 토큰}
형식으로 이루어져 있습니다.
Token 유효기간 연장
지금 화면에서 보던 토큰은 2시간 후 만료되는 토큰입니다. 우측 하단 '액세스 토큰' 옆의 (i) 버튼을 클릭하면 아래와 같이 만료시간이 나옵니다.
비즈니스 계정 인증 등을 통해야 다른 권한을 받거나 기간이 긴 토큰이 나오는 것 같은데, Official 문서를 제출하고 계약서를 제출해야 한다는 것 같습니다.
이 토큰을 2달 정도 쓸 수 있는 토큰으로 바꾸는 방법을 알아보도록 하겠습니다.
위 화면에서 '액세스 토큰 도구에서 열기'를 누르면 액세스 토큰 디버거 창이 나옵니다. 해당 화면에서 맨 아래쪽에 있는 '액세스 토큰 확장'을 누르면, 아래와 같이 2달 정도 사용할 수 있는 토큰이 발급됩니다.
번거롭긴 하지만, 2달 정도는 쓸 수 있겠습니다.
다음
기타 권한 또는 토큰 기간을 좀 더 늘리는 것은 좀 더 실험을 해봐야 겠습니다.
우선 목적은 비정기적으로 포스팅을 업데이트 하는 것이기 때문에 이제 파이썬에서 이 데이터를 정리해 보도록 하겠습니다.
Reference
https://tonhnegod.tistory.com/99 : 이전버전의 그래프API 탐색기 사용법이 설명되어 있습니다.
Discussion