【发布时间】:2018-09-06 20:41:41
【问题描述】:
from __future__ import print_function
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
# If modifying these scopes, delete the file token.json.
SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly'
def main():
"""Shows basic usage of the Drive v3 API.
Prints the names and ids of the first 10 files the user has access to.
"""
store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
creds = tools.run_flow(flow, store)
service = build('drive', 'v3', http=creds.authorize(Http()))
# Call the Drive v3 API
results = service.files().list(
pageSize=10, fields="nextPageToken, files(id, name)").execute()
items = results.get('files', [])
if not items:
print('No files found.')
else:
print('Files:')
for item in items:
print('{0} ({1})'.format(item['name'], item['id']))
if __name__ == '__main__':
main()
另存为 quickstart.py 并运行这个文件,认证流程就完成了。 然后在目录中生成了token.json。 现在下载doc文件
file_id = '1wzCjl51u131v1KBgpbiKLJs8DPPakhXCFosfYjp7BY0'
request = service.files().get_media(fileId=file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print ("Download %d%%." % int(status.progress() * 100))
id 是从 https://docs.google.com/document/d/1wzCjl51u131v1KBgpbiKLJs8DPPakhXCFosfYjp7BY0/edit?usp=sharing
请求 = drive_service.files().get_media(fileId=file_id)
改成
request = service.files().get_media(fileId=file_id)
在示例中保存为 p.py 执行时
line 2, in <module>
request = service.files().get_media(fileId=file_id)
NameError: name 'service' is not defined
【问题讨论】:
-
您必须像这样定义服务函数: service = build('drive', 'v3', http=creds.authorize(Http())) 它是在 main() 函数中定义的。其他功能不知道“服务”是什么。
-
在哪里添加 service = build('drive', 'v3', http=creds.authorize(Http()))
-
在你使用的函数里面
-
不合并两个文件,(quickstart.py) 和 (download.py) 这里 download.py 上面的第一行 file_id service = build('drive', 'v3', http=creds.authorize( Http())) 得到 NameError: name 'build' is not defined
-
关于合并 py 文件并在 else 语句后在 file_id 之前添加行 NameError: name 'io' is not defined
标签: python google-api google-drive-api google-oauth google-api-python-client