为了账号安全,请及时绑定邮箱和手机立即绑定

Google 云端硬盘缩略图链接返回 404

Google 云端硬盘缩略图链接返回 404

ibeautiful 2023-05-16 09:49:46
这种获取 Google 云端硬盘文件缩略图的方法对我一直有效,但最近似乎已停止。我可以在网上找到的所有答案都表明这是因为 thumbnailLink 需要授权(例如)。但是,我正在使用授权访问令牌访问缩略图。我可以使用带有这些访问令牌的Drive API“Files:get”获取文件信息,但 thumbnailLink 返回 404。print(http)# <google_auth_httplib2.AuthorizedHttp object at 0x11561d0f0># An instance of google_auth_httplib2.AuthorizedHttpurl = 'https://www.googleapis.com/drive/v3/files/%s?fields=thumbnailLink' % file_idresponse, content = http.request(url)data = json.loads(content)print(data['thumbnailLink'])# https://docs.google.com/u//feeds/vt?gd=true&id=***fileID***&v=203&s=***&sz=s220# Works ✓response, content = http.request(data['thumbnailLink'])print(response['status'])# 404# :(还给出了 404 错误:thumbnailLink + "&access_token=" + YOURTOKEN;如这里所建议的。在浏览器中打开thumbnailLink(以文件所有者身份登录到 Google)。thumbnailLink在浏览器中打开修改后的内容- 替换/u//为/u/0/, /u/1/, /u/2/(当我以该用户身份打开驱动器时,URL 为https://drive.google.com/drive/u/1/my-drive)有谁知道获取 Google 云端硬盘缩略图文件的可靠方法?
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

我相信你的目标如下。

  • 您想从 Drive API 中的“files.get”方法检索到的缩略图链接中检索缩略图。

  • 从示例缩略图链接中,您想从 Google 文档(文档、电子表格等)中检索缩略图。

问题和解决方法:

目前阶段,从缩略图看的情况似乎404是bug。这已经报告给了谷歌问题跟踪器。Ref谷歌方面似乎已经为人所知。不幸的是,我认为这是当前的直接答案。而且,我相信这个问题会在未来的更新中得到解决。

在这里,作为当前的解决方法,将其转换为 PDF 文件并检索缩略图如何?在这种情况下,可以使用缩略图链接。此解决方法的流程如下。

  1. 将 Google 文档转换为 PDF 文件。

  • PDF 文件创建到与 Google 文档相同的文件夹中。

从创建的 PDF 文件中检索缩略图链接。

将上面的流程转换成python脚本后,就变成了下面这样。

示例脚本:

在使用此脚本之前,请设置访问令牌和文件 ID。在这种情况下,为了用multipart/form-data简单的脚本请求,我使用了requests库。

import json

import httplib2

import requests

import time

http = httplib2.Http()


access_token = '###'  # Please set the access token.

file_id = '###'  # Please set the file ID.


headers = {"Authorization": "Bearer " + access_token}


# 1. Retrieve filename and parent ID.

url1 = "https://www.googleapis.com/drive/v3/files/" + file_id + "?fields=*"

res, res1 = http.request(url1, 'GET', headers=headers)

d = json.loads(res1.decode('utf-8'))


# 2. Retrieve PDF data by converting from the Google Docs.

url2 = "https://www.googleapis.com/drive/v3/files/" + file_id + "/export?mimeType=application%2Fpdf"

res, res2 = http.request(url2, 'GET', headers=headers)


# 3. Upload PDF data as a file to the same folder of Google Docs.

para = {'name': d['name'] + '.pdf', 'parents': d['parents']}

files = {

    'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'),

    'file': res2

}

res3 = requests.post(

    "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",

    headers=headers,

    files=files

)

obj = res3.json()


# It seems that this is required to use by creating the thumbnail link from the uploaded file.

time.sleep(5)


# 4. Retrieve thumbnail link of the uploaded PDF file.

url3 = "https://www.googleapis.com/drive/v3/files/" + obj['id'] + "?fields=thumbnailLink"

res, res4 = http.request(url3, 'GET', headers=headers)

data = json.loads(res4.decode('utf-8'))  # or data = json.loads(res4)

print(data['thumbnailLink'])


# 5. Retrieve thumbnail.

response, content = http.request(data['thumbnailLink'])

print(response['status'])

print(content)

  • 运行此脚本时,Google Docs 文件将导出为 PDF 数据,PDF 数据将上传到 Google Drive 并检索缩略图链接。

笔记:

  • 在这种情况下,请将范围包括https://www.googleapis.com/auth/drive到您的访问令牌的范围内。因为文件上传了。

  • 为了检索文件元数据和导出 PDF 文件并上传数据,需要使用访问令牌。但是当从缩略图链接中检索到缩略图时,不需要使用访问令牌。

  • 2020年1月之后,access token不能与查询参数一起使用access_token=###,请在请求头中使用access token。

  • 解决上述问题后,我认为您可以使用您的脚本。


查看完整回答
反对 回复 2023-05-16
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信