Bonjour à tous
J'ai un script dans lequel je fait des curl sur une api mailjet. Afin de récupérer certaines informations.
Voici mon script:
#!/bin/bash
ziprep="/home/batches/dev/compobatch/sendmail/"
zipfile=$ziprep\*.zip
campagne=$(basename ${zipfile} | cut -d '_' -sf1)
echo $campagne
#1ère étape: Appel de l'api pour trouver l'id de la campagne
id=$(curl -s -X GET --user "XXXXXXXXX:XXXXXXXXX" https://api.mailjet.com/v3/REST/campaign?CustomCampaign=$campagne | jq '.Data[0].ID')
echo "voici: $id"
#2ère étape: Appel de l'api
variable=$(curl -s -X GET --user "XXXXXXXXX:XXXXXXXXX" https://api.mailjet.com/v3/REST/message?Campaign=$id)
echo "revoici: $variable"
#3ème étape: Générer le fichier csv
datecsv=$(date +%Y%m%d%H%M%S)
echo "Status;Date d'envoi" > MAILJET_RETOUR_"$id"_"$datecsv".csv
#nbrmessage=$variable | jq '.Count'
nbrmessage=$(curl -s -X GET --user "XXXXXXXXX:XXXXXXXXX" https://api.mailjet.com/v3/REST/message?Campaign=$id | jq '.Count')
echo "count $nbrmessage"
for ((i=0; i<$nbrmessage; i++))
do
statut=$variable | jq '.Data[0].Status'
echo "message $statut"
done
Dans mon premier curl, j'arrive bien à afficher ma variable id, et afficher sa valeur. Quand je lance le second curl, il me retourne ceci:
{ "Count" : 4, "Data" : [{ "ArrivedAt" : "2021-03-03T08:15:15Z", "AttachmentCount" : 0, "AttemptCount" : 0, "CampaignID" : 7654780542, "ContactAlt" : "", "ContactID" : 46955856, "Delay" : 0, "DestinationID" : 13432928, "FilterTime" : 0, "ID" : 92886742930108178, "IsClickTracked" : false, "IsHTMLPartIncluded" : false, "IsOpenTracked" : true, "IsTextPartIncluded" : false, "IsUnsubTracked" : false, "MessageSize" : 972770, "SenderID" : 6453703745, "SpamassassinScore" : 0, "SpamassRules" : "", "StatePermanent" : false, "Status" : "sent", "Subject" : "", "UUID" : "bc60344f-2b8f-4bf7-8820-118550386009" }, { "ArrivedAt" : "2021-03-03T08:15:11Z", "AttachmentCount" : 0, "AttemptCount" : 0, "CampaignID" : 7654780542, "ContactAlt" : "", "ContactID" : 46955856, "Delay" : 0, "DestinationID" : 13432928, "FilterTime" : 0, "ID" : 95420017728093675, "IsClickTracked" : false, "IsHTMLPartIncluded" : false, "IsOpenTracked" : true, "IsTextPartIncluded" : false, "IsUnsubTracked" : false, "MessageSize" : 972798, "SenderID" : 6453703745, "SpamassassinScore" : 0, "SpamassRules" : "", "StatePermanent" : false, "Status" : "sent", "Subject" : "", "UUID" : "ae4ab34f-e13d-4dda-960f-b03f9f17156f" }, { "ArrivedAt" : "2021-03-03T08:15:15Z", "AttachmentCount" : 0, "AttemptCount" : 0, "CampaignID" : 7654780542, "ContactAlt" : "", "ContactID" : 46955856, "Delay" : 0, "DestinationID" : 13432928, "FilterTime" : 0, "ID" : 92042318010622907, "IsClickTracked" : false, "IsHTMLPartIncluded" : false, "IsOpenTracked" : true, "IsTextPartIncluded" : false, "IsUnsubTracked" : false, "MessageSize" : 972696, "SenderID" : 6453703745, "SpamassassinScore" : 0, "SpamassRules" : "", "StatePermanent" : false, "Status" : "sent", "Subject" : "", "UUID" : "97859cb1-93ba-4206-b044-06e6e3ca1168" }, { "ArrivedAt" : "2021-03-03T08:15:10Z", "AttachmentCount" : 0, "AttemptCount" : 0, "CampaignID" : 7654780542, "ContactAlt" : "", "ContactID" : 46955856, "Delay" : 0, "DestinationID" : 13432928, "FilterTime" : 0, "ID" : 95701492698544310, "IsClickTracked" : false, "IsHTMLPartIncluded" : false, "IsOpenTracked" : true, "IsTextPartIncluded" : false, "IsUnsubTracked" : false, "MessageSize" : 972724, "SenderID" : 6453703745, "SpamassassinScore" : 0, "SpamassRules" : "", "StatePermanent" : false, "Status" : "sent", "Subject" : "", "UUID" : "a0125ec6-fdd2-466c-ba5e-eb0945357b81" }], "Total" : 4 }
Ce qui est normal, jusqu'ci tout va bien.
Il affiche les infos pour les 4 mails que j'ai envoyés.
Ensuite, je souhaite afficher avec une boucle, uniquement l'information status, ArrivedAt et l'ID. (je les ai mis en gras dans le résultat juste au dessus).
Pour cela, je fais un curl à nouveau, et je récupère l'info Count pour avoir le nombre de mails, ici 4 avec mon '"jq '.Count'".
Puis, je boucle pour afficher le status, ArrivedAt et ID de chaque mails. Mais c'est la que j'ai un petit soucis, quand je fais ceci avec ma boucle:
for ((i=0; i<$nbrmessage; i++))
do
statut=$variable | jq '.Data[i].Status'
echo "message $statut"
done
En sortie de mon script pour la boucle, j'ai ceci:
jq: error: i/0 is not defined at <top-level>, line 1:
.Data[i].Status
jq: 1 compile error
message
Et la, je n'arrive pas du tout à voir comprendre comment récupérer les informations. Donc si quelqu'un à une info, je suis preneur
Si je ne suis pas très clair dans mes explications, dites-moi.
Merci beaucoup
Bonne journée