gpt4 book ai didi

python - Google REST HTTP 请求提供比 google-api-python-client Python 请求更多的属性

转载 作者:行者123 更新时间:2023-12-01 04:21:35 25 4
gpt4 key购买 nike

如果我直接使用 HTTP REST 接口(interface)发出请求,如下所示:

GET https://www.googleapis.com/drive/v2/files/1el16TSNYvaGQndXXDZjheN_CANnWbA9wSA?key={YOUR_API_KEY}

我获得了文件的一组元数据,其中包含文件 properties 元素等。相反,如果我使用 Python 库调用驱动器 API,如下所示:

md = service.files().get(fileId='1el16TSNYvaGQndXXDZjheN_CANnWbA9wSA').execute()

我在 md 中得到一个字典,其中包含一组更加有限的数据,其中缺少 properties 。我没有表示字段过滤。

这是 Google Python 库的限制还是我需要设置一些选项?

更新:根据评论,我回去检查了身份验证。我直接使用 Google 食谱中的 Oauth2 和完整的身份验证范围 ('https://www.googleapis.com/auth/drive')。下面的代码(我认为)是演示结果所需的最少代码。

import httplib2
import os
import json

from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools

try:
import argparse
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
flags = None

SCOPES = 'https://www.googleapis.com/auth/drive'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Other Client 1'


def get_credentials():
home_dir = os.path.expanduser('~')
credential_dir = os.path.join(home_dir, '.credentials')
if not os.path.exists(credential_dir):
os.makedirs(credential_dir)
credential_path = os.path.join(credential_dir, 'drive-tagger.json')
store = oauth2client.file.Storage(credential_path)
credentials = store.get()
if not credentials or credentials.invalid:
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
flow.user_agent = APPLICATION_NAME
if flags:
credentials = tools.run_flow(flow, store, flags)
else: # Needed only for compatability with Python 2.6
credentials = tools.run(flow, store)
print('Storing credentials to ' + credential_path)
return credentials


def main():
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('drive', 'v2', http=http)

md = service.properties().list(fileId='1el16TSNYvaGQndXXDZjheN_CANnWbA9wSA').execute()
print "properties().list() returns:"
print json.dumps(md, indent=4)
print "***Done***"

if __name__ == '__main__':
main()

如果我运行此命令,我会弹出一个身份验证浏览器,并通过与我在 API 资源管理器中使用的域相同的域进行身份验证。结果是这样的:

Authentication successful.
Storing credentials to C:\Users\scott_jackson\.credentials\drive-tagger.json
properties().list() returns:
{
"items": [],
"kind": "drive#propertyList",
"etag": "\"amKkzAMv_fUBF0Cxt1a1WaLm5Nk/vyGp6PvFo4RvsFtPoIWeCReyIC8\"",
"selfLink": "https://www.googleapis.com/drive/v2/files/1el16TSNYvaGQndXXDZjheN_CANnWbA9wSA/properties?alt=json"
}
***Done***

请注意,“items” 为空。但是,如果我使用 API 资源管理器,并在同一域中进行身份验证并请求相同的 fileId,我会得到:

{
"kind": "drive#propertyList",
"etag": "\"amKkzAMv_fUBF0Cxt1a1WaLm5Nk/BEYHBcaVZiElhupVVaqT2nEhnc0\"",
"selfLink": "https://www.googleapis.com/drive/v2/files/1el16TSNYvaGQndXXDZjheN_CANnWbA9wSA/properties",
"items": [
{

"kind": "drive#property",
"etag": "\"amKkzAMv_fUBF0Cxt1a1WaLm5Nk/Mg7GWY95vfY7E-2gvlxRbl7MLDk\"",
"selfLink": "https://www.googleapis.com/drive/v2/files/1el16TSNYvaGQndXXDZjheN_CANnWbA9wSA/properties/md5sum?visibility=PRIVATE",
"key": "md5sum",
"visibility": "PRIVATE",
"value": "a61b0d91a294364b0c4eebb3ee83c09a"
}
]
}

其中有我正在寻找的'items'

如有任何见解,我们将不胜感激。

最佳答案

请注意,该属性被标记为“私有(private)”。这意味着只有创建它的应用程序才能看到它。既然您说它显示在 API 资源管理器中,我猜您可能也通过 API 资源管理器创建了该属性,并将其作为私有(private)属性进行操作。

如果您使用的是资源管理器,请尝试将该属性创建为公共(public)属性。这将允许你的 python 脚本看到它。或者,如果您希望将其保留为您的应用程序的私有(private)属性,则可以使用您的应用程序的身份来创建该属性。

关于python - Google REST HTTP 请求提供比 google-api-python-client Python 请求更多的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33614925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com