technique:python:api_python

Ceci est une ancienne révision du document !


API en Python

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>
    }
}

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)

Des outils pour tester les envois / receptions de requetes :

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
  • technique/python/api_python.1668547526.txt.gz
  • Dernière modification : 2022/11/15 22:25
  • de francoisa