Im Moment machen Sie zwei separate Anrufe in der Facebook-Datenbank, die alles verlangsamt. Facebook bietet seine Multiquery an, damit Sie alles mit möglichst wenigen DB-Anrufen erledigen können. So sind die Anrufe, die Sie denken sollten, verwenden, sind:
"query1":"SELECT page_id, name, fan_count FROM page WHERE page_id IN ($pagesIds)"
Und weil sie ermöglicht es Ihnen, eine vorherige Abfrage zu verweisen, können Sie schließen es gerade nach einem #:
"query2":"SELECT message FROM stream WHERE source_id IN (SELECT page_id FROM #pages) LIMIT 2"
Die PHP Sie verwenden müssen so etwas wie dieses:
$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);
wenn die zweite Abfrage wird durch nicht gehen, versuchen sie die FB DB testet mit gerade diese Abfrage und sehen, ob es funktioniert. Wenn die Abfrage nichts selbst zurückgibt, besteht das Problem möglicherweise in den Berechtigungen (d. H. Zugriff auf eine sensible Tabelle - aber ich denke nicht, dass dies der Fall ist). Ein weiteres Problem, das ich häufig erlebt habe ist, wie FQL sich mit Leerzeichen Reisen, also versuchen, alle möglichen Leerzeichen aus Ihrem Array Weglassen:
$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, das ist lesbar ... Dieses von Facebook's documentation auf FQL genommen wurde, Sie müssen es jedoch möglicherweise an Ihre Webanwendung anpassen, wenn Sie eine Drittanbieterbibliothek verwenden. Alle Ihre Daten werden in $fql_url
gespeichert. Alles, was Sie tun müssen, ist Schleife durch es und Echo die Informationen, die Sie wollen. Wenn Sie eine Zusammenfassung von allem sehen wollen, denken Sie daran, print_r()
oder var_dump()
zu verwenden, nur um sich zu orientieren.
EDIT
Der Grund, dass Sie ein leeres Array für die zweite Abfrage sind empfangen ist, weil Sie für die stream
Tabelle keine Berechtigung zu haben scheinen.Wenn Sie Facebook überprüfen documentation, erwähnen sie die Kriterien erforderlich, um diese Tabelle zuzugreifen:
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
Um zu überprüfen, welche Berechtigungen Sie haben, können Sie diese Abfrage ausführen:
$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>";
}
}
Statt Speicherung '$ fancounts' und '$ messages' als Arrays, was passiert, wenn man nur die Daten ausgibt? Wird es nicht angezeigt? – hohner
@Jamie Ja, es werden zuerst ALLE Namen, Fans, IDs angezeigt und es werden weiterhin ALLE Nachrichten angezeigt. Ich hatte es schon einmal so. – EnexoOnoma
Auch können Sie [facebook Batch-Anfrage] (http://developers.facebook.com/docs/reference/api/batch/) –