web-dev-qa-db-fra.com

Accès à une feuille Google (nouveau style, publique) au format JSON

Comment puis-je accéder au contenu d'une feuille Google (nouveau style) d'un JSON? Mon objectif est d'accéder aux valeurs à partir de JavaScript, je dois donc pouvoir télécharger le JSON via HTTP.

Exemple: comment puis-je télécharger les données de cette feuille en JSON?

J'ai essayé de trouver la réponse via une recherche sur le Web, mais j'ai finalement échoué:

27
jochen

J'ai finalement (en quelque sorte) résolu mon problème. Juste pour référence future, et au cas où quelqu'un d'autre rencontrerait les mêmes problèmes, voici la solution que j'ai trouvée:

  1. Pour rendre la feuille de calcul accessible au public, il faut rendre la feuille de calcul accessible au public. Cela se fait dans l'interface Web de Google Sheets, en utilisant les entrées de menu File > Publish to the web ... > link > publish. Il est possible de publier la feuille de calcul entière ou des feuilles de calcul individuelles.

  2. Une API pour accéder aux données de Google Sheets par programme est décrite sur les pages Web de l'API Google Sheets . Cette API utilise des URL du formulaire https://spreadsheets.google.com/feeds/.../ touche / worksheetId /.... Un peu bizarrement, la signification des touches et worksheetId ne semble pas être expliquée dans la documentation de l'API.

    Mes expériences montrent que la valeur de la clé peut être trouvée en prenant une partie des URL utilisées pour accéder à la feuille via l'interface web (voir aussi ici ). La clé est tout après le /d/, jusqu'à la prochaine barre oblique. Pour la feuille de calcul dans la question, la clé est donc 1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI. Le worksheetId semble être un entier, donnant la position de la feuille de calcul dans la feuille de calcul. Pour l'exemple de la question, il faut savoir que la feuille affichée est la deuxième feuille de calcul, le worksheetId dans ce cas est 2.

    L'API a défini les requêtes public et private. Pour accéder à une ressource exportée sans authentification, les requêtes public doivent être utilisées.

  3. Les appels d'API pour obtenir les données de la feuille de calcul sont expliqués dans la section "Récupération d'un flux basé sur une liste" (cliquez sur l'onglet "Protocole" dans les exemples). L'URL requise pour extraire les données de la feuille de calcul de la question est

    https://spreadsheets.google.com/feeds/list/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/2/public/full

    Une requête HTTP GET à cette URL renvoie ces données au format XML. (Je n'ai pas trouvé de moyen d'obtenir les données au format JSON.)

  4. Les protections habituelles contre les demandes intersites rendent difficile l'accès aux données via des appels JavaScript XML RPC dans une application Web. Une façon de contourner ce problème consiste à proxy les appels API via le serveur Web ( par exemple en utilisant la directive proxy_pass de nginx ).

Les étapes ci-dessus sont au moins une solution partielle au problème de la question. La seule difficulté est que les données sont renvoyées en XML plutôt qu'en JSON. La documentation de l'API ne mentionnant pas JSON, il n'est peut-être plus possible d'extraire les données dans ce format?

22
jochen

Si vous souhaitez utiliser la dernière API (v4), vous devrez effectuer les opérations suivantes:

  1. Générez une clé API de feuilles de calcul (voir les instructions ci-dessous).
  2. Rendez votre feuille accessible au public.
  3. Utilisez une demande du formulaire:

    https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/RANGE?key=API_KEY
    

Vous obtiendrez alors une réponse JSON propre:

{
  "range": "Sheet1!A1:D5",
  "majorDimension": "ROWS",
  "values": [
    ["Item", "Cost", "Stocked", "Ship Date"],
    ["Wheel", "$20.50", "4", "3/1/2016"],
    ["Door", "$15", "2", "3/15/2016"],
    ["Engine", "$100", "1", "30/20/2016"],
    ["Totals", "$135.5", "7", "3/20/2016"]
  ],
}

Notez que si vous souhaitez spécifier l'intégralité du contenu d'une page, un identifiant tel que Sheet1 est parfaitement valide .

Voir Lecture de base pour plus d'informations.


À partir de l'API v4, toutes les demandes doivent être accompagnées d'un identifiant (par exemple, clé API):

Les demandes de données publiques à l'API Google Sheets doivent être accompagnées d'un identifiant, qui peut être une clé API ou un jeton d'accès.

Suivez les étapes du document lié pour créer une clé API sur la page d'informations d'identification .

Assurez-vous de:

  1. Créez une nouvelle application sur Google Cloud Platform.
  2. Créez une nouvelle clé API.
  3. Ajoutez l'API Google Sheets. (Gestionnaire d'API> Tableau de bord> Activer l'API)

Notez que vous pouvez toujours accéder aux données publiques sans forcer l'utilisateur à se connecter:

Dans la nouvelle API Sheets v4, il n'y a pas de déclaration explicite de visibilité. Les appels API sont effectués à l'aide d'ID de feuille de calcul. Si l'application n'a pas l'autorisation d'accéder à la feuille de calcul spécifiée, une erreur est renvoyée. Sinon, l'appel se poursuit.

Notez que vous n'avez pas besoin de publier la feuille sur le Web. Tout ce que vous devez faire est de vous assurer que toute personne disposant du lien peut accéder à la feuille.

(C'est-à-dire lorsque vous cliquez sur Créer des informations d'identification sur l'API Google Sheets, choisissez Autre non UI, Données utilisateur, et il est dit "Les données utilisateur ne sont pas accessibles à partir de une plate-forme sans interface utilisateur, car elle nécessite une interaction de l'utilisateur pour la connexion. "vous pouvez ignorer ce message en toute sécurité. La clé API est tout ce dont vous avez vraiment besoin, car il s'agit de données publiques.)


Messages d'erreur courants:

Il manque une clé API valide à la demande.

Vous n'avez pas inclus le key= param dans votre appel.

Clé API non valide. Veuillez transmettre une clé API valide. Console des développeurs Google

Vous avez fourni une clé API incorrecte. Assurez-vous d'avoir correctement tapé votre clé. Si vous n'avez pas encore de clé, accédez à la console des développeurs Google et créez-en une.

Clé API introuvable. Veuillez transmettre une clé API valide.
Clé API de la console développeur de Google

Votre clé API est probablement correcte, mais vous n'avez probablement pas ajouté l'autorisation Google Sheets. Accédez à la page de clé de l'API de la console de développeur Google et ajoutez l'autorisation de feuilles.

L'appelant n'a pas la permission

Votre feuille n'est pas configurée pour être accessible au public.

39
Senseful

Voici comment obtenir le JSON en utilisant ces mêmes paramètres d'URL:

"https://spreadsheets.google.com/feeds/list/" + spreadsheetID + "/od6/public/values?alt=json";

Crédits à @jochen sur la réponse avec le chemin jusqu'au XML "https://spreadsheets.google.com/feeds/list/" + spreadsheetID + "/od6/public/" + sheetID;

Comme l'explique la réponse de @ jochen, ce sheetID est basé sur l'ordre des feuilles dans la feuille de calcul.

5
bomberjackets