Page 1 sur 1

Récupération de liste de radios (Nom + Url)

Publié : sam. 01/déc./2018 15:55
par Ar-S
Yop.

Pour les amateurs de lecteur de webradios...
Je me suis amusé à faire un petit parser qui permet de récupérer toute la liste des web radios contenues dans le fichier "Télécharger le fichier VLC - PC" de cette page
http://fluxradios.blogspot.com/2017/07/vlc-france.html
Rien n'est ecrit sur le disque dur.

J'ai créé cette routine de façon à permettre de parser d'autres listes XML (ici fichier xspf) du moment ou vous connaissez les balises adéquates.

EnJoYeZ :mrgreen:

Code : Tout sélectionner

InitNetwork()

Structure Radio
  Location.s
  Title.s
EndStructure

Global NewMap Radios.Radio()

Procedure MapRadios(BaliseLOC.s,BaliseTITRE.s,AdresseFichier.s)
  ; by AR-S // 01/12/2018 // PB 5.62 x64
  ; v1.0
  ; Récupérer les listes des radios du fichier "Télécharger le fichier VLC - PC "
  ; de la page : http://fluxradios.blogspot.com/2017/07/vlc-france.html
  ; La routine devrait permettre de parser d'autres listes XML du moment ou vous connaissez les balises
  
  Protected B_LOC_OUVERTE.s, B_LOC_FERMEE.s, B_TITRE_OUVERTE.s, B_TITRE_FERMEE.s, Contenu.s, NBR_Radio, DepartCurseur, FinCurseur
  
  ; Petite modification de lien au cas ou ce soit du dropbox...
  If FindString(AdresseFichier.s,"dl=0")
    AdresseFichier.s = ReplaceString(AdresseFichier.s,"dl=0","dl=1" )
  EndIf
  
  ; Récupération du fichier
  *Buffer = ReceiveHTTPMemory(AdresseFichier.s)
  If *Buffer
    Taille = MemorySize(*Buffer)
    Contenu.s = PeekS(*Buffer, Taille, #PB_UTF8|#PB_ByteLength)
    FreeMemory(*Buffer)
    
    ; Création des balises
    B_LOC_OUVERTE.s = BaliseLOC.s
    B_LOC_FERMEE.s  = ReplaceString(BaliseLOC.s,"<","</")
    
    B_TITRE_OUVERTE.s = BaliseTITRE.s
    B_TITRE_FERMEE.s  = ReplaceString(BaliseTITRE.s,"<","</")
    
    ; Traitement des balise et mappage des radios (url / titre)
    NBR_Radio = CountString( Contenu.s, B_LOC_FERMEE )
    Debug "Il y a " + Str(NBR_Radio) + " dans la liste"
    
     For i = 1 To NBR_Radio
      
      Name$ = "Radio"+Str(i)
      Debug Name$
      
      DepartCurseur = FindString(Contenu,B_LOC_OUVERTE,DepartCurseur)
      FinCurseur    = FindString(Contenu,B_LOC_FERMEE,DepartCurseur + Len(B_LOC_OUVERTE) )
      Radios(Name$)\Location = Mid( Contenu,DepartCurseur+Len(B_LOC_OUVERTE), FinCurseur-(DepartCurseur+Len(B_LOC_OUVERTE) ))
      Debug "LOCATION : " + Radios(Name$)\Location   
      DepartCurseur = FinCurseur
      
      DepartCurseur = FindString(Contenu,B_TITRE_OUVERTE,DepartCurseur)
      FinCurseur    = FindString(Contenu,B_TITRE_FERMEE,DepartCurseur + Len(B_TITRE_OUVERTE) )
      Radios(Name$)\Title = Mid(Contenu,DepartCurseur+Len(B_TITRE_OUVERTE), FinCurseur-(DepartCurseur+ Len(B_TITRE_OUVERTE) ))
      Debug "TITLE : " + Radios(Name$)\Title   
      DepartCurseur = FinCurseur
      Debug ""
    Next  
    
    Retour = 1 
  Else
    Debug "Le téléchargement a échoué"
    Retour = 0
  EndIf
  
  ProcedureReturn Retour
EndProcedure


; /////////////// MAIN CODE /////////////////////////////////////////////////////////////////////////////////////

url$ = "https://www.dropbox.com/s/jed19lhhj9s3ajd/FR%20-%20-%20France%20-%20V.2018-03%20-%20PC.xspf?dl=0"
If MapRadios("<location>","<title>", url$) = 1
  Debug "Succes"
Else
  Debug "LoOserie"
EndIf


;Example 2 - PODCAST RADIO FRANCE
url$ = "http://radiofrance-podcast.net/podcast09/rss_16744.xml"
If MapRadios("<guid>","<title>", url$) = 1
  Debug "Succes"
Else
  Debug "LoOserie"
EndIf
; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////


Re: Récupération de liste de radios (Nom + Url)

Publié : sam. 01/déc./2018 18:11
par Marc56
Version regex si on veut pas s'embêter avec les FindString :P
(en supposant que le fichier est déjà chargé)

Code : Tout sélectionner

ReadFile(0, "FR - - France - V.2018-03 - PC.xspf")
While Not Eof(0)
    Txt$ = ReadString(0, #PB_File_IgnoreEOL)
Wend    
CloseFile(0)

If CreateRegularExpression(0,"<location>(.+?)</location>.+?<title>(.+?)</title>", #PB_RegularExpression_DotAll)
    If ExamineRegularExpression(0, Txt$)
        While NextRegularExpressionMatch(0)
            Debug ""
            Debug RegularExpressionGroup(0,1)
            Debug RegularExpressionGroup(0,2)
        Wend
    EndIf
EndIf

FreeRegularExpression(0)
:wink:

Re: Récupération de liste de radios (Nom + Url)

Publié : sam. 01/déc./2018 19:04
par Kwai chang caine
Marche nickel, merci du partage ARS 8)

@Marc
Pfffff....les "raiguex" me blasent :|
Merci aussi pour le code de ARS lavé à 90° à la machine :mrgreen: et qui marche encore 8O

Re: Récupération de liste de radios (Nom + Url)

Publié : sam. 01/déc./2018 21:38
par Ar-S
Oui les regex je suis pas fan non plus malgré leur intérêt certain(e)s.
Tous les chemins mènent à la ROM eux à Rome ;)

Re: Récupération de liste de radios (Nom + Url)

Publié : jeu. 06/déc./2018 11:09
par Kwai chang caine
En fait… par "blasent" je veux dire que c'est un truc de ouf, d'une puissance incroyable, mais tellement compliquées que ça me blase de savoir que jamais je ne pourrais, ou aurais le courage de les appréhender :oops:
En fait, j'aimerais être FAN, pour reprendre ton expression, mais pourquoi pas être FAN de la flagellation ou tout autre "joyeuserie" du même type :mrgreen:

Image

En fait elles me font penser à un de ces heureusement pas trop nombreux trucs dont l'ASM ou le C font aussi partie. :|

Etre en admiration, voir même à genou devant quelque chose ou quelqu'un, tout en sachant qu'il restera à jamais hors de sa portée c'est blasant au final. :|
C'est un peu le nirvana qui recule au fur et à mesure que l'on avance

Image

Et en parlant de personnes vénérables, … je ne sais pas pourquoi une parmi tant d'autres, me vient immédiatement à l'esprit lorsque je mesure mon admiration pour elle, et ceci depuis un très grand nombre d'années déjà 8)
Et particulièrement lorsque j'écris sur un site "bleu" :mrgreen: