Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente | |||
| technique:python:api_python [2023/02/14 20:55] – francoisa | technique:python:api_python [2024/04/02 15:08] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== API en Python ====== | + | **Cette page est obsolète. Veuillez accéder au contenu à son nouvel emplacement : [[https://bibliotech.cemea.org/books/outils-technique/page/ |
| - | + | ||
| - | [[https:// | + | |
| - | + | ||
| - | ===== Cas de Mailgun ===== | + | |
| - | + | ||
| - | [[https://documentation.mailgun.com/en/latest/api-events.html# | + | |
| - | + | ||
| - | 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, | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Clef de Session | + | |
| - | + | ||
| - | request.post : pour lancer la requete | + | |
| - | + | ||
| - | < | + | |
| - | request.get(url/ | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | 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 | + | |
| - | + | ||
| - | <code python> | + | |
| - | """ | + | |
| - | import os | + | |
| - | import sys | + | |
| - | import requests | + | |
| - | if len(sys.argv) != 2: | + | |
| - | print " | + | |
| - | sys.exit(1) | + | |
| - | api_key = YOUR_API_KEY | + | |
| - | # output filename | + | |
| - | filename = " | + | |
| - | # url for retrieval | + | |
| - | domain = " | + | |
| - | key = sys.argv[1] | + | |
| - | url = " | + | |
| - | url = url % (domain, key) | + | |
| - | headers = {" | + | |
| - | # request to API | + | |
| - | r = requests.get(url, | + | |
| - | if r.status_code == 200: | + | |
| - | with open(filename, | + | |
| - | message.write(r.json()[" | + | |
| - | os.system(" | + | |
| - | else: | + | |
| - | print "Oops! Something went wrong: %s" % r.content | + | |
| - | + | ||
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Pour les bounces | + | |
| - | + | ||
| - | < | + | |
| - | def get_bounces (): | + | |
| - | | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | On peut varier les endpoints (events…) | + | |
| - | + | ||
| - | Et la réponse reçue : | + | |
| - | + | ||
| - | <code python> | + | |
| - | 200 | + | |
| - | { | + | |
| - | " | + | |
| - | [ | + | |
| - | { | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | }, | + | |
| - | ... | + | |
| - | ], | + | |
| - | " | + | |
| - | { | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | } | + | |
| - | } | + | |
| - | + | ||
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | ===== 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 | + | |
| - | + | ||
| - | 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:// | + | |
| - | * 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. | + | |
| - | + | ||