1+ #!/usr/bin/env python3
12"""
23Forked from https://github.com/daniel-widrick/zap2it-GuideScraping
34All credit goes to daniel-widrick.
@@ -40,17 +41,23 @@ def buildXMLProgram(event,channelId):
4041 xml = ""
4142 xml = xml + ' <programme start="' + buildXMLDate (event ["startTime" ]) + '" '
4243 xml = xml + 'stop="' + buildXMLDate (event ["endTime" ]) + '" channel="' + sanitizeData (channelId ) + '">' + "\n "
43- xml = xml + ' <title lang="en ">' + sanitizeData (event ["program" ]["title" ]) + '</title>' + "\n "
44+ xml = xml + ' <title lang="' + optLanguage + ' ">' + sanitizeData (event ["program" ]["title" ]) + '</title>' + "\n "
4445 if event ["program" ]["episodeTitle" ] is not None :
45- xml = xml + ' <sub-title lang="en ">' + sanitizeData (event ["program" ]["episodeTitle" ]) + ' </sub-title>' + "\n "
46+ xml = xml + ' <sub-title lang="' + optLanguage + ' ">' + sanitizeData (event ["program" ]["episodeTitle" ]) + ' </sub-title>' + "\n "
4647 if event ["program" ]["shortDesc" ] is None :
4748 event ["program" ]["shortDesc" ] = "Unavailable"
48- xml = xml + ' <desc lang="en ">' + html .escape (event ["program" ]["shortDesc" ]) + '</desc>' + "\n "
49+ xml = xml + ' <desc lang="' + optLanguage + ' ">' + html .escape (event ["program" ]["shortDesc" ]) + '</desc>' + "\n "
4950 xml = xml + ' <length units="minutes">' + sanitizeData (event ["duration" ]) + '</length>' + "\n "
5051 for category in event ["filter" ]:
5152 xml = xml + ' <category>' + sanitizeData (category .replace ('filter-' ,'' )) + '</category>' + "\n "
5253 if event ["thumbnail" ] is not None :
53- xml = xml + ' <thumbnail>http://zap2it.tmsimg.com/assets/' + event ["thumbnail" ] + '.jpg</thumbnail>' + "\n "
54+ xml = xml + ' <thumbnail>http://zap2it.tmsimg.com/assets/' + event ["thumbnail" ] + '.jpg</thumbnail>' + "\n "
55+ xml = xml + ' <icon src="http://zap2it.tmsimg.com/assets/' + event ["thumbnail" ] + '.jpg" />' + "\n "
56+ if event ["rating" ] is not None :
57+ xml = xml + ' <rating>' + "\n "
58+ xml = xml + ' <value>' + event ["rating" ] + '</value>' + "\n "
59+ xml = xml + ' </rating>' + "\n "
60+ xml = xml + ' <subtitles type="teletext" />' + "\n "
5461 season = "0"
5562 episode = "0"
5663 episodeid = ""
@@ -69,15 +76,17 @@ def buildXMLProgram(event,channelId):
6976 print ("no season for:" + event ["program" ]["title" ])
7077
7178 #print season + "." + episode
72- if int (season ) < 10 :
73- season = "0" + str (season )
74- if int (episode ) < 10 :
75- episode = "0" + str (episode )
76- xml = xml + '<episode-num system="SxxExx">S' + season + "E" + episode + "</episode-num>"
79+ if ((int (season ) != 0 ) and (int (episode ) != 0 )):
80+ if int (season ) < 10 :
81+ season = "0" + str (season )
82+ if int (episode ) < 10 :
83+ episode = "0" + str (episode )
84+ xml = xml + ' <episode-num system="SxxExx">S' + season + "E" + episode + "</episode-num>" + "\n "
85+ xml = xml + ' <episode-num system="common">S' + season + "E" + episode + "</episode-num>" + "\n "
7786
7887 showid = event ["seriesId" ].replace ('SH' ,'' )
7988 episodeid = episodeid .replace ('EP' + showid ,'' )
80- xml = xml + '<episode-num system="dd_progid">EP' + sanitizeData (showid + '.' + episodeid ) + '</episode-num>'
89+ xml = xml + ' <episode-num system="dd_progid">EP' + sanitizeData (showid + '.' + episodeid ) + '</episode-num>' + " \n "
8190
8291 xml = xml + ' </programme>' + "\n "
8392 return xml
@@ -92,10 +101,11 @@ def buildXMLDate(inputDateString):
92101#Add Paramter options for config file and guide file
93102optConfigFile = './xap2itconfig.ini'
94103optGuideFile = 'xmlguide.xmltv'
104+ optLanguage = 'en'
95105try :
96- opts , args = getopt .getopt (sys .argv [1 :],"hi:o:" ,["ifile=" ,"ofile=" ])
106+ opts , args = getopt .getopt (sys .argv [1 :],"hi:o:l: " ,["ifile=" ,"ofile=" , "language =" ])
97107except getopt .GetoptError :
98- print ("zap2it-GuideScrape.py [-i <inputfile> ] [-o <outputfile>]" )
108+ print ("zap2it-GuideScrape.py [-i <inputfile> ] [-o <outputfile>] [-l <language> " )
99109 sys .exit ()
100110
101111for opt , arg in opts :
@@ -106,6 +116,8 @@ def buildXMLDate(inputDateString):
106116 optConfigFile = arg
107117 elif opt in ("-o" ,"--ofile" ):
108118 optGuideFile = arg
119+ elif opt in ("-l" ,"--language" ):
120+ optLanguage = arg
109121
110122print ("Loading config: " , optConfigFile , " and outputting: " , optGuideFile )
111123
@@ -184,14 +196,15 @@ def buildXMLDate(inputDateString):
184196 addChannels = False
185197 closestTimestamp = closestTimestamp + (60 * 60 * 3 )
186198
187- guideXML = '<?xml version="1.0" encoding="ISO-8859-1"?>' + "\n "
199+ guideXML = '<?xml version="1.0" encoding="UTF-8"?>' + "\n "
200+ guideXML = guideXML + '<!DOCTYPE tv SYSTEM "xmltv.dtd">' + "\n "
188201
189202guideXML = guideXML + '<tv source-info-url="http://tvlistings.zap2it.com/" source-info-name="zap2it.com" generator-info-name="zap2it-GuideScraping" generator-info-url="daniel@widrick.net">' + "\n "
190203
191204guideXML = guideXML + channelXML
192205guideXML = guideXML + programXML
193206
194- guideXML = guideXML + " \n " + '</tv>'
207+ guideXML = guideXML + '</tv>' + " \n "
195208
196209file = open (optGuideFile ,"wb" )
197210file .write (guideXML .encode ('utf8' ))
0 commit comments