检索存储在 Google 张照片上的视频的文件大小
Retrieve file size for videos stored on Google Photos
上下文: 我想看看我是如何使用我的 Google 照片 space 我在 Python 中写了一个小脚本使用 Google 照片 API 检索我的所有相册及其内容(使用 https://developers.google.com/photos/library/reference/rest/v1/mediaItems/search). The file information is not there but using the mediaItem
baseUrl
(documented https://developers.google.com/photos/library/reference/rest/v1/mediaItems#MediaItem)然后我可以执行 HEAD
请求并从 content-length
headers。这似乎适用于照片,但视频的大小被严重低估了。我的猜测是 Google Photos 正在准备流式传输视频,它不会发送整个视频信息。
问题: 是否有任何方法可以检索存储在 Google 照片上的视频的文件大小,希望不必下载整个视频?该应用程序确实知道文件大小,但在 API 中似乎不可用。有没有办法发送一些请求 headers 来获取文件大小?
额外信息: 我正在为我的 HEAD
请求使用 Python 和 httplib2.Http()
(很高兴使用请求模块或任何其他选择)。
这是从API中检索到的信息,这个视频文件有100MB多一点(肯定不是30k):
{
"id": "XYZ",
"productUrl": "https://photos.google.com/lr/photo/XYZ",
"baseUrl": "https://lh3.googleusercontent.com/lr/ABC",
"mimeType": "video/mp4",
"mediaMetadata": {
"creationTime": "2018-11-27T03:43:27Z",
"width": "1920",
"height": "1080",
"video": {
"fps": 120,
"status": "READY"
}
},
"filename": "VID_20181126_174327.mp4"
}
这些是从 HEAD
请求 baseUrl
收到的 headers:
{
"access-control-expose-headers": "Content-Length",
"etag": "\"v15ceb\"",
"expires": "Fri, 01 Jan 1990 00:00:00 GMT",
"cache-control": "private, max-age=86400, no-transform",
"content-disposition": "inline;filename=\"VID_20181126_174327.jpg\"",
"content-type": "image/jpeg",
"vary": "Origin",
"x-content-type-options": "nosniff",
"date": "Wed, 08 May 2019 17:39:42 GMT",
"server": "fife",
"content-length": "31652",
"x-xss-protection": "0",
"alt-svc": "quic=\":443\"; ma=2592000; v=\"46,44,43,39\"",
"status": "200",
"content-location": "https://lh3.googleusercontent.com/lr/ABC"
}
谢谢。
这是来自 OP 的错误语言,但我认为翻译成 Python cURL call 是一项简单的任务。
我成功地使用下面的函数来检索 Google 照片图像和视频文件大小,方法是使用文件的 baseUrl
, as retrieved from the API:
调用它
function retrieve_remote_file_size($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
$data = curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
return $size;
}
(Source)
注意(与上面的"Warning"相反baseUrl
link)我做的不是 需要指定 width/height 或下载参数以便 baseUrl
使用此功能。
Photos API docs 提到对于视频,baseUrl
API returns 指的是视频的缩略图而不是视频本身,并且您'必须将 =dv
附加到 baseUrl
才能实际接收视频。从我的实验来看,从该端点返回的 content-length
也是准确的:
import requests
baseUrl = "https://lh3.googleusercontent.com/lr/AF..."
# just the thumbnail's size
requests.head(baseUrl,allow_redirects=True).headers['content-length']
# the entire video's size
requests.head(baseUrl + "=dv",allow_redirects=True).headers['content-length']
上下文: 我想看看我是如何使用我的 Google 照片 space 我在 Python 中写了一个小脚本使用 Google 照片 API 检索我的所有相册及其内容(使用 https://developers.google.com/photos/library/reference/rest/v1/mediaItems/search). The file information is not there but using the mediaItem
baseUrl
(documented https://developers.google.com/photos/library/reference/rest/v1/mediaItems#MediaItem)然后我可以执行 HEAD
请求并从 content-length
headers。这似乎适用于照片,但视频的大小被严重低估了。我的猜测是 Google Photos 正在准备流式传输视频,它不会发送整个视频信息。
问题: 是否有任何方法可以检索存储在 Google 照片上的视频的文件大小,希望不必下载整个视频?该应用程序确实知道文件大小,但在 API 中似乎不可用。有没有办法发送一些请求 headers 来获取文件大小?
额外信息: 我正在为我的 HEAD
请求使用 Python 和 httplib2.Http()
(很高兴使用请求模块或任何其他选择)。
这是从API中检索到的信息,这个视频文件有100MB多一点(肯定不是30k):
{
"id": "XYZ",
"productUrl": "https://photos.google.com/lr/photo/XYZ",
"baseUrl": "https://lh3.googleusercontent.com/lr/ABC",
"mimeType": "video/mp4",
"mediaMetadata": {
"creationTime": "2018-11-27T03:43:27Z",
"width": "1920",
"height": "1080",
"video": {
"fps": 120,
"status": "READY"
}
},
"filename": "VID_20181126_174327.mp4"
}
这些是从 HEAD
请求 baseUrl
收到的 headers:
{
"access-control-expose-headers": "Content-Length",
"etag": "\"v15ceb\"",
"expires": "Fri, 01 Jan 1990 00:00:00 GMT",
"cache-control": "private, max-age=86400, no-transform",
"content-disposition": "inline;filename=\"VID_20181126_174327.jpg\"",
"content-type": "image/jpeg",
"vary": "Origin",
"x-content-type-options": "nosniff",
"date": "Wed, 08 May 2019 17:39:42 GMT",
"server": "fife",
"content-length": "31652",
"x-xss-protection": "0",
"alt-svc": "quic=\":443\"; ma=2592000; v=\"46,44,43,39\"",
"status": "200",
"content-location": "https://lh3.googleusercontent.com/lr/ABC"
}
谢谢。
这是来自 OP 的错误语言,但我认为翻译成 Python cURL call 是一项简单的任务。
我成功地使用下面的函数来检索 Google 照片图像和视频文件大小,方法是使用文件的 baseUrl
, as retrieved from the API:
function retrieve_remote_file_size($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
$data = curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
return $size;
}
(Source)
注意(与上面的"Warning"相反baseUrl
link)我做的不是 需要指定 width/height 或下载参数以便 baseUrl
使用此功能。
Photos API docs 提到对于视频,baseUrl
API returns 指的是视频的缩略图而不是视频本身,并且您'必须将 =dv
附加到 baseUrl
才能实际接收视频。从我的实验来看,从该端点返回的 content-length
也是准确的:
import requests
baseUrl = "https://lh3.googleusercontent.com/lr/AF..."
# just the thumbnail's size
requests.head(baseUrl,allow_redirects=True).headers['content-length']
# the entire video's size
requests.head(baseUrl + "=dv",allow_redirects=True).headers['content-length']