PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Problème de limitation de résultats dans une api
Problème de limitation de résultats dans une api
Iniciado por Paul SOULAT, 18,abr. 2020 12:03 - 7 respuestas
Miembro registrado
49 mensajes
Publicado el 18,abril 2020 - 12:03
Bonjour je dois charger une API et cette dernière limite les résultats à 500 pourriez vous m'indiquer comment faire pour charger toutes les données 500 par 500 merci

le lien vers l'explication de l'API ci besoin
https://developers.pipedrive.com/docs/api/v1/…

merci pour votre aide
Miembro registrado
4.362 mensajes
Publicado el 19,abril 2020 - 10:44
Bonjour,
Peut tu résumer ce que fait cette API.
Ce que tu cherches et comment tu effectues ta requête ? A priori, il faudrait affiner la recherche, il y aura moins de résultats

--
Il y a peut être plus simple, mais, ça tourne
Publicado el 19,abril 2020 - 23:01
Bonsoir

Merci pour votre réponse, l'api retourne une liste de client (organisation) issu d'un outils de crm
le fichier que je tente de récupéré fait plus de 90000 lignes et l'api limite les résultats à 500 max du coup je ne sais pas trop comment récupérer la liste complète là j'ai fait une boucle qui s'incrémente de 500 par exemple :

nNum est un entier = 0
nNumLigne est un entier = 0
nId est un entier

TANTQUE nNum <> "100000"

Requette est un restRequête
Reponse est un restRéponse
ReponseVariant est un Variant


Requette.URL = gsCompte+"/v1/organizations?start="+nNum+"&limit=500&api_token="+gsToken

Reponse = RESTEnvoie(Requette)

ReponseVariant = JSONVersVariant(Reponse.Contenu)

SI nId <> "" ALORS

POUR TOUT Organisation de ReponseVariant.data
nNumLigne++
Pipe.Num_Ligne = nNumLigne
Pipe.Num_Pipe = Organisation.id
SELON Organisation.e302b2219dce9b4964aadd1899aa87638e38688e

CAS 0 // Vide
Pipe.Status = "VIDE"
CAS 1 // Prospect
Pipe.Status = "PROSPECT"
CAS 2 // Client
Pipe.Status = "CLIENT"
CAS 3 // Concurrent
Pipe.Status = "CONCURRENT"
CAS 4 // Apporteur
Pipe.Status = "APPORTEUR"
CAS 9 // Societe
Pipe.Status = "SOCIETE"
CAS 71 // Ancien client
Pipe.Status = "ANCIEN CLIENT"

AUTRE CAS

FIN

Pipe.Code_Client = Organisation.a0ae9d0eaa0f23375c9a1eb3f5b0bd95d2a14b1f
Pipe.Nom_Client = Organisation.name
Pipe.Date_Dernier = Organisation.last_activity_date
HAjoute(Pipe)
HRAZ(Pipe)

nId = Organisation.id
FIN

nNum+=500
Multitâche(-1)
FEN_Demarrage.SAI_Depart = nNum
FEN_Demarrage.SAI_Fin = nId
FEN_Demarrage.LIB_Chargement = "Chargement du fichier PIPE en cours"+RC+nNum+" Fichiers chargés"
SINON

FIN
FIN
Miembro registrado
49 mensajes
Publicado el 20,abril 2020 - 08:03
Bonjour, merci de votre réponse

L'API me fournie des élément de CRM
je travail sur le fichier client classé par status (client, ancien client, prospection, vide)
ce fichier représente un peu plus de 95000 lignes mais l'api retourne au maximum 500 résultats en indiquant le num de départ

pour faire la remonté j'ai créé une boucle mais comme je ne connais pas le nombre d'élément je ne sais pas quand m’arrêter

nNum est un entier = 0
nNumLigne est un entier = 0
nId est un entier

TANTQUE nNum <> "100000"

Requette est un restRequête
Reponse est un restRéponse
ReponseVariant est un Variant

Requette.URL = gsCompte+"/v1/organizations?start="+nNum+"&limit=500&api_token="+gsToken

Reponse = RESTEnvoie(Requette)

ReponseVariant = JSONVersVariant(Reponse.Contenu)

SI nId <> "" ALORS

POUR TOUT Organisation de ReponseVariant.data
nNumLigne++
Pipe.Num_Ligne = nNumLigne
Pipe.Num_Pipe = Organisation.id
SELON Organisation.e302b2219dce9b4964aadd1899aa87638e38688e

CAS 0 // Vide
Pipe.Status = "VIDE"
CAS 1 // Prospect
Pipe.Status = "PROSPECT"
CAS 2 // Client
Pipe.Status = "CLIENT"
CAS 3 // Concurrent
Pipe.Status = "CONCURRENT"
CAS 4 // Apporteur
Pipe.Status = "APPORTEUR"
CAS 9 // Societe
Pipe.Status = "SOCIETE"
CAS 71 // Ancien client
Pipe.Status = "ANCIEN CLIENT"

AUTRE CAS

FIN

Pipe.Code_Client = Organisation.a0ae9d0eaa0f23375c9a1eb3f5b0bd95d2a14b1f
Pipe.Nom_Client = Organisation.name
Pipe.Date_Dernier = Organisation.last_activity_date
HAjoute(Pipe)
HRAZ(Pipe)

nId = Organisation.id
FIN

nNum+=500
Multitâche(-1)
FEN_Demarrage.SAI_Depart = nNum
FEN_Demarrage.SAI_Fin = nId
FEN_Demarrage.LIB_Chargement = "Chargement du fichier PIPE en cours"+RC+nNum+" Fichiers chargés"
SINON

FIN
FIN


Info("Traitement terminé")
Miembro registrado
499 mensajes
Publicado el 20,abril 2020 - 09:39
Bonjour,

D'après la documentation de votre API, sur cette URL : https://pipedrive.readme.io/docs/core-api-concepts-responses

Vous avez, en plus du champ "data", un champ "additional_data", et dans celui-ci, un champ "pagination". Qui contient un booléen "more_items_in_collection".

A priori il suffira de tester à la fin de votre boucle si ce booléen est à faux, dans ce cas cela veut dire qu'il n'y a pas d'autres items à récupérer, et vous pouvez donc sortir de la boucle à ce moment-là.
Miembro registrado
49 mensajes
Publicado el 20,abril 2020 - 13:01
Merci Benjamin je vais regarder ca j'avais pas vu en effet
Miembro registrado
49 mensajes
Publicado el 21,abril 2020 - 14:45
Bonjour Benjamin,

j'ai regardé la doc je récupère bien les infos voulus par contre comment récupérer ses info parce que quoi que je fasse cela me retourne 0

Requette_TestPage est un restRequête
Reponse_TestPage est un restRéponse
ReponseVariant_TestPage est un Variant

Requette_TestPage.URL = gsCompte+"/v1/organizations?start="+nNum+"&limit=500&api_token="+gsToken

Reponse_TestPage = RESTEnvoie(Requette_TestPage)

ReponseVariant_TestPage = JSONVersVariant(Reponse_TestPage.Contenu)

POUR TOUT test de ReponseVariant_TestPage.additional_data

Trace("Start : " + test.pagination.start)
Trace("Limite : " + test.pagination.limit)
Trace("More : " + test.pagination.more_items_in_collection)
Trace("Next : " + test.pagination.next_start)

FIN


j'ai essayé avec :

ReponseVariant_TestPage = JSONVersVariant(Reponse_TestPage.Contenu)

POUR TOUT test DE ReponseVariant_TestPage.data

Trace("Start : " + test.additional_data.pagination.start)
Trace("Limite : " + test.additional_data.pagination.limit)
Trace("More : " + test.additional_data.pagination.more_items_in_collection)
Trace("Next : " + test.additional_data.pagination.next_start)

FIN

et ca

ReponseVariant_TestPage = JSONVersVariant(Reponse_TestPage.Contenu)

POUR TOUT test DE ReponseVariant_TestPage.data.additional_data

Trace("Start : " + test.pagination.start)
Trace("Limite : " + test.pagination.limit)
Trace("More : " + test.pagination.more_items_in_collection)
Trace("Next : " + test.pagination.next_start)

FIN

bref je ne parviens pas à récupérer cette info pourtant visible lors d'un point d'arret

Merci pour votre aide
Miembro registrado
49 mensajes
Publicado el 21,abril 2020 - 15:02
Pardon pour le dérangement j'ai trouvé il fallait que je mette le tout or de la boucle
POUR TOUT ...

Trace("Start : " + ReponseVariant_TestPage.additional_data.pagination.start)
Trace("Limite : " + ReponseVariant_TestPage.additional_data.pagination.limit)
Trace("More : " + ReponseVariant_TestPage.additional_data.pagination.more_items_in_collection)
Trace("Next : " + ReponseVariant_TestPage.additional_data.pagination.next_start)

Encore merci