2013-02-17 13 views
13

Voglio prendere tutti i post dal gruppo di facebook con riferimento al suo ID. Ho provato questo:Come ottenere tutti i post di un gruppo tramite facebook graph api

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

che mi dà solo determinati messaggi. Voglio che tutti i messaggi vengano recuperati da un singolo URL, se possibile, se non dall'URL di impaginazione. Ma l'URL di impaginazione contiene il token di paging come

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

Che cos'è il token di paging e fino a ??

Per favore, dirigimi sulla strada giusta. Grazie.

risposta

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

Dove $arr è un array di tutti i link di paginazione disponibili per cui ho usato un foreach per scorrere tutti i contenuti della paginazione.
Posso fornire ulteriori spiegazioni nel caso sia necessario.

+0

hai bisogno di usare OAuth per ottenere il token di accesso/ – weaveoftheride

+2

ogni possibilità di pubblicare il codice sopra in Python? sarebbe grandioso! – avi

9

Prova questa in PHP:

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

Vi darà una pagina con un limite di 1000 messaggi. Convertire la risposta JSON ad un array associativo PHP:

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

ottenere la pagina successiva tramite:

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

Prova questa in un ciclo, fino $array['data'] viene fuori come vuoto nella risposta.


Fino a quando - Questo è un tempo intero UNIX utilizzato per specificare il punto nel tempo fino a che i messaggi devono essere scaricati (solo i post inviati dopo che appariranno).

+0

Hi Nitesh thx per un'altra soluzione facile ... Comunque ive capito un altro modo .. –

+0

@Nilesh: Penso che si voleva scrivere ** 'json_decode' ** invece di' json_encode'. :) – Sk8erPeter

+0

@ Sk8erPeter: Il mio male. Grazie anche per le modifiche. :) – 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); 
Problemi correlati