Al momento, stai facendo due chiamate separate al database di Facebook che sta rallentando tutto. Facebook offre la loro multiquery in modo che tu possa fare tutto nel minor numero possibile di chiamate DB. Così i chiamate si dovrebbe pensare di utilizzare sono:
"query1":"SELECT page_id, name, fan_count FROM page WHERE page_id IN ($pagesIds)"
E perché consentono di fare riferimento a una query precedente, appena è possibile includere dopo un #:
"query2":"SELECT message FROM stream WHERE source_id IN (SELECT page_id FROM #pages) LIMIT 2"
Il PHP è necessario utilizzare è qualcosa di simile:
$query = array(
"pages"=>"SELECT page_id, name, fan_count FROM page WHERE page_id IN ($pagesIds)",
"messages"=>"SELECT message FROM stream WHERE source_id IN (SELECT page_id FROM #pages) LIMIT 2"
);
$fql_url = $facebook->api(array(
'method' => 'fql.multiquery',
'queries' => $query
));
print_r($fql_url);
Se la seconda query non sta attraversando, provare a testare l'FB DB con proprio questa query e vedere se funziona. Se la query non restituisce nulla da sola, il problema potrebbe riguardare le autorizzazioni (ad esempio l'accesso a una tabella sensibile, ma non penso che sia così). Un altro problema che ho spesso incontrato è come FQL si viaggi con spazi, in modo da provare omettendo tutti i possibili spazi dalla matrice:
$query = array("pages"=>"SELECT page_id, name, fan_count FROM page WHERE page_id IN ($pagesIds)","messages"=>"SELECT message FROM stream WHERE source_id IN (SELECT page_id FROM #pages) LIMIT 2");
Wow, questo è leggibile ... Questa è stata presa dal Facebook's documentation su FQL, tuttavia, potrebbe essere necessario adattarlo alla propria applicazione Web se si utilizza una libreria di terze parti. Tutti i tuoi dati vengono salvati in $fql_url
. Tutto quello che devi fare è passarci sopra e far risuonare le informazioni che desideri. Se vuoi vedere un riassunto di tutto ciò che contiene, pensa di usare print_r()
o var_dump()
solo per orientarti.
EDIT
Il motivo che si sta ricevendo un array vuoto per la seconda query è perché non sembrano avere autorizzazioni per la tabella stream
.Se si seleziona Facebook di documentation, accennano i criteri necessari per accedere a questa tabella:
To read the stream table you need
read_stream
permissions for all posts that the current session user is able to view
read_insights
permissions to see post impressions for any posts made by a Page owned by the current session user
Per controllare quali autorizzazioni dispone, è possibile eseguire questa query:
$check_query = $facebook->api(array(
"method" => "fql.query",
"query" => "SELECT * FROM permissions WHERE uid=me()"
));
foreach($check_query[0] as $k => $v) {
if($v === "1") {
echo "<strong>$k</strong> permission is granted.<br>";
} else {
echo "<strong>$k</strong> permission is not granted.<br>";
}
}
Invece di memorizzare '$ fancount' e '$ messages' come array, cosa succede quando riecheggiate i dati? Non viene visualizzato? – hohner
@Jamie Sì, visualizza innanzitutto TUTTI i nomi, i fan, gli ID e continua a visualizzare TUTTI i messaggi. Ho avuto così prima. – EnexoOnoma
Inoltre puoi usare [richiesta batch facebook] (http://developers.facebook.com/docs/reference/api/batch/) –