如何使用 Google 照片 API 获取所有用户照片?

How do I get all user photos using the Google Photos API?

我正在使用 Picasa Web Albums Data API 访问我的 Google 照片帐户。我的目标是下载给定开始时间和结束时间之间的所有照片(旧假期照片)。此 API 不支持服务器端时间过滤,因此我试图访问最近 4000 张图像的元数据并按时间客户端过滤它们。我有一个有效的概念证明,但我只能让服务器获得 return ~900 个图像引用(我的 Google 照片帐户很容易拥有 40k 总图像)。是否缺少某些 API 方法可以让我为我的用户下载整个 "feed" 以便我可以访问我所有照片的元数据?这是我试过的...

# 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 可以正确列出所有图像 - 'Auto Backup' 相册(从 Android 手机上的 Google 照片接收图像)有 30k图像,我可以查询它们的元数据。

不幸的是,我无法将这些图像放入一个相册中并以这种方式下载它们 - 用户创建的相册限制为 2000 张图像。 (我知道这次旅行总共有大约 3000 张图片,因为我可以在 Web 界面中 'select' 它们并查看总数,但是你不能一次下载那么多,而且你不能将超过 2k 添加到一个相册.)

从来没有 API 像我希望的那样工作,但我能够 "solve" 通过使用 Google Takeout

下载目标日期来做到这一点

经过多次尝试,我认为我已经完美地工作了。

我所做的是同时玩 start-indexmax-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 除了每个 url 请求保持 50 个条目之外,它会完美地工作.