В данный момент вы делаете два отдельных звонка в базу данных Facebook, которая все замедляет. Facebook предлагает свои мультизапросы, чтобы вы могли делать все за минимально возможное количество вызовов БД. Итак, звонки, которые вы должны подумать об использовании:
"query1":"SELECT page_id, name, fan_count FROM page WHERE page_id IN ($pagesIds)"
И поскольку они позволяют вам ссылаться на предыдущий запрос, вы можете просто включить его после #:
"query2":"SELECT message FROM stream WHERE source_id IN (SELECT page_id FROM #pages) LIMIT 2"
PHP, который вам нужно использовать, выглядит примерно так:
$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);
Если второй запрос не выполняется, попробуйте протестировать FB DB с помощью только для этого запроса и посмотрите, работает ли он. Если запрос сам по себе ничего не возвращает, проблема может быть связана с разрешениями (т. Е. С доступом к конфиденциальной таблице - но я не думаю, что это так). Другая проблема, с которой я часто сталкивался, заключается в том, как FQL отключается с пробелами, поэтому попробуйте исключить все возможные пробелы из массива:
$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");
Ух ты, это читабельно ...
Это было взято из документации Facebook по FQL, поэтому, возможно, вам придется адаптировать ее для вашего веб-приложения, если вы используете стороннюю библиотеку. Все ваши данные сохраняются в $fql_url
. Все, что вам нужно сделать, это пройтись по нему и вывести на экран информацию, которую вы хотите. Если вы хотите увидеть сводку всего, что в нем содержится, подумайте об использовании print_r()
или var_dump()
только для того, чтобы получить ваши подшипники.
EDIT
Причина, по которой вы получаете пустой массив для второго запроса, заключается в том, что у вас, похоже, нет разрешений для таблицы stream
. Если вы проверяете документацию Facebook , они упоминают критерии, необходимые для доступа к этой таблице:
Для чтения таблицы потоков вам нужно
read_stream
разрешения для всех сообщений, которыми является текущий пользователь сеанса
возможность просмотра
read_insights
разрешения на просмотр показов для любого
сообщения, созданные страницей, принадлежащей текущему пользователю сеанса
Чтобы проверить, какие у вас есть разрешения, вы можете выполнить этот запрос:
$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>";
}
}