6. aOS Toulouse
20 juin 2017
Lire toutes les pages d’une API
• Documentation
https://www.meetup.com/fr-
FR/meetup_api/
• page : la taille de page (nb maximal
de résultats à chaque réponse, 200 par
défaut)
• offset : la page à retourner.
Exemple, page = 10, offset =0 donne les lignes
de 1-10, offset=1 de 11à 20, etc..
• desc : ordre inverse, desc=true
7. aOS Toulouse
20 juin 2017
Récupérer la 1ère page
Construire l’URL
• L’URL de connexion : https://api.meetup.com/members?
• Paramètres communs aux requêtes :
• &group_urlname= GroupUrlName
• &key= MeetupApiKey
“https://api.meetup.com/members?" & "&group_urlname=" & GroupUrlName & "&key=" & MeetupApiKey & "&page=200"
& "&offset=0"
NumPage = 0
“https://api.meetup.com/members?" & "&group_urlname=" & GroupUrlName & "&key=" & MeetupApiKey & "&page=200"
& "&offset=" & Text.From(NumPage)Dès que la table est récupérée, on compte le nombre de lignes
Table.RowCount(ConvertTable )
8. aOS Toulouse
20 juin 2017
Fonction récursive
• Schéma de la fonction
• Combiner les tables
CombineResult = Table.Combine({MaTable ,
ConvertTable})
• Code de la ligne de récursivité
if NbLignes = 0 then
CombineResult
else
fnGetPages (NumPage + 1, CombineResult )
NON
OUI
NumPage = 0
Resultat = 200 membres
Nb
Membres
<200
Nous sommes arrivés sur la
dernière page
NumPage=+1
Combiner les tables
9. aOS Toulouse
20 juin 2017
Code de la fonction
(NumPage as number, MaTable as table) =>
let
Source = Json.Document(Web.Contents("https://api.meetup.com/members?status=past" & "&group_urlname=" &
GroupUrlName & "&key=" & MeetupApiKey & "&page=200" & "&offset=" & Text.From(NumPage))),
Navigation = Source[results],
ConvertTable = Table.FromList(Navigation , Splitter.SplitByNothing(), null, null, ExtraValues.Error),
NbLignes = Table.RowCount(ConvertTable),
CombineResult = Table.Combine({MaTable , ConvertTable}),
Resultat = if NbLignes = 0 then CombineResult else fnGetPages (NumPage + 1, CombineResult )
in
Resultat
10. aOS Toulouse
20 juin 2017
Problématique RH
Les contrats se suivent et donc la date de début est le 19/02/2013
Les contrats ne se suivent pas, nous avons donc 6 contrats différents
11. aOS Toulouse
20 juin 2017
Fonction récursive
Besoin de lire les données de la ligne
précédente
• Utilisation d’un index
• Fusion de la table avec elle-même
OUI
NON
Ligne actuel
(table + Entrée)
Sortie+1
=
Entrée ?
debut contrat = Date
entrée
Ligne précédente
12. aOS Toulouse
20 juin 2017
Code de la fonction fnGetDebut
(TableContrats as table, ID as number, DateEntree as date) =>
let
LigneTest = Table.SelectRows(TableContrats , each ([Index] = ID-1)),
NbLignes = Table.RowCount(LigneTest),
DateDebut = if NbLignes = 0 then
DateEntree
else
if DateEntree = (LigneTest{0}[Sortie] + #duration(1,0,0,0)) then
fnGetDebut(TableContrats, ID-1,LigneTest{0}[Entree])
else
DateEntree
in
DateDebut