IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Blocage sur la récupération d'informations depuis une API


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut Blocage sur la récupération d'informations depuis une API
    Bonjour,
    je suis débutant en python et j'ai du mal sur un sujet.
    J'interroge une API pour récupérer une liste de certificats ssl, je m'y connecte bien, et je souhaite récupérer des informations qui sont dans un tableau.

    J'y arrive bien en bash mais en python, je bloque.

    Voici mon code en python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    url = 'https://XXX.com/REST/v1/ordervalide/'
    login = 'login'
    password = 'password'
    showall = 'true'
     
    datas = {"auth": {"username": login,"password": password},"showAll": showall}
     
    print(datas)
     
    ## on envoie la requete à l'API 
    listecertificats = requests.post(url, data=datas)
    print(listecertificats.status_code)
     
    print(listecertificats.content)
     
    print(listecertificats.text)
    Mon "printdatas" est correct, a les bonnes valeurs.
    J'ai bien un code retour 200.
    Par contre mon listecertificats.content me retourne ceci .
    et mon listecertificats.text ne me retourne rien. Je ne comprends pas pourquoi j'ai cela.

    Et par conséquent, je ne peux pas récupérer les informations pour ensuite les parser car ce que je souhaite faire ensuite, c'est une boucle for pour afficher une à une les infos et afficher uniquement ce que je souhaite selon un critère.

    Quand je suis en bash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl -X POST -H "Content-Type: application/json" -d '{"auth":{"username":"login","password":"password"},"showAll":true}' https://XXX.com/REST/v1/ordervalide/ | jq
    J'ai bien la liste qui me retourne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    {
      "orders": [
        {
          "deal_number": "123456",
          "CN": "xx",
          "CertExpire": "2021-09-19 23:59:59",
          "company_address1": "",
          "etat": "En cours de validité",
          "logiciel": "Apache2"
        },
        {
          "deal_number": "123456",
          "CN": "xx",
          "CertExpire": "2021-09-19 23:59:59",
          "company_address1": "",
          "etat": "En cours de validité",
          "logiciel": "Apache2"
        },
    ....
    ]
    }
    Que me manque-t-il en python pour que cela fonctionne ?
    Merci par avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 831
    Points : 7 133
    Points
    7 133
    Par défaut
    Difficile sans pouvoir tester,

    Je dirai que showall doit prendre True comme valeur et non true, car on est dans un dictionnaire qui sera transformé en json (donc passage de True à 'true') et j'exécuterai mon post avec json=datas au lieu de data=datas.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut
    effectivement, en mettant "True" à la place de "true", j'ai quelque chose de mieux mais c'est vide.

    j'ai ceci quand j'affiche "print(listecertificats.text)"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"orders":[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]}

    j'ai testé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for cert in listecertificats.json() :
            print (cert)
    mais ça ne m'affiche que


  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 831
    Points : 7 133
    Points
    7 133
    Par défaut
    dans ton requests, il manque le header "application/json", et comme je l'ai dis précédemment, mettre json= au lieu de data=
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut
    Merci pour ton retour.

    J'ai maintenant un retour correct.

    J'ai bien remplacé json par data, j'ai mis bien un header pour préciser application/json (bien que j'en ai pas besoin car par défaut c'est json) mais le truc qui a été déterminant est le showall.
    Je l'ai mis ainsi :
    j'ai retiré les quotes

    et maintenant c'est bon, quand j'affiche le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'orders': [{'deal_number': '123456', 'CN': 'XX', 'CertExpire': '2021-09-19 23:59:59'}, {}xxx]}
    Voila, maintenant, faut que j'arrive à parcourir ce retour correctement.

    quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for cert in listecertificats.json() :
            print (cert)
    tout ce que j'ai c'est "orders"

    Je vais creuser un peu.
    Merci.

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 831
    Points : 7 133
    Points
    7 133
    Par défaut
    listecertificats.json() retourne un dictionnaire (type dict).

    Quand on itère sur le dictionnaire, on reçoit ses clés, et comme vous n'avez qu'une clé orders, on retourne bien ce qui est demandé dans ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    d = listecertificats.json()
    print(d["orders"])
    donnera une liste sur laquelle tu peux itérer avec une boucle.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/08/2007, 11h10
  2. Récupération du poids depuis une balance
    Par vallgui dans le forum Périphériques
    Réponses: 28
    Dernier message: 21/06/2007, 09h04
  3. Réponses: 1
    Dernier message: 26/02/2007, 09h44
  4. [VB.NET 2005] thread & récupération d'information d'une form
    Par Persons dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/09/2006, 23h43
  5. [C# express 2005] Récupération d'information dans une BDD
    Par poussinphp dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/05/2006, 22h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo