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:
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:
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
cage