This is an old revision of the document!


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

 

매일 페이스북에 포스팅을 하고 있기 때문에, 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. Wiki syntax is allowed:
I X N C C
 
  • blog/facebook_api_get_posting_4_php.1582956996.txt.gz
  • Last modified: 2025/07/07 14:12
  • (external edit)