3 # tvfs - a simple fuse-module to mount a tv-guide as a filesystem
4 # Copyright (C) 2008, Kristian Rumberg (kristianrumberg@gmail.com)
6 # Permission to use, copy, modify, and/or distribute this software for any
7 # purpose with or without fee is hereby granted, provided that the above
8 # copyright notice and this permission notice appear in all copies.
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
25 def __init__(self
, url
):
29 stream
= urllib
.urlopen(self
.url
)
31 f
= tempfile
.NamedTemporaryFile()
34 gs
= gzip
.open(f
.name
)
41 def __init__(self
, name
, desc
, start_str
, end_str
):
44 self
.start_str
= start_str
45 self
.end_str
= end_str
50 def get_description(self
):
60 def __init__(self
, name
, url
):
65 istream
= GZStream(url
)
66 doc
= libxml2
.parseDoc(istream
.read())
68 namelist
= doc
.xpathEval('//programme//title/text()')
69 desclist
= doc
.xpathEval('//programme//desc/text()')
70 startlist
= doc
.xpathEval('//programme/attribute::start')
71 endlist
= doc
.xpathEval('//programme/attribute::stop')
73 for name
,desc
,start
,end
in zip(namelist
,desclist
,startlist
,endlist
):
74 name
= str(name
.content
)
75 desc
= str(desc
.content
)
76 start
= str(start
.content
)[8:12]
77 end
= str(end
.content
)[8:12]
78 self
.cl
.append( Program(name
, desc
, start
, end
) )
81 return self
.cl
.__iter
__()
84 def __init__(self
, name
, baseurl
):
86 self
.baseurl
= baseurl
90 if None == self
.today
:
91 d
= datetime
.datetime
.now()
92 path
= self
.baseurl
+ "_" + d
.strftime("%Y-%m-%d") + ".xml.gz"
93 self
.today
= ProgramList(self
.name
, path
)
101 basepath
= "http://tv.swedb.se/xmltv/"
104 istream
= GZStream(basepath
+ "channels.xml.gz")
105 doc
= libxml2
.parseDoc(istream
.read())
107 namelist
= doc
.xpathEval('//display-name/text()')
108 idlist
= doc
.xpathEval('//channel/attribute::id')
109 baselist
= doc
.xpathEval('//base-url/text()')
111 for name
,idn
,base
in zip(namelist
,idlist
,baselist
):
112 name
= str(name
.content
)
113 idn
= str(idn
.content
)
114 base
= str(base
.content
)
115 self
.cl
.append( Channel(name
, base
+ idn
))
118 return self
.cl
.__iter
__()
129 print p
.get_description()
131 if __name__
== "__main__":