11
votes

Vous n'êtes pas autorisé à appeler "UrlFetchApp.fetch"

J'envoie une requête http de l'éditeur de script dans des feuilles de calcul Google, mais je continue de recevoir le message d'erreur suivant:

 function onEdit(e){
  var ui = SpreadsheetApp.getUi();
        var response = UrlFetchApp.fetch('http://www.eur-api.idomoo.com/');
    Logger.log(response.getContentText());
  } 

J'utilise la fonction onEdit:

`Google Apps Script: You do not have permission to call UrlFetchApp.fetch. Required permissions: https://www.googleapis.com/auth/script.external_request`

Je ne sais pas pourquoi j'obtiens cette erreur? et j'ai également donné la permission à la portée de script.external_request, toute aide serait appréciée.


0 commentaires

5 Réponses :


2
votes

Vous devrez autoriser votre script à accéder au service external_request . Si vous êtes le propriétaire du projet, vous devriez pouvoir accorder l'accès en exécutant et en confirmant avec la page oauth .

En savoir plus sur l'authentification ici: https://developers.google.com/apps-script/guides/services/authorization


4 commentaires

J'ai eu le popup pour confirmer. Confirmé et il n'a toujours pas fonctionné après cela.


Êtes-vous le propriétaire du document? @JGood Un autre problème peut être dû au fait que vous utilisez un compte GSuite au lieu d'un compte gmail racine.


Merci pour la réponse, Yaakov! J'utilisais mon compte GSuite, mais je suis le propriétaire du domaine et j'ai créé la feuille de calcul. Pouvez-vous nous dire que c'est un problème? J'ai pu obtenir la réponse de Yuci, mais je préférerais avoir une approbation plus globale comme votre réponse. Pour référence, il a fait apparaître la requête oauth, mais a ensuite continué à lever une exception.


@JGood, c'est l'un de ces cas concrets où la documentation est rare. Je sais que GSuite est problématique par heuristique. Je suis certain que la documentation existe quelque part, mais pas quelque part directement. Je serais ravi d'avoir tort à ce sujet.



0
votes

Essayez de changer le lien https.

En regardant leur documentation API:

API Endpoints L'API 2.0 d'Idomoo a plusieurs points de terminaison, tous à partir de l'une des racines, en fonction du territoire dans lequel vous souhaitez que vos données soient envoyées et traitées:

États-Unis https://usa-api.idomoo.com/api/v2 EU https://eur-api.idomoo.com/api/v2


0 commentaires

0
votes

Il y a deux façons de résoudre ce problème

I. Mettez à jour votre manifeste et ajoutez la ligne "https://www.googleapis.com/auth/script.external_request" à oauthScopes

{
  "timeZone": "Europe/Moscow",
  "oauthScopes": [
    ...
    "https://www.googleapis.com/auth/script.external_request"
  ],
  "dependencies": {
    ...
  },
  "exceptionLogging": "STACKDRIVER"
} 

II. Ou supprimez oauthScopes clé oauthScopes de votre manifeste

Vous pouvez trouver comment modifier le manifeste ici Manifests


0 commentaires

11
votes

onEdit est appelé par un déclencheur simple lorsqu'un utilisateur modifie une valeur dans une feuille de calcul.

Cependant, les déclencheurs simples ne peuvent pas accéder aux services qui nécessitent une autorisation, tels que UrlFetchApp.fetch . Consultez le guide Google Apps Script

Ce que vous pouvez faire, c'est simplement renommer la fonction onEdit en quelque chose d'autre, comme atEdit, afin de supprimer le déclencheur simple. Suivez ensuite le menu Current project's triggers ...

entrez la description de l'image ici

et ajoutez un déclencheur à appeler en cas de On edit .

Et lors de la création du déclencheur, vous suivrez l'assistant pour accorder à votre script d'applications l'autorisation de se connecter à un service externe.


2 commentaires

Je peux confirmer que cette solution fonctionne. Merci Yuci!


Belle solution, Yuci!



0
votes

Je sais que c'est un vieux thread, mais je trouve bizarre de devoir renommer la méthode en autre chose, par exemple de onEdit à onEditHandler juste pour que cela fonctionne. Il s'avère que je peux le faire fonctionner en:

  1. Retirez la gâchette.
  2. Ajoutez de nouveau le déclencheur.

Cela est probablement dû au fait que précédemment, le gestionnaire n'a pas l'URL de récupération, il n'a donc pas besoin de demander l'autorisation d'accéder à une requête externe. Une fois qu'il est ajouté de nouveau, il dispose de l'autorisation appropriée car il vous est demandé de ré-autoriser le gestionnaire.


0 commentaires