Как получить все фотографии пользователей с помощью API Google Фото?

Я использую API данных Веб-альбомов Picasa для доступа к моим Google Фото. учетная запись. Моя цель - загрузить все фотографии между заданным временем начала и окончания (старые фото из отпуска). Этот API не поддерживает фильтрацию времени на стороне сервера, поэтому я пытаюсь получить доступ к метаданным самых последних 4000 изображений и отфильтровать их по времени на стороне клиента. У меня есть рабочее доказательство концепции, но я могу заставить сервер возвращать только ~ 900 ссылок на изображения (в моей учетной записи Google Фото легко всего 40 тыс. Изображений). Есть ли какой-то метод API, который мне не хватает, который позволяет мне загружать весь «канал» для моего пользователя, чтобы я мог получить доступ к метаданным на всех моих фотографиях? Вот что я пробовал ...

# Tried this first, got ~900 results
pics = gd_client.GetUserFeed(kind='photo', limit=4000).entry
# Tried using the paging parameter start-index, but even if I 
# page through until it errors out, there are only ~900 results
pics = gd_client.GetFeed('/data/feed/api/user/default?kind=photo&max-results=100&start-index=500').entry

API-интерфейсы для альбомов работают правильно, чтобы перечислить все изображения - альбом «Автозагрузка» (который получает изображения из Google Фото на телефонах Android) содержит 30 тыс. Изображений, и я могу запросить метаданные для всех них.

К сожалению, я не могу поместить эти изображения в один альбом и загрузить их таким образом - альбомы, созданные пользователями, ограничены до 2000 изображений. (Я знаю, что в этой поездке всего около 3000 изображений, потому что я могу «выбрать» их в веб-интерфейсе и увидеть общее количество, но вы не можете загрузить столько изображений за раз и не можете добавить более 2k в один альбом.)


person Hamy    schedule 03.09.2016    source источник
comment
вопрос. Для кого я могу использовать нумерацию страниц в Picasa Photos? Я искал и использовал start_index, но каждый раз он не получал мне новых фотографий, он случайным образом получал данные, даже дублированные. Есть идеи, как правильно использовать разбиение на страницы?   -  person blueware    schedule 24.07.2018
comment
Неа. Насколько я могу судить, они действительно не заботятся о поддержке этого API. Пожалуйста, напишите, если найдете ответ!   -  person Hamy    schedule 24.07.2018
comment
Я нашел ответ и опубликовал его, чтобы помочь всем, кто хочет найти решение.   -  person blueware    schedule 26.07.2018


Ответы (2)


После многих попыток, я думаю, у меня все заработало идеально.

Я играл одновременно с start-index и max-results.

Вам нужно сделать это следующим образом (учитывая сохранение значения max-results одинаковым для каждого запроса, который вы выполняете):

  1. start-index = 1 & max-results = Any_Value_You_Want пример: 50

Запрос url будет выглядеть так:

/data/feed/api/user/default?kind=photo&max-results=50&start-index=1
  1. start-index = 1 + предыдущий max-results = 51 & max-results = 50

Запрос url будет выглядеть так:

/data/feed/api/user/default?kind=photo&max-results=50&start-index=51
  1. start-index = 51 + предыдущий max-results = 101 & max-results = 50

Запрос url будет выглядеть так:

/data/feed/api/user/default?kind=photo&max-results=50&start-index=101

И так далее, каждый раз, когда вы увеличиваете start-index на его исходное значение плюс max-results в дополнение к сохранению 50 записей для каждого запроса URL, это будет отлично работать.

person blueware    schedule 26.07.2018

Мне так и не удалось заставить API работать так, как я хотел, но я смог "решить" эту проблему, загрузив целевые даты с помощью Архиватор Google

person Hamy    schedule 02.02.2017