【发布时间】:2022-01-18 10:45:13
【问题描述】:
我正在尝试下面的代码来生成谷歌文档
SERVICE_FILENAME = 'C:/Users/XYZ/Test/service_account.json' # set path to service account filename
from googleapiclient.discovery import build
from google.oauth2 import service_account
from googleapiclient.http import MediaIoBaseDownload, MediaFileUpload
credentials = service_account.Credentials.from_service_account_file(SERVICE_FILENAME,
scopes=['https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/documents']
)
# drive = build('drive', 'v3', credentials=credentials)
drive = build('docs', 'v1', credentials=credentials)
# file_metadata = {'name': filepath,
# 'mimeType': 'application/vnd.google-apps.document'}
# media = MediaFileUpload(filepath,
# mimetype='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
# file = drive.files().create(body=file_metadata,
# # media_body=media,
# fields='id').execute()
file_metadata = {
"title": "xyz",
"body": {}
}
file = drive.documents().create(body=file_metadata).execute()
print('File ID: %s' % file.get('id'))
但我没有得到任何文件 ID,也没有在 google 文档中创建文件。它说File ID: None
首先,尝试使用驱动器 API,但没有成功,然后我选择了也无法正常工作的 doc API。 注意:这两个 API 都是从 GCP 启用的。
@Tanaike 评论后我使用的方法:
from googleapiclient.discovery import build
from google.oauth2 import service_account
SERVICE_FILENAME = 'C:/Users/Test/service_account.json' # set path to service account filename
credentials = service_account.Credentials.from_service_account_file(SERVICE_FILENAME,
scopes=['https://www.googleapis.com/auth/drive']
)
drive = build('drive', 'v3', credentials=credentials)
page_token = None
response = drive.files().list(q="mimeType = 'application/vnd.google-apps.folder'",
spaces='drive',
fields='nextPageToken, files(id, name)',
pageToken=page_token).execute()
for file in response.get('files', []):
# Process change
print('Found file: %s (%s)' % (file.get('name'), file.get('id')))
if file.get('name') == "Document_API":
folder_id = file.get('id')
break
page_token = response.get('nextPageToken', None)
if page_token is None:
break
# create Google Docs file in folder
file_metadata = {
'name': 'data.docx',
'parents': [folder_id]
}
file = drive.files().create(body=file_metadata,
# media_body=media,
fields='id').execute()
print('File ID: %s' % file.get('id'))
【问题讨论】:
标签: python python-3.x google-drive-api google-docs-api google-api-python-client