获取 Google 张照片中所有文件的列表

Get list of all files in Google Photos

我的最终目标是在我的 Google 照片帐户中获得一个包含所有文件(照片、视频)的列表,最好带有它们的路径。

如果我必须使用一些 API 我宁愿使用基于 .NET 的。能否就此事提供一些指导?

我已经通过 PicasaService 尝试了 Gdata API,但是提供我的 email/password 作为凭据不起作用,我总是收到 404 响应。

试试这个方法:

  1. Select 您帐户中的所有照片。如果它们很多,您可能会遇到麻烦,解决方法是 select 第一个并向下滚动。图像将加载,按住 shift 按钮可将图像悬停在光标下,因此请尽可能点击带 shift 到 select 的图像。
  2. 当您有需要时selection,点击下载图片。文件开始下载。你的任务是打断它并尝试使用一些存档查看器进入保存的文件。文件已损坏,但至少存档将包含所有文件名。

This answer is outdated and will no longer work as Picasa and its API have been shut down

如何列出您的 Google 照片:

中的所有文件

我很惊讶我花了多长时间才找到这个 API。这不一定是“秘密信息”,但我想大多数用户都非常乐意以“老式方式”查看他们的 Google 照片。我最初的目标是能够确定哪些照片 had/had 没有正确上传,然后再冒险删除任何有价值的东西,甚至是我的 “第三备份副本” 旧照片。

  • 就像生活中的许多事情一样,有简单的方法困难的方法

  • 根据您的观点,艰难的道路通常更有趣and/or更充实...


简答:(“简单”方式)

  1. 确保您已在“常用”(默认)浏览器上登录 Google Account

  2. 点击这里: https://picasaweb.google.com/data/feed/api/user/default

您将获得一份包含您所有 Google 照片 相册 的 text-based 列表。相册列表和照片列表看起来很像 RSS Feed(如果您愿意,可以将其添加为书签)。


我知道不想复制你的照片列表手动,但我怀疑遇到这个问题的其他人想要 "easy" 方式:

  • 打开APIURL后,点击第一个相册link。

  • 点击Ctrl+A然后Ctrl+C 从页面复制文本

  • 转到您最喜欢的文本编辑器(Notepad++、Excel、老式记事本等)并按 Ctrl+V

  • 返回照片列表,单击浏览器的 返回 按钮并对每个相册重复.

身份验证: 为了简单起见,首先确保您已登录您的Google帐户Google 页,例如来自 Google Search page. This will allow you to use the generic addresses listed below -- otherwise the word "default" would need to be replaced with your Google ID, as as well as other changes to accomodate Google API Authentication.

的 top-right 角

API 端点

如果您有发送 GET requests 的首选方法,那么您只需要两个 URL。

据我了解,全部 Google 照片存储在 相册 中(即使它们看起来不是)。因此,为了列出所有照片,您必须解析所有相册,列出每个相册中的照片。

用于列出您的 Google 相册的 GET 调用是:

https://picasaweb.google.com/data/feed/api/user/default

列出相册中所有照片的 GET 调用是:

https://picasaweb.google.com/data/feed/api/user/default/albumid/__[albumID]__

以编程方式检索列表:(“.NET API”方式)

.NET 示例来自 Google

PhotoQuery query = new PhotoQuery(PicasaQuery.CreatePicasaUri(username, albumid));

PicasaFeed feed = service.Query(query);

foreach (PicasaEntry entry in feed.Entries)
{
    Console.WriteLine(entry.Title.Text);
}

★ The string "default" can be used in place of a real username, in which case the server will use the username of the current user credentials used to authenticate the request.

更多信息:Google Picasa .NET Developer's Guide: Request a List of Photos


列出所有 Google 使用 VBA 的照片:(“Web-Scrapey 方式”与 Excel)

Excel 具有 built-in XML-Parsing 功能,形式多样:

...但即使是最新的功能似乎也无法支持 XML style/source 中足够多的 [我假设的] 变体以对我有用...(或也许我只是做错了什么。

因此,我首选的解析 XML 的方法是简单地将其加载到带有 HttpRequest 的字符串中,然后使用 InstrMid 来定位值我感兴趣。它很乱,但我已将其用作“快速修复”以从多种类型的站点检索多种类型的数据。

While writing this answer I seem to have misplaced my related code (side effect of over-multitasking?!) -- but if you made it this far, you probably get the gist of it. The simple function for retrieving the source from a URL is below. If you're interested in seeing the rest, add a comment and I'll look harder. :-)

Public Function getHTTP(ByVal url As String) As String
'equivalent to Excel's WEBSERVICE function
    Dim encResp() As Byte, xmlHTTP As Object
    Set xmlHTTP = CreateObject("MSXML2.XMLHTTP") 'create XML/HTTP object
    xmlHTTP.Open "GET", url, False 'initialize GET request
    xmlHTTP.send 'send request to remote server
    encResp = xmlHTTP.responseBody 'receive raw (encoded) response
    Set xmlHTTP = Nothing 'always clean up after yourself!
    getHTTP = StrConv(encResp, vbUnicode) 'return decoded response
End Function

也是一种快速计算一个字符串在另一个字符串中出现的偷偷摸摸的方法:

Function countOccur(searchWithin As String, toFind As String) As String
    'returns the count of occurrences of [toFind] within [searchWithin]
    countOccur = UBound(Split(searchWithin, toFind))
End Function

计算相册或照片页面上 <entry> 的出现次数 returns 该页面上相册或照片的数量。


相关链接:

如何列出特定相册或整个库中的所有照片

已弃用 Picasa API 替代方案

由于 Picasa API 已被 Google 弃用,Google 照片 API 可用于获取信息关于相册并获取该相册甚至整个 Google 照片库中的照片和视频列表。

这可以使用 REST、Java 或 PHP(如他们的 examples page 中所列)来完成。

开始使用https://developers.google.com/photos/


Web API 由 Google

提供

您还可以轻松测试 API 功能,无需下载或编写任何代码,方法是访问示例页面上显示的 Web 上的 API 方法链接之一:


要获取特定相册中所有照片和视频的列表,请使用:

  • 搜索媒体项目: https://developers.google.com/photos/library/reference/rest/v1/mediaItems/search
    • 这样您就可以列出一张 专辑 中的媒体项目。
    • 使用此方法,您一次只能在一个相册中列出最多 100 个媒体项目(在一页上)。每个回复最后都会给你 nextPageToken。使用 pageToken 参数浏览页面。
    • 如果您需要这样做几次,没问题。对于像这样简单且重复的任务,您可以利用TinyTask来记录鼠标和键盘输入,并将枯燥的工作自动化

备注

对于简单的搜索和列表,您可以使用上面提到的网站 API,每页最多提供 100 个结果。对于任何更高级的东西,我建议您编写将遍历所有结果页面并存储或打印出您需要的信息的代码。对于无编码解决方案,TinyTask 是一个不错的选择。

如果您想列出所有照片并根据备份检查它们,您可以使用我的 python 项目 https://pypi.org/project/gphotos-sync/,它使用新的(ish)Google 照片 API.

这将:-

  • 将您所有的媒体和相册索引到 SQL 数据库
  • 下载本地备份(如果需要)
  • 将新的本地备份与以前的备份进行比较
  • 为您提供库中丢失的文件列表
  • 为您提供之前备份中丢失的文件列表
  • 为您提供备份文件夹中所有重复项的列表

请注意,比较适用于文件本身的元数据,文件夹结构和文件名不需要匹配才能起作用。

我认为这更容易:

这是我的 bash 脚本:

#!/bin/bash
#
# listgp - list google photos
#
# usage: listgp <file>
#
# dumps listing of all curreent user's stored google photos in the speeceifieed file
#
# example access to google api
#
# curl   'https://photoslibrary.googleapis.com/v1/mediaItems?pageToken=CkQKQnR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnBob3Rvcy5saWJyYXJ5LnYxLkxpc3RNZWRpYUl0ZW1zUmVxdWVzdBKiAUFIX3VRNDM0V1JKaEVkcTRfYU1uUXNnUXlzdGJpUEt4enlhVXZ3QW1TUTB5cVg2SEdRRk85MjkwRlFrRVg2VlJMRVBOVnI4cHRyRWhPcE11bTN3WUFTVHNnTXNFdmc5eUtaODd6TFJsLXh2QjNnSUlabWpLZl9sZV81c2lMc1VCUmhsalNFRXowWm9lazVhczQtNXB0dkJtYzduYUs1b1Vidw'   --header 'Authorization: Bearer ya29.GmTMBkWYE5CNTCSKJJTqlSh7FohUHp6u0hWTiyevsIW5iEGbBC0lmExfCNAldH8kaKBkwszW3Pk-ZwAzFMPNXtM4RlBF8M4vgbf8Lzv99LiVxWtojooSnRxOHWqq7ZEm-4sE9NI-'   --header 'Accept: application/json'  --compressed
#
# to determine your auth token,
#    see https://developers.google.com/photos/library/reference/rest/v1/mediaItems/list
# open dev tools in chrome, go to network tab, run the example, log into your google photos account
#    you can inpect the headers and find one that has 'Authorization: Bearer '.  Copy and paste your token
#    in the script below as the value for 'auth'.
#
#
auth="ya29.GmPNBqtRiw1dvOdiqjoaRkG9CtO2gunFtV8u_00vsAHROatuT5gZlFwNjmXf-CiPxOqxdgDKmweTdZIXeOCVaMM7d8n7E9VQlxAKOZo1zyE5Gq0_Nqqpc7T6csUJ5wablvhajQw"
#
function getItems() {
    pageToken=;

    if [ "$pageToken" != "" ]
    then
       pageTokenParam=pageToken="$pageToken";
    else    
    pageTokenParam="";
    fi

    curl  \
     "https://photoslibrary.googleapis.com/v1/mediaItems?$pageTokenParam" \
     --header "Authorization: Bearer $auth" \
     --header 'Accept: application/json'\
     --compressed > page

    cat page >> list

    grepOut=(`grep nextPageToken page | sed s/\"//g`)

    if [ "${grepOut[0]}" == "" ]
    then
    exit;
    fi

    getItems ${grepOut[1]}
}

getItems