Я использую FQL через Facebook JavaScript SDK для запроса количества лайков и общего количества для ряда URL-адресов (всего 67).URL-адреса почти идентичны, за исключением идентификатора фрагмента (он же хеш-строки), который их различает.
Вот пример вызова API:
var queries = {
"101": "SELECT share_count, like_count FROM link_stat WHERE url = \"http://www.example.com/foo/bar/#101\"",
"102": "SELECT share_count, like_count FROM link_stat WHERE url = \"http://www.example.com/foo/bar/#102\"",
"103": "SELECT share_count, like_count FROM link_stat WHERE url = \"http://www.example.com/foo/bar/#103\"",
"104": "SELECT share_count, like_count FROM link_stat WHERE url = \"http://www.example.com/foo/bar/#104\""
};
FB.api('/fql', {
q: queries
}, function(result) {
console.log(result.data);
});
Это работает в современных браузерах, нотерпит неудачу в нескольких более старых, а именно IE / 8 и FF / 3.6.В этих браузерах я получаю ошибку JavaScript из библиотеки Facebook JS SDK:
Ваш браузер не поддерживает длинные запросы на подключение.Вы можете решить эту проблему, обновив свой браузер или установив последнюю версию Flash
Я подозреваю, что эта ошибка связана с методом SDK Facebook для выполнения больших POST-запросов между доменами, что объясняетпочему старые браузеры не могут справиться с этим.
Я могу заставить это работать, избегая ошибки, если я строго ограничу количество запросов FQL, которые я выполняю одновременно - то есть, с 67 до примерно8. Однако это не приемлемо, учитывая требования моего проекта.Я мог бы, вероятно, разделить один большой запрос API на 8-9 меньших запросов, но это не идеальное решение.
Есть ли лучший способ получить нужные мне данные, избегая при этом описанной выше ошибки JS?У меня есть пара идей, но я не знаю, как они жизнеспособны или как к ним подойти:
- Предоставьте URL-адрес динамически;то есть каким-то образом сделать один запрос FQL, используя базовый URL (все, кроме идентификатора фрагмента) и функцию, регулярное выражение или другое представление возможных значений идентификатора фрагмента в разных версиях URL.Или я мог бы также использовать данные из всех известных в Facebook URL-адресов, которые содержат мой базовый URL-адрес в качестве подстроки;теоретически это должно вернуть полный набор 67, который мне небезразличен.
- Используйте другой метод для доступа к этим данным.Facebook поддерживает пакетных запросов и упоминает, что их целесообразно использовать для запроса больших объемов данных.Тем не менее, они, кажется, требуют токен аутентификации во всех случаях, которых у меня не будет (это требование для моего проекта не требовать аутентификации, и я в любом случае пытаюсь получить доступ к общедоступным данным), и я не могу найтиЯвный пример использования их в JavaScript, поэтому я не могу определить, как форматировать мой код.
Пожалуйста, дайте мне знать, если у вас есть предложения или предложения.Пример кода также был бы очень полезен, так как мне было трудно ловить документацию Facebook, и большинство примеров кода для других языков, кроме JavaScript.
Спасибо!