2013-02-17 8 views
13

Я хочу захватить все сообщения из группы facebook со ссылкой на его идентификатор. Я пробовал:Как получить все сообщения группы через facebook graph api

https://graph.facebook.com/".$group_id."/feed?time_format=U&".$authToken 

который только дает мне определенные посты. Я хочу, чтобы все сообщения были получены одним URL-адресом, если это возможно, если не по URL-адресу страницы. Но URL-адрес страницы содержит токен подкачки, как

https://graph.facebook.com/55259308085/feed?limit=500&access_token=ACCESS_TOKEN&until=1298025645&__paging_token=55259308085_10150259582898086 

Что такое пейджинговый токен и до?

Пожалуйста, направьте меня на правильный путь. Спасибо.

ответ

15
set_time_limit(99999999); 
ini_set('memory_limit', "9999M"); 

function fetchUrl($url) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 40); 

    $data = curl_exec($ch); 
    curl_close($ch); 

    return $data; 
} 

$url_array = array(); 

function recurse_it($url, $c) { 
    global $url_array; 
    $feeds   = fetchUrl($url); 
    $feed_data_obj = json_decode($feeds, true); 
    if (!empty($feed_data_obj['data'])) { 
     $next_url  = $feed_data_obj['paging']['next']; 
     $url_array[$c] = $next_url; 
     recurse_it($next_url, $c + 1); 
    } 
    return $url_array; 
} 

$url = "https://graph.facebook.com/55259308085/groups?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 
$arr = recurse_it($url, 0); 
print_r($arr); 

Где $arr представляет собой массив из всех доступных постраничных ссылок, для которых я использовал Еогеасп к петле через все содержимое пагинации.
Я могу предоставить больше объяснений, если это необходимо.

+0

вам нужно использовать OAuth, чтобы получить токен доступа/ – weaveoftheride

+2

любой шанс опубликовать вышеуказанный код в Python? это было бы прекрасно! – avi

9

Попробуйте это в PHP:

$response = file_get_contents("https://graph.facebook.com/$group_id/feed?limit=1000&access_token=$access_token"); 

Это даст вам страницу с лимитом 1000 сообщений. Преобразование ответ JSON в ассоциативный массив PHP:

$array = json_decode($response, true); 
// Do your own stuff with $array ... 

Получить следующую страницу через:

$response = file_get_contents($array['paging']['next']); 

Попробуйте это в цикле, пока $array['data'] не выходит как пустой в ответ.


До - Это не время, число UNIX используется, чтобы указать момент времени, до которого сообщения должны быть неправдоподобным (только сообщения, сделанные после этого будут появляться).

+0

Привет Nitesh ТНХ для другого простого решения ... Однако ив понял, другой способ .. –

+0

@Nilesh: Я думаю, что вы хотите набрать ** 'json_decode' ** вместо' json_encode'. :) – Sk8erPeter

+0

@ Sk8erPeter: Мой плохой. Спасибо за изменения тоже. :) – Nilesh

1
$url_array=array(); 
    $url="https://graph.facebook.com/v2.2/".$fbpageid."/feed?access_token=".$access_token."&limit=250&fields=full_picture,picture,id,message,name,caption,description,updated_time,link,icon,from,privacy,type,status_type,application,object_id,story,story_tags,actions"; 

    function recurse_it($url,$c) 
    { 
     $feeds=file_get_contents($url); 
     $feed_data_obj=json_decode($feeds,true); 
     while(!empty($feed_data_obj['data'])) 
     { 
      $next_url  = $feed_data_obj['paging']['next']; 
      $url_array[$c] = $next_url; 
      $feeds=file_get_contents($next_url); 
      $feed_data_obj=json_decode($feeds,true); 
      $c=$c+1; 
     } 
     return $url_array; 
    } 
    $final_result=recurse_it($url,0); 
Смежные вопросы