Пакетный запрос на Facebook с помощью jsonpath
С Facebook мне нужно знать, кто (какой пользователь) прокомментировал пост на странице в фейсбуке. Я делаю два запроса с помощью facebook-batch-запросов в моем javascript-файле: первый для всех сообщений, а второй - для каждого запроса. Приятно иметь, если я могу выбрать только сообщения, которые имеют некоторые комментарии.
FB.api('/', 'POST', {
batch: [
{
// all posts from page from last year
'method': 'GET',
'name': 'posts_page_year',
'omit_response_on_success': false,
'relative_url': fbPageID + '/posts?since=2012-01-01&until=' + timeNow + '&limit=200000'
},
{
// all post-ids from last year
'method': 'GET',
"relative_url": "/{result=posts_page_year:$.data.*.id[?(@.comments.count!=0)]}"
}
]
}, function(response) {
callback(response);
}
);
Моя проблема - второй пакетный запрос, он возвращает ошибку (#803). Я попробовал немного.
{
// all post-ids from last year
'method': 'GET',
"relative_url": "/{result=posts_page_year:$.data.0.id}"
}
возвращает объект с первым пост-запросом. Все хорошо. Но я хочу это для каждого поста, а не только для первого.
{
// all post-ids from last year
'method': 'GET',
"relative_url": "/{result=posts_page_year:$.data.*.id}"
}
возвращает ошибку (# 803) Некоторые из запрашиваемых псевдонимов не существуют, и список всех идентификаторов.
{
// all post-ids from last year
'method': 'GET',
"relative_url": "/{result=posts_page_year:$.data.*.id[?(@.comments.count!=0)]}"
}
возвращает эту ошибку: (#803) Некоторые из указанных вами псевдонимов не существуют: {result=posts_page_year:$.data.*.id[
Я перепробовал почти все, и мне нужна твоя помощь, потому что я не знаю, как решить проблему. СПАСИБО!
2 ответа
В пакетной документации Facebook говорится:
Обратите внимание, что по соображениям безопасности конструкции JSONPath фильтра и сценария не допускаются в выражении JSONPath.
Это, вероятно, означает, что вы не можете использовать такой код, как ?(@.comments.count!=0)
FB.api('/', 'POST', {
batch: [
{
// 0: all likes from user
'method': 'GET',
'relative_url': 'me/likes'
},
{
// 1: all user-posts from last month
'method': 'GET',
'relative_url': 'me/posts?since=' + timeMonthAgo + '&until=' + timeNow + '&limit=200000'
},
{
// 2: all user-posts from last year
'method': 'GET',
'relative_url': 'me/posts?since=' + timeYearAgo + '&until=' + timeNow + '&limit=200000'
}
]
}, function (response) {
callback(response);
}
);
Я должен был установить Предел, чтобы у каждого ответа теперь был предел контента. Можно установить ограничение на невозможное большое число. Вы также должны установить временной диапазон с помощью since
а также until
параметры.
Надеюсь, это кому-нибудь поможет.