используя API Google Docs из скрипта Google Apps - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь использовать следующий код из API Google Docs из скрипта Google Apps для тестирования:

var f = UrlFetchApp.fetch("https://docs.googleapis.com/v1/documents/1ys6KIY1XOhPHrgQBJ4XxR1WDl0etZdmR9R48h2sP2cc:batchUpdate", {
    method:"post",
    body: JSON.stringify({
      "requests": [
        {
          "deleteContentRange": {
            "range": {
              "startIndex": 1,
              "endIndex": 80
            }
          }
        }
      ]
    }),
    headers: {
      Authorization:"Bearer " + ScriptApp.getOAuthToken(),
      "Content-Type": "application/json"
    }
  })
  Logger.log(f)

(Также, когда я пытаюсь это сделать в браузере, вручную вводя oauth токен, тот же результат, что и ниже); однако я получаю сообщение об ошибке:

{
  "error": {
    "code": 403,
    "message": "Google Docs API has not been used in project 861341326257 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/docs.googleapis.com/overview?project=861341326257 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.Help",
        "links": [
          {
            "description": "Google developers console API activation",
            "url": "https://console.developers.google.com/apis/api/docs.googleapis.com/overview?project=861341326257"
          }
        ]
      }
    ]
  }
}

, хотя я могу использовать DocumentApp из скрипта приложений Google, что, по-видимому, одно и то же (или это так)?

В любом случае, когда Я go к этой ссылке - ошибка (как и следовало ожидать), так как нет реального «проекта» для активации, так как скрипт приложений Google делает много скрытых вещей, чтобы заставить API работать.

Итак, как я могу обойти эту ошибку в скрипте приложений Google? Мой файл манифеста выглядит следующим образом:

{
  "timeZone": "America/New_York",
  "dependencies": {
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/documents",
    "https://www.googleapis.com/auth/drive",
    "https://www.googleapis.com/auth/script.external_request"
  ],
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

Так что я думаю, что объем включен.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Как другой способ, как насчет включения Docs API в расширенных службах Google?

Для этого сначала необходимо включить Docs API в расширенных службах Google. Таким образом, вы можете использовать API Docs, напрямую запрашивая конечную точку API Docs. В этом случае вам не нужно использовать API Docs, не связывая проект GAS и проект Google Could.

Шаблон 1:

В этом шаблоне ваш сценарий используется путем изменения.

Точка модификации:

  • Пожалуйста, измените body на payload.

Модифицированный скрипт:

var f = UrlFetchApp.fetch("https://docs.googleapis.com/v1/documents/1ys6KIY1XOhPHrgQBJ4XxR1WDl0etZdmR9R48h2sP2cc:batchUpdate", {
  method:"post",
  contentType: "application/json",
  payload: JSON.stringify({
    "requests": [
      {
        "deleteContentRange": {
          "range": {
            "startIndex": 1,
            "endIndex": 80
          }
        }
      }
    ]
  }),
  headers: {Authorization:"Bearer " + ScriptApp.getOAuthToken()}
})
Logger.log(f)
  • Включив Docs API в службах Advanced Google, для этого можно использовать токен доступа, полученный с помощью ScriptApp.getOAuthToken().

Pattern 2:

В этом шаблоне API Docs Advanced Google услуги используются. Пример сценария выглядит следующим образом.

Пример сценария:

В этом случае можно использовать тело запроса и идентификатор документа. А также, вы не настроили заголовок для авторизации.

var documentId = "1ys6KIY1XOhPHrgQBJ4XxR1WDl0etZdmR9R48h2sP2cc";
var resource = {
  "requests": [
    {
      "deleteContentRange": {
        "range": {
          "startIndex": 1,
          "endIndex": 80
        }
      }
    }
  ]
};
var res = Docs.Documents.batchUpdate(resource, documentId);
Logger.log(res)

Примечание:

  • В этом случае необходимые области автоматически устанавливаются. Но если вы хотите контролировать области действия, установите для них файл манифеста (appsscript.json).

Ссылки:

1 голос
/ 25 февраля 2020

Вам необходимо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...