Lecteur de fichier xmltv ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Lecteur de fichier xmltv ?

Message par cage »

Bonjour a tous,

Pour compléter une application IPTV que j'ai développé avec PB, j'aimerais si c'est possible développer avec PB un lecteur de fichier xmltv (lecteur EPG)

Définitions: XMLTV et EPG

Mon application:
Image

Les fichiers xmltv au format zip sont télécharger a partir du site XMLTV Suisse

L'un d'entre vous aurait-il des informations qui pourraient m'aider a créer un lecteur xmltv pour afficher les programmes TV.

Voici ce que peut donner un logiciel tel que Prog Guide:
Image

Voici mon application console pour récupérer les fichiers xmltv:

Code : Tout sélectionner

;************************************************************************
;Titre      : get-xmltv.pb
;Auteur     : (C) 2021 CAGE
;Date       : 2021/03/17
;Version PB : PureBasic 5.73 LTS (Windows - x86)
;Version PB : PureBasic 5.73 LTS (Windows - x64)
;Compiler Options
;Compiler Options : Executable format: Windows
;Compiler Options : Enable moderm theme support (for Windows X and above)
;Compile/Run      : Create temporary executable in the source directory
;
;Libairies: aucunes
;
;https://github.com/deseven/pbsamples/tree/master/crossplatform/libcurl
;************************************************************************
;

EnableExplicit

OnErrorGoto(?ErrorHandler)

Global AppPath$ = GetPathPart(ProgramFilename())

SetCurrentDirectory(AppPath$)

Procedure.a folderExist(f$)
  If FileSize(f$) = -2
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Global FolderXmltv.s = AppPath$ + "xmltv\"

If Not folderExist(FolderXmltv.s)
  If Not CreateDirectory(FolderXmltv.s)
    End
  EndIf
EndIf

Procedure getHTTPMemory_(url.s, file.s=#Null$)
  Protected Download, Progress, Size, *Buffer, Content.s
  Download = ReceiveHTTPMemory(url.s, #PB_HTTP_Asynchronous)
  If Download
    Repeat
      Progress = HTTPProgress(Download)
      Select Progress
        Case #PB_HTTP_Success
          *Buffer = FinishHTTP(Download)
          Size = MemorySize(*Buffer)
          PrintN("Téléchargement terminé (taille: " + Str(Round(Size/1024,#PB_Round_Up)) + " Ko)")
          ;Content.s = PeekS(*Buffer, Size, #PB_UTF8)
          If CreateFile(1, "test.zip")
            WriteData(1, *Buffer, Size)
            CloseFile(1)
          EndIf
          FreeMemory(*Buffer)
          Break

        Case #PB_HTTP_Failed
          PrintN("Téléchargement en erreur")
          FinishHTTP(Download)
          Break

        Case #PB_HTTP_Aborted
          PrintN("Téléchargement intérrompu")
          FinishHTTP(Download)
          Break
          
        Default
          ;PrintN("Current download: " + Progress)
       
      EndSelect
      
      Delay(500) ; Don't stole the whole CPU
    ForEver
  Else
    PrintN("Download error")
  EndIf

EndProcedure

Procedure getHTTPMemory(page.s=#Null$, file.s=#Null$)
  page.s = Trim(page.s)
  file.s = Trim(file.s)
  If page.s = #Null$ : ProcedureReturn : EndIf
  If file.s = #Null$ : ProcedureReturn : EndIf
  Protected *MemoryBuffer, Size
  *MemoryBuffer = ReceiveHTTPMemory(page.s)
  If *MemoryBuffer
    Size = MemorySize(*MemoryBuffer)
    PrintN("Téléchargement terminé (taille: " + Str(Round(Size/1024,#PB_Round_Up)) + " Ko)")
    If CreateFile(1, file.s)
      WriteData(1, *MemoryBuffer, Size)
      CloseFile(1)
    EndIf
    FreeMemory(*MemoryBuffer)
  Else
    PrintN("Téléchargement en erreur")
  EndIf
EndProcedure

#site$ = "https://xmltv.ch/xmltv/"

Define Source1.s = #site$ + "xmltv-cine.zip    " : Define Cible1.s = FolderXmltv.s + "xmltv-ciné+.zip"
Define Source2.s = #site$ + "xmltv-cplus.zip   " : Define Cible2.s = FolderXmltv.s + "xmltv-canal+.zip"
Define Source3.s = #site$ + "xmltv-disney.zip  " : Define Cible3.s = FolderXmltv.s + "xmltv-disney.zip"
Define Source4.s = #site$ + "xmltv-ch.zip      " : Define Cible4.s = FolderXmltv.s + "xmltv-suisse.zip"
Define Source5.s = #site$ + "xmltv-tnt.zip     " : Define Cible5.s = FolderXmltv.s + "xmltv-tnt.zip"
Define Source6.s = #site$ + "xmltv-complet.zip " : Define Cible6.s = FolderXmltv.s + "xmltv-complet.zip"

If InitNetwork()

  If OpenConsole()
    
    ConsoleTitle("Téléchargement des guides xmlTV a partir de la Suisse")
    
    PrintN("") : Print("Téléchargement de " + Source1.s + " : ")
    
    getHTTPMemory(Source1.s, Cible1.s)
    
    PrintN("") : Print("Téléchargement de " + Source2.s + " : ")
    
    getHTTPMemory(Source2.s, Cible2.s)
    
    PrintN("") : Print("Téléchargement de " + Source3.s + " : ")
    
    getHTTPMemory(Source3.s, Cible3.s)
    
    PrintN("") : Print("Téléchargement de " + Source4.s + " : ")
    
    getHTTPMemory(Source4.s, Cible4.s)
    
    PrintN("") : Print("Téléchargement de " + Source5.s + " : ")
    
    getHTTPMemory(Source5.s, Cible5.s)
    
    PrintN("") : Print("Téléchargement de " + Source6.s + " : ")
    
    getHTTPMemory(Source6.s, Cible6.s)
    
    Delay(5000)
  
  CloseConsole()
  
  EndIf

EndIf

ErrorHandler:
  
End
  
Merci a vous de l'aide que vous pourrez m'apporter.
cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Lecteur de fichier xmltv ?

Message par kernadec »

bjr cage
peut être aller voir ce module python pour écrire et lire XMLTV
on peut joindre l'auteur :)

https://pypi.org/project/python-xmltv/#files

Cordialement
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Lecteur de fichier xmltv ?

Message par Marc56 »

Bonjour Cage,

Je pense que vu la taille du fichier XML (108.892 lignes dans l'exemple), le plus simple et rapide serait de l'importer dans un fichier SQLite.
Cela permet ensuite de filtrer rapidement et évite aussi de le charger entièrement en RAM.
Reste à savoir si tu importes le fichier avec les fonctions XML de PB (perso j'ai du mal) ou si tu utilises les fonctions chaines (ou RegEx) ?

:wink:
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Lecteur de fichier xmltv ?

Message par cage »

Bonjour,

Merci pour vos réponses.

Pour l'instant je n'ai pas encore commencé a programmer l'application.
Je suis encore en cours de recherche d'idées avant de me lancer.
Mon but est de pouvoir afficher pour une chaîne donnée le programme TV de la journée et peut être d'afficher en popup le programme en cours.

Apparemment, le sujet n'a pas été traité même sur le forum anglais ou alors j'ai mal cherché.

C'est pour ça que toutes les idées seront les bienvenues.

En complément, si vous connaissez un logiciel qui permet de lire les fichiers xmltv comme ProgGuide, je suis preneur.

Merci a tous.

cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Lecteur de fichier xmltv ?

Message par Marc56 »

cage a écrit : En complément, si vous connaissez un logiciel qui permet de lire les fichiers xmltv comme ProgGuide, je suis preneur.
Il en existe beaucoup en cherchant avec des mots comme "xmltv viewer" ou reader

J'aime aussi les affichages sous forme de grille de programme, comme:
http://www.xmltv.co.uk/
:idea: C'est faisable avec des gadgets image dans un canvas et dont on calcule la largeur en fonction de la durée.
:idea: L'alternative serait de générer une page HTML et utiliser le WebGadget.

Sujet intéressant et sans doute assez facile car la structure du fichier XML est très simple.

:wink:
thealex
Messages : 1
Inscription : sam. 17/avr./2021 9:21
Contact :

Re: Lecteur de fichier xmltv ?

Message par thealex »

Hi,

I'm using Mediaportal 1.22 TV Server in combination with Kodi. I'm able to add TV channels and grab EPG using mc2xml.exe software and zap2it source.

I newly am interested in adding local radio channels. I added an antenna and was able to scan some. Now I'm looking to make them show in the "radio" section of Kodi (or worst case in the TV Guide itself)

I've tried lot of stuff. I just don't see :

1 - How to map xml data to radio epg and tv at the same time (guess I would need a complete xml data grabber, for tv and radio combined)
2 - If so, where to get this EPG data grabber for radio channels.

Thanks in advance!
Smart Home Cherish is all about decorating your precious home. We provide the best knowledge, ideas and products recommendation for modern home decoration.
Répondre