Facebook API получает новые комментарии к постам
Я использую Facebook4j
чтобы получить доступ к API Facebook для страницы.
Я могу получить список новых сообщений для страницы, используя
connection.getFeed()
и получите комментарии к Посту, используя:
post.getComments()
Но я также хочу иметь возможность получать новые комментарии к постам на странице (игнорируя комментарии, которые я уже получил). Любая идея о том, как это сделать, кроме поиска в комментариях каждого поста снова и снова?
2 ответа
Нет никакого способа сделать это с текущим API Facebook4j.
Если вы посмотрите список неподдерживаемых функций на их странице, вы увидите:
API приложений - Приложение - Facebook Developers
Рекламные API - Реклама на Графике API - Разработчики Facebook
Обновления в реальном времени - Обновления в реальном времени - Разработчики Facebook
Расширение поля - Расширение поля - Facebook Developers
Open Graph API - Open Graph - разработчики Facebook
То, что вы ищете, в режиме реального времени обновления для новых комментариев.
Вы можете взглянуть на это руководство о подписке на обновления в реальном времени.
Если вы посмотрите на приведенную выше ссылку на обновления в реальном времени, то заметите, что обновления в реальном времени ограничены определенными типами объектов и подмножеством их полей, которые также перечислены там.
Допустимыми типами объектов для подписок являются пользовательский и графический объект API страницы (среди прочего, поле подачи).
Обновления в реальном времени только указывают, что конкретное поле изменилось, они не включают в себя значение этих полей. Таким образом, это только делает приложения более эффективными, поскольку они точно знают, когда произошло изменение, и не нуждаются в постоянных или даже периодических запросах Graph API, когда изменения не происходят.
Вы будете знать, какое поле объекта (пользователь / страница / разрешения / платежи) изменилось, в вашем случае это фид.
Но кроме этого вам придется просмотреть все интересующие вас посты и комментарии - хотя, вероятно, вы могли бы сделать это эффективно. Для этого вы, вероятно, можете сохранить свой код API Facebook4j, который получает канал, и вызывать его при обновлении. Или еще лучше обновить код, чтобы отслеживать только те изменения, которые вы хотите, и так далее.
Вот этот пример (SO) о том, как получить обновление Facebook в реальном времени в Java. Вы поймете смысл и, вероятно, создадите что-то лучшее.
Этот ответ предполагает использование Spring Social Facebook, так как он имеет контроллер обновлений в реальном времени для обработки обратных вызовов обновлений в реальном времени с Facebook, тогда как RestFB
а также Facebook4j
не могу этого сделать.
Чтобы ответить на вопрос, если Facebook4j поддерживает это, нет, это не так.
Это не легко сделать с помощью официального API графа, так как комментарии используют cursor based pagination
; так фильтры как since
а также until
не будет работать (они будут работать на такие вещи, как feed
хоть. ( Источник)
Для того, чтобы делать то, что вы хотите, вам нужно получить все комментарии с этого момента до того момента, когда вы в последний раз получили их. Вы можете получить комментарии, упорядоченные (сначала самые последние, самые старые последние), используя ?filter=stream
Вы можете выполнить необработанный запрос fb через fb4j для этого:
// GET
Map<String, String> params = new HashMap<String, String>();
params.put("filter", "stream"); //add the ?filter=stream
//res will be the RAW response
RawAPIResponse res = facebook.callGetAPI("POST_ID/comments");
//you can get it as a JSONObj with:
JSONObject jsonObject = actual.asJSONObject();
ИЛИ, чтобы сделать это без необработанного запроса, вы можете использовать comment.getCreatedTime()
чтобы получить время для каждого комментария, а затем отфильтровать старые.
В любом случае вам придется фильтровать их самостоятельно, поскольку ни facebook4j, ни API Graph не поддерживают это изначально.