Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #-*- 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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement