Facebook API 포스팅 가져오기 #4 PHP로 최신현황 받아오기

페이스북을 통해서 포스팅을 하게 되면, 여러 사람들이 볼 수 있고 모바일 앱을 이용해 편하게 사용할 수 있긴 하지만, 내 생각과 자료들이 페이스북 플랫폼에 남게 되고 과거 글은 찾아보기 힘들어 불편한 점이 있습니다.

그래서 주기적으로 페이스북 포스팅들을 블로그에 Archive하기 위해 API를 사용하여 블로그에 저장하는 것을 시도해 보았습니다.
해당 결과물은 Facebook Posting Archive 에서 보실 수 있습니다.

  1. Python 으로 데이터 업로드하기 - Image다운, FTP 및 웹제어

순으로 진행해 보도록 하겠습니다.

 

매일 페이스북에 포스팅을 하고 있기 때문에, wiki 페이지 내에 Archiving 된 내용은 최신 현황이 아닐 가능성이 높다.
이전편#다음 에서 밝혔듯, 윈도의 '작업스케쥴러' 등을 이용해 Near Time으로 받아올 수 있지만, 그래도 Archiving 페이지 내에서 최신 글이 몇개가 더 있다는 정보는 보여줄 필요가 있었다.

현재 이용하는 웹호스팅에서 PHP를 지원하기 때문에, PHP를 통해서 페이스북 페이지 정보를 얻어와 항상 최신 현황을 볼 수 있는 스크립트를 만들어 보았다.
PHP는 아주 예전에만 써봤기 때문에 문법 등이 익숙하지 않아 많은 검색을 통해서 작성했다.

아래 그림 부분이 결과물이다.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
	//ini_set('display_errors','true');

	$token = "[[API 액세스 토큰]]";
	$url = "https://graph.facebook.com/v6.0/100300361542753/posts?fields=created_time&limit=50&pretty=0&access_token=" . $token;

	 function get_content($URL){
		  $ch = curl_init();
		  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		  curl_setopt($ch, CURLOPT_URL, $URL);
		  $data = curl_exec($ch);
		  curl_close($ch);
		  return $data;
	}

$base_date = $_GET['date'];
	
date_default_timezone_set('UTC');	
$base_date = strtotime($base_date);

  • date라는 변수를 GET형식으로 받아서 strtotime 함수를 사용해서 날짜 객체로 변환하였다.
  • 2편에서 밝혔듯이 Facebook API에서 응답하는 날짜들은 모두 UTC 기준이다.
  • 이 날짜와 비교해서 이 날짜보다 이후에 작성된 포스팅들의 개수를 셀 것이다.

	$obj = json_decode(get_content($url));
	
	$count_list = count($obj->data);	
	for ($i=0;$i<$count_list;$i++) {
		$time = $obj->data[$i]->created_time;
		$time = strtotime($time);
		if ($i==0 ) $newest_time = $time;
		if ( $time > $base_date ){
			//echo '<br> newer : '. $i . ' : '. date("Y-m-d h:i:s A",$time);
		} else {
			break;
		}
	}

  • 앞서 만든 get_content를 통해 얻어온 응답값은 json_decode 함수를 통해서 json 형식을 사용할 수 있다.
  • 사용법은 $obj→'key값', $obj→'key값'[리스트index] 로 사용할 수 있다.
  • data 키 내에 있는 리스트 element(포스팅 하나)들을 하나씩 훑으면서 base_date(최신 Archiving) 보다 나중에 작성된 글들을 하나씩 세었다.
  • $count_list 가 Archivng된 이후에 작성된 글들의 개수이다.

	if ($i >= $count_list) {
		$str = "+";
	} else {
		$str = "";
	}
	
	$style = $_GET['style'];
	$front = $_GET['front'];
	$mid = $_GET['mid'];
	$end = $_GET['end'];
	$format = $_GET['format']; //Y-m-d h:i:s A
	
	date_default_timezone_set('Asia/Seoul');
	echo "<body style='".$style."'>". $front . date($format,$newest_time) . $mid . $i . $str . $end ."</body>";

  • Line 1-5: 속도 문제 때문에 한번에 50개만 호출하고, 그 이상 새글이 있으면 '+'를 붙여주어서 50개 이상이 있다는 것을 표시하도록 했다.
  • 아래와 같은 변수들을 GET형식으로 받아서 출력 형식을 지정하도록 했다.
    • style : 출력할 결과물의 CSS 스타일
    • front, mid, end : $front [최신글날짜] $mid [최신글 개수] $end 형식으로 출력시 설명할 수 있는 문장을 받도록 했다.
    • $format : 최신글 날짜를 어떻게 표시할 것인지 format을 설정

간단한 몇 줄의 코드로 최신 현황을 받아오는 기능을 만들었다. 이를 wiki 페이지에서 보이도록 하기 위해서 <iframe> 기능을 이용해서 해당 php 파일을 embedding 하였다.

 
<iframe src='
http://triviaz.net/[페이지이름].php?
           date="+max(output['created_time']).replace('+','%2B')+"   ''Python내에서 Archiving된 최신 글 작성시간을 전달
           &format=m/d%20H                                           ''월/일 시간 형식으로 날짜 출력
           &front=[최신:%20					   
           &mid=시까지%20
           &end=%20 포스팅이 더 있습니다]			    ''[최신: (날짜 시간)시까지 (글 개수) 포스팅이 더 있습니다]
           &style=font-size:11pt;font-color:%23333333;font-family:Helvetica,Arial,sans-serif;      ''해당 스타일로 출력
'></iframe>

첫번째 목적인 Archiving을 위한 작업은 끝났다.

추후에는

  1. 권한 문제를 해결하여 포스팅별 도달수, 공유수, 좋아요 수, 페이지 좋아요 수 등을 추출할 수 있도록 개선
  2. 해당 내용을 정리하여, 페이지 운영에 필요한 데이터 분석 및 insight 얻기

를 해보도록 해야 겠다.

참고

Enter your comment:
T Y N M C