API Yammer — пейджинг

Я пытаюсь собрать ряд сообщений через остальной API и знаю, что вы можете получить только 20 результатов за раз. Я попытался увеличить переменную страницы, но это не повлияло, и я просто получаю одни и те же результаты каждый раз, независимо от номера страницы (https://www.yammer.com/api/v1/messages)..json?page=6). Я продолжил использовать параметры newer_than и old_than для просмотра результатов, и это работает до некоторой степени, но, похоже, исключает записи. Я использую следующий подход ниже:

Поскольку простая установка newer_than приводит только к 20 самым последним записям, если они новее, чем идентификатор, отправленный в параметре newer_than, я также устанавливаю динамический параметр old_than.

  1. Отправить запрос только с параметром новее, чем. Это возвращает 20 самых последних записей. (например, www.yammer.com/api/v1/messages.json?newer_than=235560157)
  2. Извлеките идентификатор 20-го идентификатора из JSON и используйте его для заполнения параметра old_than. В результате получается 20 разных записей. (например, ww.yammer.com/api/v1/messages.json?newer_than=235560157&older_than=405598096)
  3. Повторяйте шаг 2 до тех пор, пока не будет возвращено никаких результатов, поскольку параметры newer_than и old_than в конечном итоге перекрываются.

Проблема в том, что набор записей, возвращаемый этим методом, меньше, чем количество записей, возвращаемых для сообщений из API экспорта данных. Я работаю исходя из предположения, что более новые идентификаторы сообщений всегда генерируются со значением, превышающим любые старые сообщения.

Возможно, я неправильно понимаю, как постраничное отображение результатов должно быть реализовано с помощью REST API?

Любая помощь приветствуется!

Заранее спасибо!


person NickFujita    schedule 10.07.2014    source источник
comment
Это кажется мне нормальным. Из сообщений, которые вы пропустили, какую закономерность вы заметили? Все ли они находятся на одной стороне вашей границы newer/older_than, непрерывны, разбросаны по диапазону случайным образом,...?   -  person siger    schedule 11.07.2014
comment
Похоже, что значения ближе к новой стороне спектра, однако в результатах случайным образом отсутствуют записи. Похоже, что в этом нет какой-то закономерности. В выборке примерно 75 из 180 записей время от времени отсутствовали. Возможно ли, что существуют определенные типы сообщений, которые извлекаются из API экспорта данных и недоступны с помощью REST API? Или я могу пропустить некоторые параметры, чтобы получить полный набор сообщений?   -  person NickFujita    schedule 12.07.2014
comment
Я также заметил, что страницы перестают появляться через некоторое время и, кажется, ограничены примерно 2,5-3 месяцами или около того. Не могли бы вы подтвердить, что вы также видели то же самое, или знаете о некоторых ограничениях на количество исторических данных сообщений, которые можно получить с помощью REST API?   -  person NickFujita    schedule 22.07.2014


Ответы (3)


Во-первых, параметр page работает только для поискового API.

Во-вторых, способ, которым вы пытаетесь получить сообщения, не возвращает никаких комментариев к сообщениям или возвращает 2 лучших комментария к любому сообщению на основе параметра «расширенный». По умолчанию он возвращает 2 комментария к каждому сообщению. Чтобы получить все комментарии к сообщению, вам нужно будет получить его по отдельности.

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

person Farhaan Nasir    schedule 23.07.2014
comment
Привет Фархан, спасибо за ваш ответ! После просмотра поля Threaded в документации кажется, что вы правы! многопоточный = [правда | расширенный] - threaded=true вернет только первое сообщение в каждом потоке. Этот параметр предназначен для приложений, которые отображают свернутые цепочки сообщений. threaded=extended возвращает сообщения запуска потока в порядке последних активных сообщений, а также два последних сообщения, поскольку они просматриваются в представлении по умолчанию в веб-интерфейсе Yammer. - person NickFujita; 25.07.2014
comment
Вы упомянули, что если мне нужно получить все комментарии к сообщению, мне придется получать их по отдельности? Вы имели в виду подход? Есть ли способ указать первое сообщение в потоке и вернуть ВСЕ комментарии? Или есть способ вызвать сообщение конкретно по ID (или массово по ID)? - person NickFujita; 25.07.2014

Я согласен с Фарханном. Конечная точка API для остальных по умолчанию возвращает только два верхних комментария для любого сообщения. Чтобы получить все комментарии к посту, нужно сделать отдельный запрос.

При использовании API экспорта данных все комментарии вместе с сообщением (общедоступные и частные) также экспортируются, что увеличивает количество сообщений. В то время как вызов API по умолчанию возвращает только 2 последних комментария к любому сообщению.

person Ryan Braastad    schedule 23.07.2014
comment
Привет, Райан, спасибо за ответ! Какой конкретный запрос вы имели в виду, чтобы получить все комментарии к посту? Мне нужно получить информацию о лайках и типах контента из REST API, которая недоступна в API экспорта данных. - person NickFujita; 25.07.2014

Экспорт данных включает личные сообщения. Личные сообщения не будут возвращены этим вызовом API.

Проверьте, являются ли сообщения, которые вы не видите, личными сообщениями.

person Community    schedule 14.07.2014
comment
Привет Кайл! Спасибо за ответ. Я проверил данные, которые мы получаем из API экспорта данных, и все еще вижу, что сообщения редко отсутствуют в наборе данных, который мы получаем из REST API, хотя оба поля экспорта данных сообщения «in_private_group» и «in_private_conversion» помечаются как ложные. - person NickFujita; 22.07.2014