Можно ли загрузить Документ Google с помощью API Google Docs без экрана согласия OAuth? - PullRequest
2 голосов
/ 24 апреля 2020

Я несколько раз просматривал устаревшую документацию и устаревшие сообщения Stackoverflow по этой проблеме.

Чего я хочу достичь: пользователь предоставляет моей системе ссылку общего доступа (ту, которая имеет usp = общий доступ в URL). Когда моя система имеет это, она загружает документ через Google Docs API. Я не хочу, чтобы пользователю приходилось go через экран авторизации, потому что я хочу, чтобы мое приложение видело только один общий URL-адрес документа

В частности, я хочу получить результаты Google Docs API get функция, которая предоставляет документ в необработанном виде, структура и все.

Google Docs API предлагает, чтобы я мог авторизовать , используя Ключ API , но мне не удалось. API жалуется, что в моем запросе отсутствуют учетные данные. Вызов в простейшем виде выглядит примерно так:

service = build('docs', 'v1', developerKey={key from dashboard})
query = service.documents.get(documentId={my doc id from shared url})
response = query.execute()

В других публикациях упоминается API-интерфейс Google Drive и его функция экспорта, но это обеспечивает отформатированные форматы , а не чистые * 1026. * выходные данные, которые я ищу.

Надеемся, что кто-то, кто ранее разбился об API Google Docs, может помочь с этим:)

1 Ответ

2 голосов
/ 24 апреля 2020

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите извлечь объект Google Document как JSON данные, используя метод get API Google Docs.
  • Вы хотите Для этого используйте ключ API.
  • Вы хотите, чтобы пользователи загружали объект Документ Google с помощью одного URL-адреса.
    • От I want my application to only see the single shared document URL.

Для этого, как насчет этого ответа?

Проблема и обходной путь:

На данном этапе кажется, что метод get API Docs нельзя использовать с ключом API, даже если документ Google открыт для общего доступа. Когда метод get API Docs запрашивается в общедоступном документе Google с ключом API, возвращается следующее значение. (В этом случае уже было подтверждено, что ключ API можно использовать для Drive API.)

{
  "error": {
    "code": 401,
    "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED"
  }
}

Из этого результата выясняется, что ключ API нельзя использовать в этой ситуации. Во избежание этого он может подумать об использовании учетной записи службы. Но на текущем этапе токен доступа не может использоваться в качестве параметра запроса. Ref Поэтому необходимо подумать о другом обходном пути.

Итак, в качестве другого обходного пути я хотел бы предложить использовать веб-приложения, созданные в скрипте Google Apps, для достижения вашей цели. В этом случае веб-приложения используются в качестве API.

Использование:

Пожалуйста, выполните следующую последовательность действий.

1. Создайте новый проект скрипта Google Apps.

Пример скрипта веб-приложений - это скрипт Google Apps. Поэтому, пожалуйста, создайте проект Google Apps Script.

Если вы хотите создать его напрямую, перейдите к https://script.new/. В этом случае, если вы не вошли в Google, откроется экран входа. Пожалуйста, войдите в Google. При этом открывается редактор сценариев Google Apps Script.

2. Подготовьте скрипт.

Скопируйте и вставьте следующий скрипт (Google Apps Script) в редактор скриптов. И , пожалуйста, включите Google Docs API в Advanced Google services . Этот скрипт предназначен для веб-приложений.

function doGet(e) {
  const key = "samplekey";  // Please set the key for using this Web Apps.

  const k = e.parameter.key;
  const documentId = e.parameter.documentId;
  if (k === key) {
    const obj = Docs.Documents.get(documentId, {fields: "*"});
    return ContentService.createTextOutput(JSON.stringify(obj)).setMimeType(ContentService.MimeType.JSON);
  }
  return ContentService.createTextOutput(JSON.stringify({error: "Wrong key."})).setMimeType(ContentService.MimeType.JSON);
}
  • В этом случае используется метод GET.

3. Развертывание веб-приложений.

  1. В редакторе сценариев откройте диалоговое окно с помощью «Publi sh» -> «Развернуть как веб-приложение».
  2. Выберите «Я " for " Запустите приложение как: ".
    • При этом сценарий запускается от имени владельца.
  3. Выберите "Любой, даже анонимный" для "У кого есть доступ к приложению: ".
    • В этом случае токен доступа не требуется запрашивать. Я думаю, что я рекомендую этот параметр для вашей цели.
    • Конечно, вы также можете использовать токен доступа. В это время установите «Anyone» .
  4. Нажмите кнопку «Развернуть» как новую «Project version».
  5. Автоматически открывать диалоговое окно «Требуется авторизация».
    1. Нажмите «Просмотреть разрешения».
    2. Выберите собственную учетную запись.
    3. Нажмите «Дополнительно» в разделе «Это приложение не подтверждено».
    4. Нажмите " Go до ### имени проекта ### (небезопасно) "
    5. Нажмите кнопку" Разрешить ".
  6. Нажмите" ОК ".
  7. Скопируйте URL-адрес веб-приложений. Это как https://script.google.com/macros/s/###/exec.
    • Когда вы изменили скрипт Google Apps, пожалуйста, повторно разверните его как новую версию. Этим измененный сценарий отражается в веб-приложениях. Пожалуйста, будьте осторожны.

4. Запустите функцию с помощью веб-приложений.

Это пример сценария python для запроса веб-приложений. Укажите URL-адрес и идентификатор документа веб-приложений.

import requests
document_id = '###'  # Please set the Document ID.
key = 'samplekey'  # Please set the key for using Web Apps.
url = 'https://script.google.com/macros/s/###/exec?documentId=' + document_id + '&key=' + key
res = requests.get(url)
print(res.text)
  • В этом случае метод GET используется на стороне веб-приложений. Таким образом, вы также можете напрямую получить доступ к указанному выше URL-адресу с помощью браузера.

Примечание:

  • Когда вы изменили скрипт веб-приложений, пожалуйста, повторно разверните Интернет Приложения как новая версия. Таким образом, последний скрипт отражается в веб-приложениях. Пожалуйста, будьте осторожны.

Ссылки:

...