Пакетный запрос на 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 параметры.

Надеюсь, это кому-нибудь поможет.

Другие вопросы по тегам