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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #!/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:
Ce qui est normal, jusqu'ci tout va bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part { "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 }
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:
En sortie de mon script pour la boucle, j'ai ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for ((i=0; i<$nbrmessage; i++)) do statut=$variable | jq '.Data[i].Status' echo "message $statut" done
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 jq: error: i/0 is not defined at <top-level>, line 1: .Data[i].Status jq: 1 compile error message
Si je ne suis pas très clair dans mes explications, dites-moi.
Merci beaucoup
Bonne journée
Partager