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. | + | |
- | + |