Récupérer des index BT01 depuis le site de l'INSEE [RESOLU]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
banban73
Messages : 10
Inscription : jeu. 16/nov./2006 19:59
Localisation : Bergerac - France

Récupérer des index BT01 depuis le site de l'INSEE [RESOLU]

Message par banban73 »

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 :

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
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.
Dernière modification par banban73 le mar. 26/sept./2017 20:34, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Récupérer des index BT01 depuis le site de l'INSEE

Message par djes »

Pourquoi tu n'utilises pas le lien de téléchargement (par exemple https://www.insee.fr/fr/statistiques/se ... eeFin=2017) ? Tu récupèrerais un fichier .csv bien plus pratique à utiliser...
banban73
Messages : 10
Inscription : jeu. 16/nov./2006 19:59
Localisation : Bergerac - France

Re: Récupérer des index BT01 depuis le site de l'INSEE

Message par banban73 »

Bonjour Djes, et merci de ta réponse rapide.
Effectivement, cela parait une bonne solution et le fichier semble plus facile à traiter.

On peut récupérer ce fichier avec ReceiveHTTPFile() ?
En tout cas, je teste dès que je peux...

Merci beaucoup.
Bonne soirée.
A plus tard.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Récupérer des index BT01 depuis le site de l'INSEE

Message par djes »

Oui, bien sûr !
banban73
Messages : 10
Inscription : jeu. 16/nov./2006 19:59
Localisation : Bergerac - France

Re: Récupérer des index BT01 depuis le site de l'INSEE

Message par banban73 »

Bonjour,
Désolé pour ce retour tardif ...La vraie vie nous rattrape parfois...

Merci Djes ! C'était la solution : le fichier CSV, une fois dézippé, s'avère facile à récupérer et j'espère que le format ne changera pas de sitôt.

A+
Répondre