Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
technique:python:api_python [2020/02/03 16:27] – créée francoisa | technique:python:api_python [2023/02/14 20:55] – francoisa | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== API en Python ====== | ====== API en Python ====== | ||
+ | |||
+ | [[https:// | ||
===== Cas de Mailgun ===== | ===== Cas de Mailgun ===== | ||
- | https:// | + | [[https:// |
jsonrpc | jsonrpc | ||
1 endroit, 1 méthode, des paramètres | 1 endroit, 1 méthode, des paramètres | ||
+ | < | ||
import json | import json | ||
import requests | import requests | ||
+ | |||
+ | </ | ||
On créer une sesssion (si plusieurs simultannée) | On créer une sesssion (si plusieurs simultannée) | ||
+ | < | ||
session= LSession(url, | session= LSession(url, | ||
+ | |||
+ | </ | ||
Clef de Session | Clef de Session | ||
Ligne 21: | Ligne 29: | ||
request.post : pour lancer la requete | request.post : pour lancer la requete | ||
+ | < | ||
request.get(url/ | request.get(url/ | ||
+ | |||
+ | </ | ||
Le endpoint définit ce que l'on veut. | Le endpoint définit ce que l'on veut. | ||
- | json(string) | + | json(string) |
- | request.json() | + | request.json() |
- | def get-logs | + | def get-logs renvoie une reponse de type response |
response.json() : est un dictionnaire. | response.json() : est un dictionnaire. | ||
Ligne 35: | Ligne 46: | ||
Exemple python fourni par mailGun : | Exemple python fourni par mailGun : | ||
- | < | + | < |
""" | """ | ||
import os | import os | ||
Ligne 60: | Ligne 71: | ||
else: | else: | ||
print "Oops! Something went wrong: %s" % r.content | print "Oops! Something went wrong: %s" % r.content | ||
+ | |||
</ | </ | ||
Ligne 66: | Ligne 78: | ||
< | < | ||
- | def | + | def get_bounces (): |
- | get_bounces | + | |
- | (): | + | |
- | return | + | |
- | requests | + | |
- | . | + | |
- | get | + | |
- | ( | + | |
- | " | + | |
- | , | + | |
- | auth | + | |
- | = | + | |
- | ( | + | |
- | " | + | |
- | , | + | |
- | " | + | |
- | )) | + | |
</ | </ | ||
+ | |||
+ | On peut varier les endpoints (events…) | ||
Et la réponse reçue : | Et la réponse reçue : | ||
- | < | + | < |
200 | 200 | ||
{ | { | ||
Ligne 109: | Ligne 108: | ||
} | } | ||
} | } | ||
+ | |||
</ | </ | ||
- | A détailler... | + | ===== Cas de l'API de Garradin ===== |
+ | |||
+ | Pour utiliser l' | ||
+ | < | ||
+ | |||
+ | => Send header, 233 bytes (0xe9) | ||
+ | 0000: POST /api/sql/ HTTP/1.1 | ||
+ | 0019: Host: assos-zourit-net.garradin.eu | ||
+ | 003d: Authorization: | ||
+ | 007c: User-Agent: curl/ | ||
+ | 0095: Accept: */* | ||
+ | 00a2: Content-Length: | ||
+ | 00b6: Content-Type: | ||
+ | 00e7: | ||
+ | => Send data, 50 bytes (0x32) | ||
+ | 0000: SELECT * FROM membres where domaine LIKE " | ||
+ | |||
+ | </ | ||
+ | |||
+ | La requête en python doit passer en mode POST (selon la doc) et utiliser l' | ||
+ | |||
+ | En mode GET, utiliser l' | ||
+ | |||
+ | < | ||
+ | import requests | ||
+ | from requests.auth import HTTPBasicAuth | ||
+ | URL=' | ||
+ | |||
+ | reponse = requests.post(URL, | ||
+ | print(reponse.json()) | ||
+ | |||
+ | </ | ||
+ | |||
+ | On peut utiliser la methode '' | ||
+ | < | ||
+ | prepared = requests.Request(' | ||
+ | print(prepared.body) | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Tests requêtes / résultats JSON ===== | ||
+ | |||
+ | Des outils pour tester les envois / receptions de requetes : | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * Avec curl : | ||
+ | < | ||
+ | |||
+ | curl -v -i -X POST -H " | ||
+ | |||
+ | </ | ||
+ | |||
+ | * avec [[https:// | ||
+ | < | ||
+ | |||
+ | http POST monurl.org/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Voir la doc complète [[https:// | ||
+ | |||
+ | <code bash> | ||
+ | echo ' | ||
+ | |||
+ | |||
+ | </ | ||
+ | ===== Utilisation de json dans une requête sur une API avec un json complexe en python ===== | ||
+ | |||
+ | Exemple avec petit-rapporteur : | ||
+ | < | ||
+ | |||
+ | jsontext = """ | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ] | ||
+ | }""" | ||
+ | |||
+ | </ | ||
+ | |||
+ | Et la requête : | ||
+ | |||
+ | < | ||
+ | r = requests.post(apiurl, | ||
+ | print(r.text) | ||
+ | data = r.json() | ||
+ | |||
+ | </ | ||
+ | |||
+ | json.loads : transforme une string au format long en format json. | ||