Excel - intégration de données JSON via requête sur site WEB - BI/Big Data - Programmation
Marsh Posté le 06-03-2020 à 09:59:22
bemo94 a écrit : Bonjour, |
Bonjour,
Pour le coup il n'y a pas de question donc pour l'instant tu donnes l'impression de demander qu'on te programme ce que tu souhaites, ce qui n'est en effet pas le but de cette section.
L'utilisation d'Excel dépend de ce que tu souhaites faire au final, mais 1 an de données donne déjà plus de 100 000 lignes ce qui devient limite pour Excel à mon avis. L'utilisation d'une base de données semble plus appropriée mais plus lourde à mettre en place.
Pour ce qui est de l'automatisation d'Excel, l'utilisation de macros semble être la seule solution dans ton cas. L'enregistreur de macros permet d'obtenir une base, le code obtenu doit alors être nettoyé et amélioré pour augmenter l'automatisation.
Marsh Posté le 06-03-2020 à 11:31:56
+1 pour une BD. +1 pour le fait qu'il n'y a pas de questions.
Après, il suffit de faire un outil qui fera l'import des données et les exports en CSV pour les traitements dans Excel.
Marsh Posté le 06-03-2020 à 11:42:26
pas de question, pas de question.... il me semblait bien que si.... mais merci quand même de vos retours qui me donnent déjà un 1er niveau de réponse...
J'en comprends qu'il n'y a pas de solution hormis un développement ce qui n'est à priori pas dans mes cordes...
je vais regarder du coté de l'enregistreur de macro quand même...
Marsh Posté le 06-03-2020 à 12:23:04
cela dit, au cas ou quelqu'un connaitrai ce type de requete je voudrai savoir si dans la même requete je peux copier coller plusieurs appels successifs à ma source web pour récupérer en 1 seule requete plusieurs jours de données sachant qu'une requete me retourne les données d'un jour. Si oui, j'aurai juste à copier coller autant de fois que nécessaire la requete dans un éditeur en changer la date ...
la requete unitaire qui fonctionne :
let
Source = Json.Document(Web.Contents("ht tps://api.weather.com/v2/pws/history/all?stationId=xxxxxxxxxx&forma t=json&units=m&date=20200201&apiKey=xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxx" )),
#"Converti en table" = Record.ToTable(Source),
#"Value développé" = Table.ExpandListColumn(#"Conve rti en table", "Value" ),
#"Value développé1" = Table.ExpandRecordColumn(#"Val ue développé", "Value", {"stationID", "tz", "obsTimeUtc", "obsTimeLocal", "epoch", "lat", "lon", "solarRadiationHigh", "uvHigh", "winddirAvg", "humidityHigh", "humidityLow", "humidityAvg", "qcStatus", "metric"}, {"Value.stationID", "Value.tz", "Value.obsTimeUtc", "Value.obsTimeLocal", "Value.epoch", "Value.lat", "Value.lon", "Value.solarRadiationHigh" , "Value.uvHigh", "Value.winddirAvg", "Value.humidityHigh", "Value.humidityLow", "Value.humidityAvg", "Value.qcStatus", "Value.metric"}),
#"Value.metric développé" = Table.ExpandRecordColumn(#"Val ue développé1", "Value.metric", {"tempHigh", "tempLow", "tempAvg", "windspeedHigh", "windspeedLow", "windspeedAvg", "windgustHigh", "windgustLow", "windgustAvg", "dewptHigh", "dewptLow", "dewptAvg", "windchillHigh", "windchillLow", "windchillAvg", "heatindexHigh", "heatindexLow", "heatindexAvg", "pressureMax", "pressureMin", "pressureTrend", "precipRate", "precipTotal"}, {"Value.metric.tempHigh", "Value.metric.tempLow", "Value.metric.tempAvg", "Value.metric.windspeedHig h", "Value.metric.windspeedLow ", "Value.metric.windspeedAvg ", "Value.metric.windgustHigh ", "Value.metric.windgustLow" , "Value.metric.windgustAvg" , "Value.metric.dewptHigh", "Value.metric.dewptLow", "Value.metric.dewptAvg", "Value.metric.windchillHig h", "Value.metric.windchillLow ", "Value.metric.windchillAvg ", "Value.metric.heatindexHig h", "Value.metric.heatindexLow ", "Value.metric.heatindexAvg ", "Value.metric.pressureMax" , "Value.metric.pressureMin" , "Value.metric.pressureTren d", "Value.metric.precipRate", "Value.metric.precipTotal" })
in
#"Value.metric développé"
Marsh Posté le 06-03-2020 à 14:38:15
En dév, tout est possible Ce que tu veux faire s'appelle une boucle : For ou While. Tu définies une date de début et de fin. Si t'avais tout dans une BD, une seule requête SQL suffirait à tout extraire comme tu veux.
Marsh Posté le 06-03-2020 à 15:10:36
ah ça me rappelle des choses, la programmation j'ai bien connu et longtemps pratiqué, mais comme mes seules compétences dans le temps étaient le COBOL !!! ou l'assembleur IBM 360 pour ceux qui auraient connu, là je suis un peu démuni avec les VBA et autres Python ou JAVA !!!!
mais tu penses qu'avec une requete sql je pourrai y arriver ?
avec une base ACCESS je devrais donc pouvoir tenter cela, mais ça veut dire que je prépare une table avec tous les champs que veux récupérer dans la requete, et ensuite je construit la requete qui insère les données JSON dans ces champs ?...
Marsh Posté le 06-03-2020 à 15:13:37
ACCESS n'est pas une BD. Je te recommande du Mysql ou du Postgres.
1) importer les données du site via un script et l'API dans la BD.
2) écrire une petite appli ou un simple script qui extrait les données en csv
3) faire une macro qui exploite le contenu du csv dans le 1er onglet de ton fichier Excel et qui met à jour des stats/graphiques ou autres choses...
Marsh Posté le 05-03-2020 à 21:43:09
Bonjour,
je ne sais pas si c'est bien le bon endroit pour ma question mais je vais tenter quand même....
J'ai une station météo connectée au réseau Weather Underground, ses données sont récupérées via internet toutes les 5 sec environ et restituées en mode public via le site Weather Underground sous forme de graphiques.
Je voudrais les récupérer sous Excel pour éventuellement faire des statistiques spécifiques à la demande.
La récupération est possible via une API et une clé fournie par le site.
Voilà une requête permettant de récupérer les données d'un jour avec intervalles de 5 minutes donc 288 lignes de données (24 x 12 intervalles).
"https://api.weather.com/v2/pws/history/all?stationId=ABCDEFGHI&format =json&units=m&date=20200301&ap iKey=12345678901234567890xyz"
j'ai modifié le nom de station et l'APIkey ....
Via le menu données de excel et "obtenir des données" via un site Web je peux récupérer les données de la journée demandée et les intégrer dans un tableau excel.
Les problèmes que je voudrais résoudre et automatiser au maximum :
- pouvoir saisir la date dans un paramètre : ça j'y suis arrivé malgré que ça me demande de cliquer plusieurs fois pour terminer une requête et son intégration, comme je veux récupérer pratiquement 1 an d'historique, un système ou je peux lister toutes les dates et les exécuter d'un coup avec intégration serait mieux....
- intégrer à chaque fois dans le même tableau et non pas dans une feuille excel nouvelle pour chaque requête....
- obtenir toutes les colonnes ou champs d'un coup à chaque requête, là j'en obtiens 16 or il y en a 38, pour les obtenir il faut encore cliquer dans le 1er résultat pour déployer les lignes, puis cliquer pour déployer les colonnes.... bref, les obtenir d'un coup serait bien...
Après, il y a peut être d'autres solutions qu'une récupération sous excel......
Voilà j'espère avoir été suffisamment clair...
Je peux aussi ajouter des copies d'écran...