Récupérer des index BT01 depuis le site de l'INSEE [RESOLU]
Publié : mer. 20/sept./2017 20:03
Bonjour à tous,
Je cherche une manière pérenne de récupérer une liste d'index BT01 (index statistique des coûts de la construction publié tous les mois) depuis le site de l'INSEE.
J'ai essayé avec ceci :
Mais il semble que la mise en forme du site ait changé et ma procédure plante lamentablement désormais.
Sur le site de l'INSEE, il est question de connecteurs SMDX mais j'avoue que je n'y comprends rien : puis-je créer ma requête directement depuis Purebasic, comment récupérer le fichier XML obtenu ? Si des utilisateurs plus chevronnés peuvent m'aiguiller, je suis preneur ...
Une dernière précision, le programme doit pouvoir être compilé sur MacOS et windows.
Merci d'avance pour les conseils que vous pourrez me donner.
Cordialement.
Je cherche une manière pérenne de récupérer une liste d'index BT01 (index statistique des coûts de la construction publié tous les mois) depuis le site de l'INSEE.
J'ai essayé avec ceci :
Code : Tout sélectionner
Procedure RecupBT(anneelimite.w)
Window_wait("Recherche des index BT01 sur le site de l'INSEE.","Veuillez patienter.") ; Affiche une fenetre pour faire patienter
; Recupere le tableau hmtl du site INSEE
*Buffer=ReceiveHTTPMemory("http://www.bdm.insee.fr/bdm2/affichageSeries?idbank=001710986&idbank=000008631&codeGroupe=1606&serieCorrespondante=001710986&recherche=criteres");"http://www.bdm.insee.fr/bdm2/affichageSeries?idbank=001710986&page=tableau&request_locale=fr",#PB_HTTP_NoRedirect);;"http://insee.fr/fr/base-de-donnees/bsweb/serie.asp?idbank=001710986")
If *Buffer
Taille = MemorySize(*Buffer)
; ShowMemoryViewer(*Buffer,Taille)
; CallDebugger
; Debug "Contenu: " + PeekS(*Buffer, Taille, #PB_Ascii)
; FreeMemory(*Buffer)
Else
Debug "Le téléchargement a échoué"
EndIf
html.s=PeekS(*Buffer, Taille,#PB_Ascii)
; ShowMemoryViewer(@html.s,StringByteLength(html.s,#PB_Ascii))
pos.l=1
; Recupere indices depuis l'anne limite definie plus haut
Repeat
;Debug html.s
;année
b.s="<th class="+Chr(34)+"ligne total"+Chr(34)+" scope="+Chr(34)+"row"+Chr(34)+">"
pos=FindString(html.s,b.s,pos)+Len(b.s)
b.s=Mid(html.s,pos,4)
annee.w=Val(b.s)
;mois
b.s="<td class="+Chr(34)+"ligne total"+Chr(34)+">"
pos=FindString(html.s,b.s,pos)+Len(b.s)
b.s=""
While Mid(html.s,pos,5)<>"</td>"
b.s=b.s+Mid(html.s,pos,1)
pos+1
Wend
mois.s=b.s
a.s= LCase(mois.s)
If a.s="january"
mois0=1
EndIf
If a.s="february"
mois0=2
EndIf
If a.s="march"
mois0=3
EndIf
If a.s="april"
mois0=4
EndIf
If a.s="may"
mois0=5
EndIf
If a.s="june"
mois0=6
EndIf
If a.s="july"
mois0=7
EndIf
If a.s="august"
mois0=8
EndIf
If a.s="september"
mois0=9
EndIf
If a.s="october"
mois0=10
EndIf
If a.s="november"
mois0=11
EndIf
If a.s="december"
mois0=12
EndIf
;indice
b.s="<td class="+Chr(34)+"number"+Chr(34)+">"
pos=FindString(html.s,b.s,pos)+Len(b.s)
a.s=""
b.s=""
While a.s<>"</td>"
a.s=Mid(html.s,pos,5)
ab.s=Mid(html.s,pos,1)
If Asc(ab.s)>32 And ab.s<>"<"
b.s=b.s+ab.s
EndIf
pos+1
Wend
ReplaceString(b.s,".",",")
indice.f=ValF(b.s)
; raccordement ancienne série
If (annee=2014 And mois0<9) Or (annee<2014)
indice.f=indice.f/8.3802
EndIf
BT01.f(annee-anneelimite,mois0)=indice.f
Until pos>Len(html.s) Or annee<=anneelimite.w
CloseWindow(idwaitwin) ; ferme la fenetre d'attente
EndProcedure
Sur le site de l'INSEE, il est question de connecteurs SMDX mais j'avoue que je n'y comprends rien : puis-je créer ma requête directement depuis Purebasic, comment récupérer le fichier XML obtenu ? Si des utilisateurs plus chevronnés peuvent m'aiguiller, je suis preneur ...
Une dernière précision, le programme doit pouvoir être compilé sur MacOS et windows.
Merci d'avance pour les conseils que vous pourrez me donner.
Cordialement.