본문 바로가기
Coding/Python

파이썬으로 제작한 페이스북 댓글 추첨 프로그램(Graph API)

by Hide­ 2017. 10. 29.
반응형

개인적으로 필요해서 댓글 추첨 프로그램을 검색해보다가 적당한 프로그램을

찾기 힘들어서 직접 구현하기로 했다.

개발 언어는 파이썬이며 페이스북에서 제공하는 Graph API를 사용했다.

원하는 글의 댓글을 모두 추출한 후 적당한 작업을 거쳐서 당첨자를 출력하는 형태로 작성했다.

Graph API Explorer로 직접 테스트 해보며 코드를 작성하였고 현재 버전은 2.10이다.

먼저 아래의 URL로 들어간다.


https://developers.facebook.com/tools/explorer



오른쪽에 있는 토큰 받기 를 누르고

사용자 액세스 토큰받기를 누른다.


필요한 권한을 선택하는 부분이다.

알아서 적당히 선택하고 액세스 토큰 받기를 누른다.

아무것도 선택하지 않고 토큰을 발급받아도 댓글을 조회하는데엔 아무런 문제가 없다.

액세스 토큰을 발급받은 후에 제출을 눌러보면 나에 대한 정보가 나온다.

API에 관한 자세한 정보는 페이스북 개발자 페이지에 자세하게 나와있으므로

간략하게 설명하고 넘어가도록 하겠다.

위처럼 URL을 작성하고 제출을 누른 후 결과를 확인하는 방법도 있지만

바로 URL로 조회하는 방법도 있다.


https://graph.facebook.com


위 URL을 통해 쉽게 접근할 수 있다.

특정 포스트의 댓글에 접근하는 URL의 형태는 아래와 같다.


https://graph.facebook.com/페이지번호_글번호/comments/?access_token=토큰&limit=가져올 댓글 갯수(미지정 시 기본 25개)


페이지 번호와 글 번호부터 알아보자.


원하는 페이지로 들어가 프로필에 마우스를 올리면 아래와 같이 URL이 뜬다.

이 중 빨간색 네모박스 부분이 페이지 번호다. 여기서는 241289886074076이다.


다음으로 댓글을 뽑아올 포스트로 이동한다.

그리고 위에 있는 15시간 처럼 언제 작성했는지 나와 있는 부분에 마우스를 올리면

아래와 같이 글 번호가 나온다.

/posts/781067592096300 뒤에 있는 7810~ 부분이 글 번호이다.

글 번호로 이동했으면 아까 알려준 형태


https://graph.facebook.com/페이지번호_글번호/comments/?access_token=토큰&limit=가져올 댓글 갯수


로 맞춰서 들어가본다.


그럼 위와 같이 json형태로 값이 넘어옴을 확인할 수 있다.

data 아래에 작성자의 이름(name)과 고유 id값, 그리고 댓글 내용(message)가 존재한다.


이제 알아낸 값들을 통해 파이썬 코드를 작성해보자.


1~4 : 필요한 라이브러리를 import

6 : 유저의 정보를 담아놓을 딕셔너리를 선언

7 : 페이지번호_글번호

8: access_token

9 : 가져올 댓글의 갯수

13~14 : requests 라이브러리를 통해 댓글에 접근

16 : json 형태이기 때문에 decoding

17 : 총 댓글의 갯수


22~23 : for문을 통해 키 부분에 사용자의 이름과 고유id를 설정하고 value 부분에 이름|댓글내용을 저장한다.

이름+고유id로 키를 잡는 이유는 딕셔너리는 중복된 키 값이 존재할 수 없기 때문에 중복 댓글을 배제하기 위함이다.

27 : random.choice를 통해 랜덤으로 당첨자를 정하고 seed에 저장한다.


31 : 위에서 저장한 seed를 통해 당첨자의 정보를 불러오고 |를 기준으로 split한다. 

0번째에는 사용자의 고유 id가 담겼을 것이고 1번째에는 댓글의 내용이 담겼을 것이다.

32 : https://www.facebook.com/app_scoped_user_id/고유id 형태로 url을 날리게 되면 해당 사용자의 프로필로 접근할 수 있다.


최종 소스는 아래에서 받을 수 있다.


https://github.com/teamhide/facebook_lottery/blob/master/facebook_lottery.py


최종 실행 결과 화면