2013-12-15 16 views
7

Ho bisogno di creare un'applicazione con tre campi di input per tre URL. L'applicazione deve quindi cercare tutti i post pubblici su Facebook e trovare gli utenti che hanno pubblicato tali URL specifici. Sto usando questo codice:Richiesta di tutti i post pubblici di Facebook

$q = "http://www.someurl.com"; 
$search = $facebook->api('/search?q=' . $q .'&type=post&limit=200'); 
foreach ($value as $fkey=>$fvalue) { 
    if(isset($fvalue['from']['name'])) 
    { 
     echo $fvalue['from']['name']."<br />"; 
    } 
    }} 

Questo stampa 200 nomi utente di Facebook che hanno pubblicato un collegamento specifico. Ma, come ho detto sopra, ho bisogno di cercare più corrispondenze URL. Utilizzando questo approccio, avrei bisogno di effettuare tre chiamate di query e quindi di referenziare i risultati e ottenere utenti che appaiono su tutti e tre gli elenchi dei risultati. C'è un modo per creare una query per restituire i risultati necessari in una sola chiamata? Ora che FQL è uno strumento potente, ma penso che non possa essere usato per questo tipo di query pubbliche. Sono davvero limitato solo alle API grafiche pubbliche? E se questo è il caso, è possibile formare una query complessa usando solo il grafico api?

EDIT # 1: Ho provato ad utilizzare seguente FQL:

SELECT source_id FROM stream WHERE 
CONTAINS('http://www.incgamers.com/2013/12/doom-20th-anniversary-today-true-classic') 
AND CONTAINS('http://kotaku.com/5917693/ten-years-of-civ-ii-lock-the-world-in-perpetual-war') 
AND CONTAINS('http://www.youtube.com/watch?v=1TBxdXm3DP0') limit 200 

quanto ho capito, questo dovrebbe restituire gli utenti che hanno questi tre collegamenti nel loro flusso fb. Tuttavia, questo non è il caso. Sto sbagliando tutto questo?

risposta

2

Un approccio più semplice sarà semplicemente verificare la presenza di un URL nella parte di messaggio del post. Questo FQL dovrebbe funzionare:

SELECT message FROM stream WHERE CONTAINS("http://www.incgamers.com/2013/12/doom-20th-anniversary-today-true-classic") 
AND strpos(message,'http://www.incgamers.com/2013/12/doom-20th-anniversary-today-true-classic') >=0 

Allo stesso modo, per la ricerca di un posto che contiene tutti e tre i collegamenti è possibile estendere ulteriormente il FQL.

SELECT message FROM stream WHERE CONTAINS("http://www.incgamers.com/2013/12/doom-20th-anniversary-today-true-classic") 
AND strpos(message,'http://www.incgamers.com/2013/12/doom-20th-anniversary-today-true-classic') >=0 
AND CONTAINS("http://kotaku.com/5917693/ten-years-of-civ-ii-lock-the-world-in-perpetual-war") 
AND strpos(message,'http://kotaku.com/5917693/ten-years-of-civ-ii-lock-the-world-in-perpetual-war') >=0 
AND CONTAINS("http://www.youtube.com/watch?v=1TBxdXm3DP0") 
AND strpos(message,'http://www.youtube.com/watch?v=1TBxdXm3DP0') >=0 
+0

grazie per la risposta. Hai testato questa query con lo strumento Explorer grafico Graph? Dovrebbe funzionare con i messaggi del mio stesso muro, ho impostato la loro privacy in pubblico. Non riesco ad ottenere alcun risultato, non importa quale combinazione di link inserisco. Penso che ci manchi qualcosa ... – Xardas

+0

Hai ragione. Il comportamento è strano! Ho provato la prima query usando Graph Explorer e sta funzionando bene. Tuttavia, non mostra risultati per più URL. –

+0

Ho anche provato 'SELECT messaggio FROM stream WHERE CONTAINS (" http://vimeo.com ") AND strpos (messaggio, 'http: //vimeo.com')> = 0 E CONTAINS (" http: // www .youtube.com ") AND strpos (messaggio, 'http: //www.youtube.com')> = 0' e ha restituito alcuni risultati. –

1

non è più possibile, in quanto Facebook disabilitato post pubblico di ricerca a metà dicembre 2013.

+0

Come direbbe Wikipedia, è necessaria la citazione. Un link al post sulla documentazione ufficiale di Facebook sarebbe davvero di aiuto "vendere il tuo punto" :) – javatarz