22 05 2015
Python으로 월별 페이스북 글 작성 개수 가져오기
심심해서 한번 끄적거려봄.
페이스북에 작성한 글 개수를 월별로 한번 뽑아내보고 싶어서 대충 간단한 함수를 하나 짜 봤다.
마침 Facepy라는 라이브러리가 Facebook의 Graph API의 URL만 넘겨주면 리턴값을 Dict로 넘겨주길래 간단하게 만들 수 있었다.
사실 Facebook SDK for Python이라는 라이브러리를 먼저 살펴봤는데, Python 3.4에서 설치가 안되서 때려치운건 함정
여하튼 Facepy를 사용하는 함수이기 때문에 먼저 Facepy를 설치해야 한다.
1 |
pip install facepy |
Facepy를 설치했다면, 적당히 폴더를 하나 만들고 아래 내용을 파일로 만들어 저장한다. 참고로 이 함수는 파이썬 3.4로 작성했으며, 상단에 인코딩을 UTF-8로 지정했기 때문에 반드시 UTF-8로 저장해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
#-*- coding: utf-8 -*- import logging import datetime from urllib.parse import urlparse from facepy import GraphAPI # 로깅 모듈 설정 logging.basicConfig( filename = ("%s.log" % (datetime.datetime.now().strftime("%Y%m%d%H%M%S%f"))), filemode = "a", format = "%(levelname)-10s %(asctime)s %(message)s", level = logging.DEBUG ) """ function name: getFbStat arguments: oAuth_Access_Token String require Stat_filename String option (default: "stat.csv") return value: 없음 description: 페이스북의 액세스 토큰 oAuth_Access_Token을 받아, 해당 사용자의 월별 포스팅 수를 Stat_filename 파일로 출력한다. 만약 Stat_filename이 입력되지 않으면 파일명은 "stat.csv"로 기본 지정된다. 출력형식은 작성년월\t작성개수 이며, 각 년월은 줄바꿈 문자로 구분된다. """ def getFbStats(oAuth_Access_Token, Stat_filename = "stat.csv"): # 로깅 객체 생성 log = logging.getLogger("getFaceStats") log.debug("Facebook API Initialing... : Access token is %s", oAuth_Access_Token) # GraphAPI 객체 초기화 graph = GraphAPI(oAuth_Access_Token) log.debug("Facebook API Initailize") # Facebook Graph API URL의 형태 api_url_pattern = "/me/posts?fields=created_time,message&limit=%s&until=%s" # 초기 변수 설정 post_size = 0 # 읽어들인 포스팅의 개수. 초기값은 0 limit = "20" until = "" loops = 0 # 반복 횟수 # 글 작성 현황 stats = {} while 1: loops += 1 # Graph API URL 작성 api_url = (api_url_pattern % (limit, until)) # 포스팅 읽어들이기 posts = graph.get(api_url) # 포스팅 갯수 가져오기 post_size = len(posts["data"]) # 조건 판단을 위해서 until값 저장 before_until = until log_message = ("{%d} Loop; until {%s}; post_size {%d}; API URL {%s}" % (loops, until, post_size, api_url)) log.debug(log_message) print(log_message) for post in posts["data"]: create_date = post["created_time"] create_YYYYMM = create_date[0:4] + create_date[5:7] if (create_YYYYMM in stats): stats[create_YYYYMM] += 1 else: stats[create_YYYYMM] = 0 # 다음 페이지 URL에서 until 값과 limit 값 추출하기 next_url = urlparse( posts["paging"]["next"] ) querys = next_url.query.split("&") for query in querys: (query_key, query_value) = query.split("=") query_key = query_key.lower() if (query_key == "until"): until = query_value elif (query_key == "limit"): limit = query_value # 이번에 전달한 until 값과 다음에 전달할 until 값이 같다면 반복 종료 if (until == before_until): break # 결과 출력 Stat_file = open(Stat_filename, "w") for key in stats.keys(): Stat_file.write( "%s\t%s\n" % (key, stats[key]) ) Stat_file.close() |
심심풀이?로 Pastebin에도 써놨는데, 그쪽으로 볼 사람은 이쪽 참고.
여하튼 적당히 저장했으면, 파이썬을 실행한 후 위 모듈을 읽어들인다. 모듈을 읽어들이는 방법은, 해당 파일이 있는 디렉토리에서 파이썬을 실행시킨 후 파일의 확장자인 .py를 제외한 이름으로 import 한다.
- 예: 파일 이름이 fb_stats.py인 경우
- 파이썬 실행 후 import fb_stats
여기까지 진행했으면, Facebook에 접근할 수 있도록 Access Token을 발급받아야 한다. 본래는 앱 개발자로 등록해서 정식으로 Access Token을 발급받아야 할 것 같지만, 이건 어차피 일회용 프로그램? 이니까, 그냥 임시로 받아서 쓴다.
일단 Graph API Explorer에 접속한다.
Graph API Explorer에 접속하면 상단에 Acess Token이라는 입력칸이 있고, 우측 끝 혹은 그 아래쪽에 Get Token이라는 버튼이 있다. Get Token > Get Access Token을 클릭한다.
권한 선택 화면이 나오면 user_posts 권한을 선택하고, 하단의 Get Access Token을 클릭한다.
그러면 선택한 권한을 수락하느냐는 창이 뜨는데, 여기서 확인 버튼을 클릭한다.
그러면 Graph API Explorer 화면으로 돌아오게 되는데, 아까의 상단의 Acess Token 입력칸에 Token이 입력되었을 것이다. 이것을 전체 복사한다.
복사했으면 다시 파이썬으로 되돌아가서, 아래와 같이 함수를 실행한다. 여기서 fb_stats는 맨 처음에 import에서 입력하는 모듈의 이름이자, 파일명이기도 하다. <access_token>에는 위에서 복사한 Access Token을 붙여넣는다.
1 |
fb_stats.getFbStats("<access_token>", "파일명") |
그러면 뭐가 죽 올라간(…) 다음에, 해당 폴더 내에 지정된 파일명으로 매월 작성한 포스팅 수가 저장된다. 파일 형태는 한줄에 탭으로 구분된 두개의 필드가 들어있으며, 첫번째 필드는 작성년월, 두번쨰 필드는 포스팅 갯수이다.
ps1. 이거 처음 만들때부터 logging을 붙였는데, 100줄도 채 안되는 함수 하나 가지고 logging은 괜히 붙였나 싶기도 하고…
ps2. 참고로 이 함수의 실행 결과로 나오는 포스팅 개수는 정확하지 않을 수도 있다. Graph API의 /post가 정말로 내가 작성한 글만 리턴해주는지, 아니면 내 타임라인에 다른 사람이 작성한 글과, 내가 태깅된 글까지도 모두 포함하는지는 확인해보지 않았기 때문이다.
숨겨진 SSID(Hidden SSID)로의 접속이 잘 안될때 Laz 블루투스 리모콘