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 :

Pagination GraphQL Python


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Mars 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Mars 2018
    Messages : 27
    Par défaut Pagination GraphQL Python
    Bonjour,
    Je souhaiterai récupérer les données d'une API, le problème c'est qu'elle ne renvoie que 49 données à chaque fois.
    J'ai récupéré le startCursor, hasNextPage et endCursor mais je sais pas indiquer au script de boucler jusqu'a hasNextPage=False en s'appuyant sur le endCursor et ainsi avoir toutes les données de ma requête.
    Voici le code :
    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
    23
    24
    25
    26
    27
     
    import requests
    import json
     
    query = """
        query {
          player(slug:"lionel-andres-messi-cuccittini"){
                cards(rarities:[limited]) {
                    nodes {
                        slug
                        userOwnerWithRate {
                            from
            }
            }
          pageInfo{
            startCursor
            hasNextPage
            endCursor
        }
        }
        }
      }
    """
    url = 'https://api.sorare.com/graphql/'
    r = requests.post(url, json={'query': query})
    json_data = json.loads(r.text)
    print(json_data)
    Avez une idée pour récupérer toutes les pages d'une requête s'il vous plait?
    Merci

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 956
    Par défaut
    Il faut utiliser les options de pagination pour obtenir la suite :
    au choix :
    • first et offset
    • first et after


    Un peu de documentation :
    https://graphql.org/learn/pagination/

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Mars 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Mars 2018
    Messages : 27
    Par défaut
    Effectivement j'ai bien vue dans la documentation qu'il fallait utiliser le first. Le problème est que je ne sais pas comment l'indiquer dans Python.

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 956
    Par défaut
    first et offet/after n'ont rien à voir avec python.
    Ce sont des paramètres dans la requête Graph QL.

    Et tu as indiqué que tu arrives à récupérer la valeur de hasNextPage.
    Donc une fois que tu as indiqué ces paramètres dans ta requête, il suffit de boucler jusqu'à ce que hasNextPage passe à False.

    Dans cette boucle, avant de relancer la requête, suivant l'option que tu as choisis (offset ou after):
    • Soit tu augmente la valeur de offet de 50 (ou 49 si tu as réellement 49 élément qui remontent)
    • Soit tu récupère la valeur du dernier Id

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Mars 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Mars 2018
    Messages : 27
    Par défaut
    Citation Envoyé par popo Voir le message
    first et offet/after n'ont rien à voir avec python.
    Ce sont des paramètres dans la requête Graph QL.

    Et tu as indiqué que tu arrives à récupérer la valeur de hasNextPage.
    Donc une fois que tu as indiqué ces paramètres dans ta requête, il suffit de boucler jusqu'à ce que hasNextPage passe à False.

    Dans cette boucle, avant de relancer la requête, suivant l'option que tu as choisis (offset ou after):
    • Soit tu augmente la valeur de offet de 50 (ou 49 si tu as réellement 49 élément qui remontent)
    • Soit tu récupère la valeur du dernier Id
    Il ne me semble pas qu'on puisse faire de boucle dans graphQl.
    Manuellement ca fonctionne mais il y a trop de pages, il faudrait que ca boucle :
    Nom : graphql.JPG
Affichages : 332
Taille : 59,8 Ko

    J'aurai pensé pouvoir récupérer le endCursor puis l'incrémenté jusqu'à hasNextPage : False depuis python mais je n'ai pas les connaissances suffisantes.

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 956
    Par défaut
    Citation Envoyé par berty4242 Voir le message
    Il ne me semble pas qu'on puisse faire de boucle dans graphQl.
    Et tu ne t'es pas dit que cette boucle devrait être fait avec python....

    Citation Envoyé par berty4242 Voir le message
    J'aurai pensé pouvoir récupérer le endCursor puis l'incrémenté jusqu'à hasNextPage : False depuis python mais je n'ai pas les connaissances suffisantes.
    endCursor*représente l'id du dernier élément renvoyé Cest tout bonnement ce que je t'ai suggéré.

    Et si tes connaissances en python ne te permettent pas de boucler et de formater une chaîne avec des paramètres, je ne pourrais que te conseiller d'apprendre les bases avant d'essayer d'appeler des API.

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Mars 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Mars 2018
    Messages : 27
    Par défaut
    Citation Envoyé par popo Voir le message
    Et tu ne t'es pas dit que cette boucle devrait être fait avec python....
    Bien sur que oui puisque j'ouvre un sujet dans Python...
    mais je sais pas indiquer au script de boucler
    Citation Envoyé par popo Voir le message
    Et si tes connaissances en python ne te permettent pas de boucler et de formater une chaîne avec des paramètres, je ne pourrais que te conseiller d'apprendre les bases avant d'essayer d'appeler des API.
    Je sais qu'il faut apprendre les bases, mais c'est toujours plus stimulant d'avoir une idée précise et essayer de l'appliquer.

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 956
    Par défaut
    Si tu trouves plus stimulant de mettre la charrue avant les bœufs plutôt que faire les choses correctement, alors tu t'es trompé de forum.

    Pour ma part, j'estime t'avoir donné assez d'informations pour résoudre ton problème.

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Mars 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Mars 2018
    Messages : 27
    Par défaut
    Citation Envoyé par popo Voir le message
    Si tu trouves plus stimulant de mettre la charrue avant les bœufs plutôt que faire les choses correctement, alors tu t'es trompé de forum.

    Pour ma part, j'estime t'avoir donné assez d'informations pour résoudre ton problème.
    Merci d'avoir pris le temps de me répondre.

Discussions similaires

  1. [langage] traduction d'un fonction python en perl
    Par ay_pepito dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2007, 15h06
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

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