J'utilise Apps Script dans Google Sheets pour importer du JSON à partir de Google Analytics. J'ai déjà utilisé la fonction ImportJSON pour obtenir facilement le JSON à partir d'une API ouverte utilisant simplement =ImportJSON(url)
dans une cellule. Étant donné que j'utilise Apps Script pour autoriser les éléments de l'API Analytics (tout cela fonctionne correctement), je l'utilise également pour insérer les données JSON dans ma feuille. ImportJSON renvoie un tableau à deux dimensions contenant les données, la première ligne contenant des en-têtes. Cependant, j'ai du mal à obtenir l'étendue des données afin de pouvoir ajouter les valeurs à la feuille.
C'est ce que j'ai
function makeRequest() {
var analyticsService = getAnalyticsService();
var apiUrl = 'https://www.googleapis.com/analytics/v3/data/ga?ids=removed&start-date=30daysAgo&end-date=yesterday&metrics=ga%3AuniquePageviews&dimensions=ga%3ApagePath&sort=-ga%3AuniquePageviews&filters=ga%3ApagePath%3D%40%2FKnowledgeBank%2FFactsheetForFarmers.aspx&max-results=10&access_token=' + analyticsService.getAccessToken()
var sheet = SpreadsheetApp.getActiveSheet();
var jsonData = ImportJSON(apiUrl);
var cell = sheet.getRange(jsonData.length,jsonData[0].length);
cell.setValues(jsonData);
}
L'erreur que j'obtiens est . La hauteur de la plage est incorrecte. Elle était de 3 mais devrait être de 1 .
Comme l'a souligné JPV, la ligne
var jsonData = ImportJSON(apiUrl);
n'est pas valide dans le script d'applications (à moins que vous n'ayez défini la fonction ImportJSON
quelque part). Pour extraire quelque chose d'une URL externe dans le script Apps, on utilise UrlFetchApp
. Donc, la ligne pourrait être
var jsonData = JSON.parse(UrlFetchApp.fetch(apiUrl).getContentText());
Après cela, jsonData est un objet JavaScript analysé à partir de la chaîne JSON renvoyée par le serveur. Pour l'importer dans une feuille de calcul, il faut créer un tableau double approprié pour passer à setValues
. Comment faire cela dépend de la structure de l'objet.
Le pullJSON Gist que vous avez référencé donne un modèle simple de ce processus, qui fonctionne lorsque jsonData est déjà un tableau. Mais différentes API fonctionnent différemment: par exemple, l'API Stack Exchange renvoie un objet avec plusieurs propriétés "wrapper", dont l'une est items
qui contient un tableau d'objets d'intérêt. Donc, dans ce cas, on ferait une boucle sur les éléments de jsonData.items
, en extrayant les propriétés de chaque objet du tableau et en les poussant dans un double tableau.