Ceci est une ancienne révision du document !
API en Python
Cas de Mailgun
https://documentation.mailgun.com/en/latest/api-events.html#events
jsonrpc
1 endroit, 1 méthode, des paramètres
import json import requests
On créer une sesssion (si plusieurs simultannée)
session= LSession(url,api,key)
Clef de Session
request.post : pour lancer la requete
request.get(url/endpoint)
Le endpoint définit ce que l'on veut.
json(string) → renvoie un dictionnaire
request.json() → renvoie un dictionnaire
def get-logs renvoie une reponse de type response
response.json() : est un dictionnaire.
Exemple python fourni par mailGun :
"""View a message using its Mailgun storage key.""" import os import sys import requests if len(sys.argv) != 2: print "Usage: retrieve.py message_key" sys.exit(1) api_key = YOUR_API_KEY # output filename filename = "message.eml" # url for retrieval domain = "mailgun.com" key = sys.argv[1] url = "https://api.mailgun.net/v3/domains/%s/messages/%s" url = url % (domain, key) headers = {"Accept": "message/rfc2822"} # request to API r = requests.get(url, auth=("api", api_key), headers=headers) if r.status_code == 200: with open(filename, "w") as message: message.write(r.json()["body-mime"]) os.system("thunderbird -file %s" % filename) else: print "Oops! Something went wrong: %s" % r.content
Pour les bounces
def get_bounces (): return requests.get("https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/bounces",auth=("api","YOUR_API_KEY"))
On peut varier les endpoints (events…)
Et la réponse reçue :
200 { "items": [ { "address": "alice@example.com", "code": "550", "error": "No such mailbox", "created_at": "Fri, 21 Oct 2011 11:02:55 GMT" }, ... ], "paging": { "first": <first page URL>, "next": <next page URL>, "previous": <previous page URL>, "last": <last page URL> } }
Cas de l'API de Garradin
Pour utiliser l'API de Garradin, on peut tester avec curl en utilisant l'option “curl –trace-ascii -
” pour voir le contenu des échanges :
=> Send header, 233 bytes (0xe9) 0000: POST /api/sql/ HTTP/1.1 0019: Host: assos-zourit-net.garradin.eu 003d: Authorization: Basic XXXX 007c: User-Agent: curl/7.81.0 0095: Accept: */* 00a2: Content-Length: 50 00b6: Content-Type: application/x-www-form-urlencoded 00e7: => Send data, 50 bytes (0x32) 0000: SELECT * FROM membres where domaine LIKE "%peak%";
La requête en python doit passer en mode POST (selon la doc) et utiliser l'option “data” pour passer le contenu exact de la requête en mode POST.
En mode GET, utiliser l'options “params”.
import requests from requests.auth import HTTPBasicAuth URL='https://assos-zourit-net.garradin.eu/api/sql/' reponse = requests.post(URL,auth=HTTPBasicAuth('userapi', 'motdepasseAPI'),data='SELECT * FROM membres where domaine LIKE "%truc%";') print(reponse.json())
On peut utiliser la methode prepare()
pour voir le contenu exact des datas envoyés :
prepared = requests.Request('POST',URL,auth=HTTPBasicAuth('XX', 'XX'),data={'q': 'SELECT * FROM membres where domaine LIKE "%peak%";'}).prepare() print(prepared.body)
Tests requêtes / résultats JSON
Des outils pour tester les envois / receptions de requetes :
- https://webhook.site : pour tester le résultat reçu puor un webhook en json
- https://postb.in/ pour voir le résultat des headers et le début du json (mais pas tout)
- http://requestbin.net/ : pour le résultat en ligne (pour curl par exemple)
- https://bin.webhookrelay.com : un autre Json complet
- Avec curl :
curl -v -i -X POST -H "Content-Type: application/json" --data '{ "username": "siel", "password": "blarblarf" }' "https://cemea.axelor.com/graf/login.jsp"
- avec httpie (paquet à installer) et un fichier d'une requete json dans un fichier.json :
http POST monurl.org/post <fichier.json
Voir la doc complète https://httpie.org/docs#json par exemple :
echo '{"hello": "world"}' | http POST monurl.org/post