본문 바로가기

컴터/php

페이스북 최근 게시물 중 좋아요 순으로 추출하기(api 이용)

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


회사에서 필요할 것 같아 만들었는데 다른 방식으로 함.

혹시 누군가에게 도움될까 해서? 공개로 전환함.


# json 으로 뽑아오기 https:// GET 만 가능

$limit = 250;  # 한번에 가져올 갯수 (limit 250개)

$pageId = 'page id'; # 페북페이지 아이디 (me/accounts/ 해서 나옴) - 페이지가 아니라면 me/로 바꿈

$accessToken = 'access token';

$host = 'graph.facebook.com';

$path = '/'.$pageId.'/posts?limit='.$limit.'&access_token='.$accessToken;


$linebreak  = "\r\n";

$data =  '';

$req = '';

$req .= 'GET ' . $path . ' HTTP/1.1' . $linebreak;

$req .= 'Host: ' . $host . $linebreak;

#$req .= 'Content-Type: application/json'.$linebreak;

$req .= 'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)' . $linebreak;

$req .= 'Connection: Close' . $linebreak . $linebreak;


  // Socket Open

$fsock  = @fsockopen('ssl://'.$host, '443', $errmsg);

if ($fsock)

{

fwrite($fsock, $req);

while(!feof($fsock)) { $data .= fgets($fsock, 128); }

fclose($fsock);

}else exit($errmsg);


$data = json_decode(trim(preg_replace('/^(.*)\r\n/m','',$data)));


$dt = $data->data;

if(count($dt)<=0) return false;


# like 수로 모우기

$json = array();

$i = 0;

foreach($dt as $values){

if($i>=20) continue; # 20개만 저장


$fbPrivacy = $values->privacy->value; # EVERYONE

$fbCaption = $values->caption; # 홈페이지에서 share 한건 해당 홈페이지 host가 나옴


# 전체공개된것과 홈피에서 보낸것만

if(strcmp($fbPrivacy,'EVERYONE')<>0 || strcmp($fbCaption,'홈피주소')<>0) continue;


$fbId = $values->id;

$fbName = $values->name; # 기사 제목

$fbDescription = $values->description; # 기사 요약문

$fbImg = $values->picture;

$fbVideo = $values->source; # video

$fbLink = $values->link;

$fbCreateTime = strtotime($values->created_time); 

$fbLParse = parse_str($fbLink, $fbLout);

$fbLIdxno = $fbLout['idxno']; # 기사 idxno


# 기사 idxno가 없다면 통과

if(empty($fbLIdxno)) continue;


$fbMessage = $values->message; # 작성자 설명글

$fbAction = $values->actions[1]->link; # 좋아요 용 링크


$fbLikes = $values->likes->data; # 좋아요

$fbLcount = count($fbLikes);

$fbLArr = array();

if($fbLcount>0){

foreach($fbLikes as $fbL){

$fbLId = $fbL->id;

$fbLName = $fbL->name;

if(!empty($fbLId)) array_push($fbLArr, array('id'=>$fbLId, 'name'=>$fbLName));

}

} # end fbLikes

$fbComments = $values->comments->data; # 댓글

$fbccount = count($fbComments);

$fbcArr = array();

if($fbccount>0){

foreach($fbComments as $fbC){

$fbCId = $fbC->from->id;

$fbCName = $fbC->from->name;

if(!empty($fbCId)) array_push($fbcArr, array('id'=>$fbCId, 'name'=>$fbCName));

}

} # end fbComments



$json[$fbLcount][]=array(

'fb_id'=>$fbId,

'idxno'=>$fbLIdxno,

'title'=>$fbName,

'summary'=>$fbDescription,

'default_img'=>$fbImg,

'video'=>$fbVideo,

'own_descript'=>$fbMessage,

'like_link'=>$fbAction,

'likes'=>array('count'=>$fbLcount, 'data'=>$fbLArr),

'comments'=>array('count'=>$fbccount, 'data'=>$fbcArr),

'reg_date'=>$fbCreateTime

);


$i++;

} #end foreach


if(count($json)<=0) return false;


krsort($json); # 좋아요 많은 순으로 재정렬


# 배열 첫단계(카운트순) 없앰

$result = array();

foreach($json as $vals){

foreach($vals as $v) array_push($result, $v);

}


echo json_encode($result);