Доступ к элементу за пределами start_index = 1000 в канале загрузки пользователя YouTube

В настоящее время я пытаюсь извлечь данные о видео из фида для загрузки YouTube. Этот фид содержит все видео, загруженные определенным пользователем, и к ним обращаются из API по запросу:

http://gdata.youtube.com/feeds/api/users/USERNAME/uploads

Где USERNAME - это имя пользователя YouTube, которому принадлежит фид.

Тем не менее, я столкнулся с проблемами при попытке доступа к каналам, длина которых превышает 1000 видео. Поскольку каждый запрос API может возвращать 50 элементов, я выполняю итерацию через фид с использованием max_length и start_index следующим образом:

http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?start-index=1&max-results=50&orderby=published
http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?start-index=51&max-results=50&orderby=published

И так далее, увеличивая start_index на 50 при каждом вызове. Это работает отлично, пока:

http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?start-index=1001&max-results=50&orderby=published

В какой момент я получаю сообщение об ошибке 400, сообщая мне, что "Вы не можете запрашивать значение за пределами объекта 1000". Это меня смутило, поскольку я предположил, что запрос вернет только 50 видео: 1001-1051 в порядке, который был опубликован совсем недавно. Просмотрев документацию, я обнаружил это:

Ограничения по количеству результатов и доступным результатам

...

Для любого заданного запроса вы не сможете получить более 1000 результатов, даже если их больше. API вернет ошибку если вы попытаетесь получить более 1000 результатов. Таким образом, API будет вернуть ошибку, если вы установите параметр запроса start-index на значение 1001 или выше. Он также вернет ошибку, если сумма параметры start-index и max-results больше, чем 1.001.

Например, если вы задаете значение параметра start-index 1000, тогда вы должны установить значение параметра max-results равным 1, и если вы установите значение параметра start-index до 980, то вы должны установить максимальные результаты значение параметра равно 21 или меньше.

Я не понимаю, как получить доступ к общему пользователю 1001-го последнего загруженного видео и дальше последовательно, так как они не могут быть проиндексированы с использованием только max-results и start-index. У кого-нибудь есть какие-либо полезные предложения о том, как избежать этой проблемы? Надеюсь, что я четко изложил эту проблему!

Ответ 1

Получение всех видеороликов для данной учетной записи , но вам нужно убедиться, что ваш запрос на загрузку фида идет против базы данных бэкэнд, а не индекса поиска. Поскольку вы указываете orderby=published в URL-адресе вашего запроса, вы идете против индекса поиска. Индексы индекса поиска ограничены 1000 элементами.

Избавьтесь от orderby=published, и вы получите данные, которые вы ищете. По умолчанию порядок загрузки загружаемого файла в любом случае обращен в хронологическом порядке.

Это особенно простая ошибка, и у нас есть сообщение в блоге, объясняющее это более подробно:

http://apiblog.youtube.com/2012/03/keeping-things-fresh.html

Самое приятное, что это уже не проблема в версии 3 API.