- Загрузка или экспорт файла в зависимости от типа MIME (экспорт для файлов типа Google) Конец документа < /li>
< /ul>
Я использую учетную запись службы с органом по делегированию домена. Я также назначил следующие две области при предоставлении широкого домена полномочия в учетной записи службы:
https://www.googleapis.com/auth/drive - https://www.googleapis.com/auth/documents
Я могу получить доступ к дисковому и документам пользователя, хотя и только для чтения, и я даже могу загрузить документы без Google MimeType со диска оказавшего себе качества. Тем не менее, я получаю 403 разрешений, отклонена к ошибке (и я обещаю, что это не связано с ограничениями) всякий раз, когда я пытаюсь экспортировать или сохранить документ Google Format, электронная таблица и т. Д.
Код: Выделить всё
from google.auth.transport.requests import Request
from google.oauth2.service_account import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
GOOGLE_KEY_FILE = "google/service_account_credentials.json"
#
SCOPES = [
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/documents"
]
# ===========================================================================
def get_service_account():
#
return Credentials.from_service_account_file(
GOOGLE_KEY_FILE,
scopes = SCOPES)
def get_subject_credentials(service_account, subject_email):
return service_account.with_subject(subject_email)
def get_drive_object(subject_credentials):
service = None
try:
service = build("drive", "v3", credentials=subject_credentials)
except HttpError as error:
print(f"Error occurred [get_drive_object]: {error}")
return service
def get_document_object(subject_credentials):
service = None
try:
service = build("docs", "v1", credentials=subject_credentials)
except HttpError as error:
print(f"Error occurred [get_document_object]: {error}")
return service
# ===========================================================================
def OpenCloseSave(docObject, fileId):
try:
# get the document
"""
document = docObject.documents().get(
documentId=fileId
).execute()
"""
# modify and save the document
result = docObject.documents().batchUpdate(
documentId=fileId,
body={
"requests": [{
"insertText": {
"text": "",
"endOfSegmentLocation": {}
}
}]
}
).execute()
print(f"Result: {result}")
except HttpError as error:
print(f"Document error: {error}")
return 0
# ===========================================================================
def main():
subjectEmailAddress = "user's email address"
fileId = "file id from the user's drive"
serviceAccount = get_service_account()
if not serviceAccount is None:
impersonatedUser = get_subject_credentials(serviceAccount, subjectEmailAddress)
if impersonatedUser is not None:
documentObject = get_document_object(impersonatedUser)
#
OpenCloseSave(documentObject, fileId)
return 0
if __name__ == "__main__":
main()
print("Finished ...")
< /code>
С учетной записью, которую я создал, я могу успешно: < /p>
Получить метаданные файла с диска < /li>
Откройте документ для чтения < /li>
Загрузите документ без Google MimeType < /li>
< /ul>
Тем не менее, всякий раз, когда я пытаюсь экспортировать документ [b] Google (например, DOC, таблица, таблица) [/b], используя API диска, или попытаться сохранить документ Google, используя API DOCS, я получаю ошибку 403 < /код>. Такие как:
Ошибка документа:
Подробнее здесь: [url]https://stackoverflow.com/questions/78926486/google-doc-api-access-denied-when-using-a-service-account-with-domain-wide-del[/url]