# #python #google-cloud-platform #google-sheets-api #google-docs-api #service-accounts
Вопрос:
У меня есть проект, в котором каждый раз, когда сохраняется новый объект, он также создает пустой документ Google и лист Google в качестве дополнительных ресурсов, с которыми могут работать пользователи.
Для этого я создал учетную запись службы внутри облачной платформы Google, сгенерировал файл .json, предоставил разрешения, указанные в документации (Браузер, Администратор учетной записи службы, Администратор пула идентификаторов рабочей нагрузки IAM, Пользователь идентификатора рабочей нагрузки).
Также создан API-ключ.
С помощью этого я могу успешно создавать, удалять, перечислять все файлы и переименовывать определенный файл (сценарии ниже), но я не могу загрузить iframe с документом и самой электронной таблицей. Адрес, который я пытался загрузить в src iframe:
https://docs.google.com/document/d/DOC_ID?key=APIKEY
https://docs.google.com/spreadsheets/d/SHEET_ID/?key=APIKEY
https://docs.googleapis.com/v1/documents/DOC_ID?key=APIKEY
https://sheets.googleapis.com/v4/spreadsheets/SHEET_ID?key=APIKEY
Первые два адреса загружают «Вам нужен доступ — Запросите доступ или переключитесь на учетную запись с доступом». Сообщение Google (снимок экрана здесь «Вам нужен доступ»).
В двух других выводах 401 — «Запрос отсутствует необходимые учетные данные для проверки подлинности. Ожидаемый маркер доступа OAuth 2, файл cookie для входа в систему или другие действительные учетные данные для аутентификации».
Вопросы:
- Как я могу отобразить эти файлы в стандартном iframe Google (с пользовательским интерфейсом, панелью инструментов и т. Д.)?
- Есть ли способ просмотреть все файлы, созданные учетной записью службы на веб-сайте облачной платформы Google, как это позволяет личный диск Google? Я пытался drive.google.com и он пуст, но я могу перечислить их все, используя Python.
- Я попытался заставить его работать с федерацией идентификаторов рабочей нагрузки в AWS, поэтому я создал Пул, установил AWS в качестве поставщика с моим идентификатором AWS и выбрал учетную запись службы из «ПОДКЛЮЧЕННЫХ УЧЕТНЫХ ЗАПИСЕЙ СЛУЖБ». Есть ли для этого руководство по настройке AWS? Я пока отложил это в сторону, потому что не знаю, что делать дальше.
# GOOGLE DOC CREATION
def document_create(request, obj):
SERVICE_ACCOUNT_FILE = '.json'
SCOPES = ['https://www.googleapis.com/auth/documents']
body = {
'title': obj.title,
}
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('docs', 'v1', credentials=creds)
document = service.documents().create(body=body).execute()
# GOOGLE SHEET CREATION
def spreadsheet_create(request, obj):
SERVICE_ACCOUNT_FILE = '.json'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
spreadsheet = {
'properties': {
'title': obj.title,
}
}
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('sheets', 'v4', credentials=creds)
spreadsheet = service.spreadsheets().create(body=spreadsheet, fields='spreadsheetId').execute()
# LIST ALL FILES
def index(request, template='gcp/index.html'):
SERVICE_ACCOUNT_FILE = '.json'
SCOPES = [] # WORKS WITHOUT ANY SCOPE SOMEHOW
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('drive', 'v3', credentials=creds)
results = service.files().list().execute()
drive_list = results.get('files', [])
# RENAME A FILE
def rename(request):
SERVICE_ACCOUNT_FILE = '.json'
SCOPES = [] # ALSO WORKS WITHOUT ANY SCOPE SOMEHOW
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('drive', 'v3', credentials=creds)
try:
service.files().update(fileId=file_id, body={'name': new_file_name}).execute()
except Exception as e:
pass
(Это мой первый пост здесь, так что приношу извинения, если что-то не так, как должно быть.)
Заранее спасибо!
Комментарии:
1. Я не уверен, зачем вы заходите в учетные записи служб и API, если все, что вы хотите сделать, — это отобразить документы Google в собственном интерфейсе. Разве вы не можете просто поделиться ими и позволить Google сделать тяжелую работу? Вы хотите каким-то образом разместить сервер Google Таблиц или что-то в этом роде?
2. Мне нужен API, позволяющий пользователям самостоятельно создавать документ и лист для каждого проекта, который они запускают. Проект содержит несколько вещей, с которыми пользователи могут работать, а также документ для документирования их анализа и лист для ввода данных, которые они собирают. Это может быть сделано несколькими пользователями, работающими над одними и теми же проектами с разными ролями и задачами.
3. Вы можете сделать все это без API, хотя, зачем вам конкретно нужен API? Чего вы не можете достичь с помощью обычного пользовательского интерфейса?
4. Вы можете сделать это вручную, предполагая, что все пользователи знают, как это сделать, хорошо? Я говорю о тысячах пользователей онлайн одновременно, около 3-5 миллионов в месяц, и они далеко не опытные пользователи, им нужно, чтобы все это было мгновенно сделано для них одним щелчком мыши «Начать проект», чтобы они могли начать работать за одну секунду, а не тратить время на настройку, так как большинство из них даже не знают, как все это сделать самостоятельно.
5. Все ли они находятся в вашем домене? Для этого вам не нужна учетная запись службы. Вы могли бы просто создать обычное внутреннее приложение. Например, вы следили за быстрым запуском для различных API-интерфейсов? Возможно, вы могли бы сделать это полностью с помощью API привода. developers.google.com/drive/api/v3/quickstart/python — Я думаю, что вы, возможно, попадаете в кроличью нору, и это сделает все намного сложнее, чем должно быть.
Ответ №1:
Вам нужно будет поделиться этими документами с общественностью, чтобы разместить их на веб-странице. В противном случае вы могли бы отображать их только в формате HTML, XLSX или PDF для просмотра, но не вставлять их.
Комментарии:
1. Эти файлы создаются пользователями и будут использоваться сразу же. Количество файлов должно быть огромным, это невозможно сделать вручную, а также совершенно небезопасно делать их общедоступными. Это работало раньше в альфа-версии, но перестало работать после того, как я переписал бета-версию. Похоже, проблема с аутентификацией, а не с правами доступа к файлам. В дополнение к этому, там даже нет диска (как я уже упоминал в вопросе), я использую API Google Cloud Platform’a через учетную запись рабочей области.
Ответ №2:
Оказывается, каждый новый файл, созданный с помощью API листов и документов, по умолчанию является закрытым.
Чтобы сделать его доступным, вам просто нужно добавить новые разрешения, указав тип (пользователь/домен), роль и значение, соответствующее выбранному типу.
Это должно быть сделано с помощью API привода.