#1 Le 27/12/2020, à 09:36
- bismuth
[RESOLU] API, JQ export csv
Bonjour,
j'aimerai récupérer des infos d'une API et les exporter au format csv. Je n'y connais pas grand chose et j'ai passé plus de 3h hier pour ce piètre résultat :-(
Voilà mon script :
curl -s 'https://api.jcdecaux.com/vls/v3/stations/4009?contract=lyon&apiKey=7cac7a43f504aceb28611cd25c6626c4075645eb' | jq '.number,.lastUpdate,.mainStands.capacity,.mainStands.availabilities.mechanicalBikes,.mainStands.availabilities.electricalBikes' | jq -r > call.csv
ça a l'air de fonctionner, malheureusement, les données sont exportées sous ce format :
et j'aimerai que ça soit sous cette forme :
questions complémentaires :
- peut-on mettre un entête aux colonnes ?
- comment faire en sorte que qu'à chaque fois que le script se lance, il incrémente une nouvelle ligne dans le tableau ?
- Est-il possible de mettre la date en forme afin qu'elle soit facilement exploitable ultérieurement ?
Merci beaucoup et bonne journée :-)
ps : je suis également preneur de doc si vous avez ça ;-)
Dernière modification par bismuth (Le 27/12/2020, à 19:28)
Hors ligne
#2 Le 27/12/2020, à 12:28
- Watael
Re : [RESOLU] API, JQ export csv
salut,
regarde ce que peut faire @csv.
les en-têtes, tu peux les ajouter "en dur".
pour la date, il faut préciser ce que tu veux.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 27/12/2020, à 12:57
- bismuth
Re : [RESOLU] API, JQ export csv
J'ai tenté ça :
curl -s 'https://api.jcdecaux.com/vls/v3/stations/4009?contract=lyon&apiKey=7cac7a43f504aceb28611cd25c6626c4075645eb' | jq '.number[] | .lastUpdate[] | @csv' | jq -r > call.csv
mais j'ai une erreur :
jq: error (at <stdin>:0): Cannot iterate over number (4009)
pour la date, un format standard style "jj/mm/aaaa hh:mm". une fois que j'aurai suffisamment de données, j'aurai des TCD à faire, donc il faut que ça soit reconnu par excel
Hors ligne
#4 Le 27/12/2020, à 14:16
- Watael
Re : [RESOLU] API, JQ export csv
$ curl -s 'https://api.jcdecaux.com/vls/v3/stations/4009?contract=lyon&apiKey=7cac7a43f504aceb28611cd25c6626c4075645eb' | jq -r '["Number","lastUpdate","Capacity","mechaBikes","electricBikes"],[.number, (.la
stUpdate |fromdate|strftime("%F %T")), .mainStands.capacity, .mainStands.availabilities.mechanicalBikes, .mainStands.availabilities.electricalBikes]|@csv'
"Number","lastUpdate","Capacity","mechaBikes","electricBikes"
4009,"2020-12-27 13:07:08",14,3,3
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 27/12/2020, à 17:15
- bismuth
Re : [RESOLU] API, JQ export csv
C'est super Watael, ça marche nickel.
j'ai rajouté > call.csv pour exporter.
En revanche, je n'ai pas l'impression que ça incrémente le fichier mais que ça écrase à chaque fois.
Tu as une idée pour remédier à ça ?
Hors ligne
#6 Le 27/12/2020, à 17:55
- bismuth
Re : [RESOLU] API, JQ export csv
j'ai avancé un peu sur mon code car l'idée est de récupérer les données de plusieurs stations :
#!/bin/bash
# Tableau des stations à surveiller : 4002, 4009, 4021, 10101, 10008
declare -a station=(4009 4002 4021 10101 10008)
# Boucle de consultation des stations
for var in "${!station[@]}" ; do
curl -s 'https://api.jcdecaux.com/vls/v3/stations/'${station[$var]}'?contract=lyon&apiKey=7cac7a43f504aceb28611cd25c6626c4075645eb' | jq -r '["Number","lastUpdate","Capacity","mechaBikes","electricBikes"],[.number, (.lastUpdate |fromdate|strftime("%F%T")), .mainStands.capacity, .mainStands.availabilities.mechanicalBikes, .mainStands.availabilities.electricalBikes]|@csv' > call.csv
done
Malheureusement, je n'arrive toujours pas à incrémenter le fichier csv avec les nouvelles valeurs, ça les écrase
Hors ligne
#7 Le 27/12/2020, à 18:41
- Watael
Re : [RESOLU] API, JQ export csv
deux solutions :
- rediriger la sortie de la boucle for
- utiliser l'opérateur d'ajout (pas incrémentation ) : >>
PS:
for station_ in "${stationS[@]}"
préférer donner des noms évocateurs de ce qu'elle contient à une variable : on boucle sur chaque station de la liste des stations.
Dernière modification par Watael (Le 27/12/2020, à 18:42)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 27/12/2020, à 19:27
- bismuth
Re : [RESOLU] API, JQ export csv
Merci pour ton aide. Je pose mon script ici si jamais ça peut servir à quelqu'un :-)
#!/bin/bash
# Tableau des stations à surveiller : 4002, 4009, 4021, 10101, 10008
declare -a station=(4009 4002 4021 10101 10008)
# Boucle de consultation des stations
for station in "${!stationS[@]}" ; do
curl -s 'https://api.jcdecaux.com/vls/v3/stations/'${stationS[$station]}'?contract=lyon&apiKey=7cac7a43f504aceb28611cd25c6626c4075645eb' | jq -r '[.number, (.lastUpdate |fromdate|strftime("%d/%m/%Y %T")), .mainStands.capacity, .mainStands.availabilities.mechanicalBikes, .mainStands.availabilities.electricalBikes]|@csv'
done >> call.csv
Il ne me reste plus qu'à le mettre sur mon NAS et réussir à le faire tourner avec une tache de planification
Hors ligne