我的最终目标是在我的谷歌照片帐户中获得一个包含所有文件(照片、视频)的列表,最好是它们的路径。
如果我必须使用一些 API,我宁愿使用基于 .NET 的 API。你能在这个问题上提供一些方向吗?
我通过 PicasaService 尝试了 Gdata API,但提供我的电子邮件/密码作为凭据不起作用,我总是得到 404 响应。
此答案已过时,由于 Picasa 及其 API 已关闭,因此将不再有效
我很惊讶我花了多长时间才找到这个 API。这不一定是“秘密信息”,但我想大多数用户都非常乐意以“老式方式”查看他们的 Google 照片。我最初的目标是能够确定哪些照片已经/没有正确上传,然后我冒着删除任何有价值的东西的风险,甚至是我的旧照片的“第三个备份副本”。
就像生活中的许多事情一样,有简单的方法和困难的方法。
根据您的观点,艰难的方式通常更有趣和/或更充实......
确保您已在“常规”(默认)浏览器上登录您的Google 帐户。
您将获得所有 Google相册的基于文本的列表。专辑列表和照片列表看起来都像 RSS 提要(如果您愿意的话,可以这样添加书签)。
我知道您不想手动复制照片列表,但我怀疑遇到此问题的其他人想要“简单”的方式:
打开 API URL后,点击第一个相册链接。
点击Ctrl+A然后Ctrl+C从页面复制文本
转到您最喜欢的文本编辑器(Notepad++、Excel、oldschool Notepad 等)并点击Ctrl+V
返回照片列表,点击浏览器的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.
如果您有发送GET 请求的首选方法,那么您只需要两个 URL。
据我了解,所有谷歌照片都存储在相册中(即使它们看起来不是)。因此,为了列出所有照片,您必须解析所有相册,列出每个相册中的照片。
GET
列出您的 Google 相册相册的调用是:
https://picasaweb.google.com/data/feed/api/user/default
列出相册中所有照片的GET
调用是:
https://picasaweb.google.com/data/feed/api/user/default/albumid/__[albumID]__
来自Google的 .NET 示例:
PhotoQuery query = new PhotoQuery(PicasaQuery.CreatePicasaUri(username, albumid));
PicasaFeed feed = service.Query(query);
foreach (PicasaEntry entry in feed.Entries)
{
Console.WriteLine(entry.Title.Text);
}
★ 字符串“
default
”可以用来代替真实的用户名,在这种情况下,服务器将使用当前用户凭据的用户名来验证请求。
更多信息:Google Picasa .NET 开发人员指南:请求照片列表
Excel 具有各种形式的内置 XML 解析功能:
...但即使是最新的功能似乎也不支持足够的 [我认为是] XML 样式/源代码的变化,对我有用......(或者也许我只是做错了什么。
因此,我解析 XML 的首选方法是简单地将其加载到带有 an 的字符串中HttpRequest
,然后使用Instr
并Mid
找到我感兴趣的值。这很混乱,但我已将其用作“快速修复”来检索几个来自多种类型网站的数据类型。
在写这个答案时,我似乎放错了我的相关代码(过度多任务处理的副作用?!) - 但如果你做到了这一点,你可能会明白它的要点。下面是从 URL 检索源的简单函数。如果您有兴趣看到其余部分,请添加评论,我会更加努力。:-)
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>
专辑或照片页面上的出现次数会返回该页面上的专辑或照片的计数。
我认为这要容易得多:
这是我的 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=$1;
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
由于 Picasa API 已被 Google 弃用,因此Google Photos API可用于获取有关相册的信息,并获取该相册甚至整个 Google Photos 库中的照片和视频列表。
这可以使用 REST、Java 或 PHP(如其示例页面上所列)来完成。
开始使用:https ://developers.google.com/photos/
您还可以通过访问示例页面上显示的 Web 上的 API 方法链接之一轻松测试 API 功能,而无需下载或编码任何内容:
要获取特定相册中所有照片和视频的列表,请使用:
nextPageToken
最后都会给你。使用pageToken
参数浏览页面。对于简单的搜索和列表,您可以使用上面提到的每个页面最多提供 100 个结果的 Web API。对于任何更高级的内容,我建议您编写将遍历所有结果页面并存储或打印出您需要的信息的代码。对于无编码解决方案,TinyTask是一个不错的选择。
如果您想列出所有照片并根据备份检查它们,您可以使用我的 python 项目https://pypi.org/project/gphotos-sync/,它使用新的(ish)Google Photos API。
这将:-
请注意,比较适用于文件本身中的元数据,并且文件夹结构和文件名不需要匹配才能工作。
试试这个方法: