che*_*cho 5 excel vba picasa google-api google-photos
我的最终目标是获取包含我的Google相册帐户中所有文件(照片,视频)的列表,最好是他们的路径.

如果我必须使用某些API,我宁愿使用基于.NET的API.你能提供一些方向吗?
我已经通过PicasaService尝试了Gdata API,但提供我的电子邮件/密码作为凭据不起作用,我总是得到404响应.
我很惊讶我找到这个API需要多长时间.它不一定是"秘密信息",但我想大多数用户都非常高兴看到他们的Google照片"老式的方式".我最初的目标是能够确定哪些照片已经/没有正确上传,然后我冒险删除任何有价值的照片,甚至是旧照片的"第3份备份副本".
像生活中的许多事情一样,有一种简单的方法和艰难的方式.
根据您的观点,艰难的方式往往更有趣和/或更充实......
确保您已在"常规"(默认)浏览器上登录Google帐户.
点击这个:
您将获得所有Google 相册的基于文本的列表.专辑列表和照片列表看起来都像RSS Feed一样可疑(如果您愿意,可以将其加入书签).
我知道你不想手动复制你的照片列表,但我怀疑遇到这个问题的其他人想要"简单"的方式:
打开API URL后,单击第一个相册链接.
点击Ctrl+ A然后Ctrl+ C从页面复制文本
转到您喜欢的文本编辑器(Notepad ++,Excel,oldschool记事本等)并点击Ctrl+V
返回照片列表,单击浏览器
Back按钮并重复每个相册.
身份验证: 为了简单起见,请首先确保您从任何Google页面登录到您的Google帐户,例如从Google搜索页面的右上角登录.这样您就可以使用下面列出的通用地址了 - 否则default需要将" "替换为您的Google ID,以及其他适应Google API身份验证的更改.
如果您有一个首选的发送GET请求的方法,那么您只需要两个URL.
据我了解,所有 Google相册都存储在相册中(即使它们似乎不是).因此,为了列出所有照片,您必须解析所有相册,并在每张相册中列出照片.
在GET列出您的谷歌相簿电话是:
https://picasaweb.google.com/data/feed/api/user/default
Run Code Online (Sandbox Code Playgroud)
GET列出相册中所有照片的调用是:
https://picasaweb.google.com/data/feed/api/user/default/albumid/__[albumID]__
Run Code Online (Sandbox Code Playgroud)
来自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);
}
Run Code Online (Sandbox Code Playgroud)
★字符串"
default"可用于代替真实用户名,在这种情况下,服务器将使用用于验证请求的当前用户凭据的用户名.
更多信息:Google Picasa .NET开发人员指南:请求照片列表
Excel具有各种形式的内置XML-Parsing功能:
...但是,即使是最新的功能似乎也支持足够的[我认为的] XML样式/来源的变化,对我有用......(或者我可能只是做错了什么.
因此,我首选的解析XML的方法是简单地将它加载到一个带有a的String中,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
Run Code Online (Sandbox Code Playgroud)
另一种偷偷摸摸的方法是快速计算另一个字符串中出现的字符串:
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
Run Code Online (Sandbox Code Playgroud)
计算<entry>相册或照片页面上的出现次数会返回该页面上的相册或照片的数量.
MSDN:关于Native XMLHTTP
由于 Google 已弃用 Picasa API,因此Google Photos API可用于获取有关相册的信息以及获取该相册甚至整个 Google 照片库中的照片和视频列表。
这可以使用 REST、Java 或 PHP 来完成(如其示例页面中所列)。
开始使用: https: //developers.google.com/photos/
您还可以通过访问示例页面上显示的 Web 上的 API 方法链接之一,轻松测试 API 功能,而无需下载或编码任何内容:
为了获取特定相册中所有照片和视频的列表,请使用:
nextPageToken每个回复都会在最后给出。使用该pageToken参数来浏览页面。对于简单的搜索和列表,您可以使用上述 Web API,每页最多提供 100 个结果。对于更高级的内容,我建议您编写代码来遍历所有结果页面并存储或打印出您需要的信息。对于无编码解决方案,TinyTask是一个不错的选择。
小智 5
我认为这更容易:
这是我的 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
Run Code Online (Sandbox Code Playgroud)