ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 페이스북 최근 게시물 중 좋아요 순으로 추출하기(api 이용)
    컴터/php 2014. 8. 26. 10:43


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

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


    # 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);


    댓글 2

    • 류호형 2015.06.09 14:57

      안녕하세요. 저는 수학과에서 통계를 배우고 있는 학생인데요. 이걸 이용해서 제가 원하는 게시글의 좋아요 갯수를 단위시간마다 저장하는 것도 가능한가요?? 제가 api를 잘 모르지만 가능하다면 힌트를 좀 얻고 싶습니다. ㅜㅜ

      • 우렁씨 2015.06.18 18:16 신고

        간단하게 아래 처럼하면 share 갯수는 나옵니다.
        https://graph.facebook.com/http%3A%2F%2Fwww.idomin.com%2F%3Fmod%3Dnews%26act%3DarticleView%26idxno%3D453921
        (https://graph.facebook.com/링크)

Designed by Tistory.