technique:python:api_python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
technique:python:api_python [2020/02/03 16:27] – créée francoisatechnique:python:api_python [2023/02/14 20:55] francoisa
Ligne 1: Ligne 1:
 ====== API en Python ====== ====== API en Python ======
 +
 +[[https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/doku.php/stu:python_reseau:webapis|https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/doku.php/stu:python_reseau:webapis]]
  
 ===== Cas de Mailgun ===== ===== Cas de Mailgun =====
  
-https://documentation.mailgun.com/en/latest/api-events.html#events+[[https://documentation.mailgun.com/en/latest/api-events.html#events|https://documentation.mailgun.com/en/latest/api-events.html#events]]
  
 jsonrpc jsonrpc
  
 1 endroit, 1 méthode, des paramètres 1 endroit, 1 méthode, des paramètres
 +<code>
  
 import json import json
  
 import requests import requests
 +
 +</code>
  
 On créer une sesssion (si plusieurs simultannée) On créer une sesssion (si plusieurs simultannée)
  
 +<code>
 session= LSession(url,api,key) session= LSession(url,api,key)
 +
 +</code>
  
 Clef de Session Clef de Session
Ligne 21: Ligne 29:
 request.post : pour lancer la requete request.post : pour lancer la requete
  
 +<code>
 request.get(url/endpoint) request.get(url/endpoint)
 +
 +</code>
  
 Le endpoint définit ce que l'on veut. Le endpoint définit ce que l'on veut.
  
-json(string) -> renvoie un dictionnaire+json(string) → renvoie un dictionnaire
  
-request.json() -> renvoie un dictionnaire+request.json() → renvoie un dictionnaire
  
-def get-logs  renvoie une reponse de type response+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 :
  
-<code>+<code python>
 """View a message using its Mailgun storage key.""" """View a message using its Mailgun storage key."""
 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
 +
  
 </code> </code>
Ligne 66: Ligne 78:
  
 <code> <code>
-def +def get_bounces (): 
-get_bounces +     return requests.get("https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/bounces",auth=("api","YOUR_API_KEY"))
-(): +
-return +
-requests +
-. +
-get +
-( +
-"https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/bounces" +
-, +
-auth +
-= +
-( +
-"api" +
-, +
-"YOUR_API_KEY" +
-))+
  
 </code> </code>
 +
 +On peut varier les endpoints (events…)
  
 Et la réponse reçue : Et la réponse reçue :
  
-<code>+<code python>
 200 200
 { {
Ligne 109: Ligne 108:
     }     }
 } }
 +
  
 </code> </code>
  
-A détailler...+===== Cas de l'API de Garradin ===== 
 + 
 +Pour utiliser l'[[https://fossil.kd2.org/garradin/wiki?name=API|API de Garradin]], on peut tester avec curl en utilisant l'option "''curl –trace-ascii -''" pour voir le contenu des échanges : 
 +<code> 
 + 
 +=> Send header, 233 bytes (0xe9) 
 +0000: POST /api/sql/ HTTP/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%"; 
 + 
 +</code> 
 + 
 +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"
 + 
 +<code> 
 +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()) 
 + 
 +</code> 
 + 
 +On peut utiliser la methode ''prepare()'' pour voir le contenu exact des datas envoyés : 
 +<code> 
 +prepared = requests.Request('POST',URL,auth=HTTPBasicAuth('XX', 'XX'),data={'q': 'SELECT * FROM membres where domaine LIKE "%peak%";'}).prepare() 
 +print(prepared.body) 
 + 
 +</code> 
 + 
 +===== Tests requêtes / résultats JSON ===== 
 + 
 +Des outils pour tester les envois / receptions de requetes : 
 + 
 +  * [[https://webhook.site|https://webhook.site]] : pour tester le résultat reçu puor un webhook en json 
 +  * [[https://postb.in/|https://postb.in/]] pour voir le résultat des headers et le début du json (mais pas tout) 
 +  * [[http://requestbin.net/|http://requestbin.net/]] : pour le résultat en ligne (pour curl par exemple) 
 +  * [[https://bin.webhookrelay.com|https://bin.webhookrelay.com]] : un autre Json complet 
 +  * Avec curl : 
 +<code> 
 + 
 +curl -v -i -X POST -H "Content-Type: application/json" --data '{ "username": "siel", "password": "blarblarf" }' "https://cemea.axelor.com/graf/login.jsp" 
 + 
 +</code> 
 + 
 +  * avec [[https://httpie.org|httpie]] (paquet à installer) et un fichier d'une requete json dans un fichier.json : 
 +<code> 
 + 
 +http POST monurl.org/post <fichier.json 
 + 
 +</code> 
 + 
 +Voir la doc complète [[https://httpie.org/docs#json|https://httpie.org/docs#json]] par exemple : 
 + 
 +<code bash> 
 +echo '{"hello": "world"}' | http POST monurl.org/post 
 + 
 + 
 +</code> 
 +===== Utilisation de json dans une requête sur une API avec un json complexe en python ===== 
 + 
 +Exemple avec petit-rapporteur : 
 +<code> 
 + 
 +jsontext = """
 +    "comment": "CPO EN 2023 v2 - Accès MONAT", 
 +    "policies":
 +    { 
 +        "report_id": "MONRAPPORT", 
 +        "field_id": "*", 
 +        "actions":
 +          "report:read", 
 +          "report:write" 
 +        ], 
 +        "filters":
 +            { 
 +            "field_name": "AT", 
 +            "field_data": "MONAT" 
 +            } 
 +        ] 
 +    } 
 +    ] 
 +    }""" 
 + 
 +</code> 
 + 
 +Et la requête : 
 + 
 +<code> 
 +r = requests.post(apiurl, json=json.loads(jsontext), headers=headers) 
 +print(r.text) 
 +data = r.json() 
 + 
 +</code> 
 + 
 +json.loads : transforme une string au format long en format json. 
  
  • technique/python/api_python.txt
  • Dernière modification : 2024/04/02 15:08
  • de 127.0.0.1