API GCP листов/документов не отображает файлы в iframe

# #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 для входа в систему или другие действительные учетные данные для аутентификации».

Вопросы:

  1. Как я могу отобразить эти файлы в стандартном iframe Google (с пользовательским интерфейсом, панелью инструментов и т. Д.)?
  2. Есть ли способ просмотреть все файлы, созданные учетной записью службы на веб-сайте облачной платформы Google, как это позволяет личный диск Google? Я пытался drive.google.com и он пуст, но я могу перечислить их все, используя Python.
  3. Я попытался заставить его работать с федерацией идентификаторов рабочей нагрузки в 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 привода.