Facebook API получает новые комментарии к постам

Я использую Facebook4j чтобы получить доступ к API Facebook для страницы.

Я могу получить список новых сообщений для страницы, используя

connection.getFeed()

и получите комментарии к Посту, используя:

post.getComments()

Но я также хочу иметь возможность получать новые комментарии к постам на странице (игнорируя комментарии, которые я уже получил). Любая идея о том, как это сделать, кроме поиска в комментариях каждого поста снова и снова?

2 ответа

Нет никакого способа сделать это с текущим API Facebook4j.

Если вы посмотрите список неподдерживаемых функций на их странице, вы увидите:

То, что вы ищете, в режиме реального времени обновления для новых комментариев.

Вы можете взглянуть на это руководство о подписке на обновления в реальном времени.

Если вы посмотрите на приведенную выше ссылку на обновления в реальном времени, то заметите, что обновления в реальном времени ограничены определенными типами объектов и подмножеством их полей, которые также перечислены там.

Допустимыми типами объектов для подписок являются пользовательский и графический объект 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 не поддерживают это изначально.

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