[API] importation Selective ==> Totale
Bonjour,
Jusqu'à présent j'utilisais des données API en fonction de ce que je voulais sur mon sheet avec ce script
function API() {
var urlAPI = "https://api.realt.community/v1/token";
var classeurAPI = SpreadsheetApp.getActiveSpreadsheet();
var feuilleAPI = classeurAPI.getSheetByName('API1');
var response = UrlFetchApp.fetch(urlAPI, {
"method": "GET",
"headers": {
"accept":"<*/*>",
"X-AUTH-REALT-TOKEN": "____Ma clé API______",
"Content-Type": "application/json"
}
});
var output = [];
var json = response.getContentText();
var Data = JSON.parse(json);
for (let i in Data) {
var xDaiContract = Data[i].blockchainAddresses.xDai.contract
var ethereumContract = Data[i].blockchainAddresses.ethereum.contract
var fullname = Data[i].fullName
output.push([fullname, xDaiContract, ethereumContract]);
}
if (output.length > 0) {
feuilleAPI.getRange(2, 1, output.length, output[0].length).setValues(output);
}
}
avec ce résultat
j'ai toujours fais comme ça ! et je me demande les modifications à apporter sur le script pour avoir tout d'un coup.
mes premiers résultats n'ont pas été convaincant…
ça manque clairement de structuration
Merci !
Tu veux la totale ? ensuite tu iras à la pèche :
mets =API2()
dans une cellule
function API2() {
var urlAPI = "https://api.realt.community/v1/token";
var classeurAPI = SpreadsheetApp.getActiveSpreadsheet();
var feuilleAPI = classeurAPI.getSheetByName('API1');
var response = UrlFetchApp.fetch(urlAPI, {
"method": "GET",
"headers": {
"accept":"<*/*>",
"X-AUTH-REALT-TOKEN": "############################",
"Content-Type": "application/json"
}
});
var output = [];
var json = response.getContentText();
var data = JSON.parse(json);
recursion(data)
function recursion(obj, path) {
if (path == undefined) { path = 'data' }
const regex = new RegExp('[^0-9]+');
for (let p in obj) {
let newPath = (regex.test(p)) ? path + '.' + p : path + '[' + p + ']';
if (obj[p] != null) {
if (typeof obj[p] != 'object' && typeof obj[p] != 'function') {
output.push([newPath, p, obj[p]]);
}
if (typeof obj[p] == 'object') {
recursion(obj[p], newPath);
}
}
}
}
return output
}
Tu veux la totale ? ensuite tu iras à la pèche :
Oui C'est le but !
il y a souvent des ajouts et ça m'évite de m'éparpiller
Ce script est top, en revanche je vais faire le difficile...
je pensais pouvoir conserver le format en colonnes comme c'est le cas actuellement
PS : je vais garder celui-ci qui est rapidement utilisable pour avoir la dénomination des nouveaux éléments ( 1ere colonne )
Tu veux la totale ? ensuite tu iras à la pèche :
Oui C'est le but !
je vais faire le difficile...je pensais pouvoir conserver le format en colonnes comme c'est le cas actuellement
avec un json, on ne sait pas toujours où l'on va, la façon la plus souple est d'abord de faire l'inventaire à la prévert, après on peut composer, mais remarque qu'il y a des dépendances multiples d'un item
ça va simplement complexifier mes recherches et mes autres tableaux
je me demande comment les extensions google sheet pour les API gèrent les importations. car j'arrive a obtenir un tableau avec les en-tetes etc..
mais bon... j'aime pas les extensions... du jour au lendemain ça disparait ou ça devient payant !
Donc voici le complet en tableau, maintenant qu'on sait que la structure du niveau 1 est un array ...
Mettre =API2bis()
dans une cellule
function API2bis() {
var urlAPI = "https://api.realt.community/v1/token";
var response = UrlFetchApp.fetch(urlAPI, {
"method": "GET",
"headers": {
"accept":"<*/*>",
"X-AUTH-REALT-TOKEN": "###########################",
"Content-Type": "application/json"
}
});
var json = response.getContentText();
var obj = JSON.parse(json);
const header = Object.keys(obj[0]);
return [header, ...obj.map(o => header.map(h => Array.isArray(o[h]) ? o[h].join("\n") : o[h]))];
}
si le niveau 2 de données ne t'intéresse pas, tu peux remplacer la dernière ligne par
return [header, ...obj.map(o => header.map(h => Array.isArray(o[h]) ? '#multiple' : o[h]))];
Cela ne fonctionnera que si tous les items ont strictement la même structure