extracts channel-urls correctly
[tvfs.git] / main.py
blob372433941fbb4042a9b82b58f13a0e33a1260a16
1 #!/usr/bin/python
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.
18 import urllib
19 import tempfile
20 import gzip
21 import libxml2
22 import datetime
24 class GZStream:
25 def __init__(self, url):
26 self.url = url
28 def read(self):
29 stream = urllib.urlopen(self.url)
30 buff = stream.read()
31 f = tempfile.NamedTemporaryFile()
32 f.write(buff)
33 f.flush()
34 gs = gzip.open(f.name)
35 buff = gs.read()
36 gs.close()
37 f.close()
38 return buff
40 class ProgramListing:
41 def __init__(self, url):
42 pass
44 class Channel:
45 def __init__(self, name, baseurl):
46 self.name = name
47 self.baseurl = baseurl
48 self.today = None
50 def list_today(self):
51 if None == self.today:
52 d = datetime.datetime.now()
53 path = self.baseurl + "_" + d.strftime("%Y-%m-%d") + ".xml.gz"
54 self.today = ProgramListing(path)
55 return self.today
57 def get_name(self):
58 return self.name
60 class ChannelList:
61 def __init__(self):
62 basepath = "http://tv.swedb.se/xmltv/"
63 self.cl = []
65 istream = GZStream(basepath + "channels.xml.gz")
66 doc = libxml2.parseDoc(istream.read())
68 namelist = doc.xpathEval('//display-name/text()')
69 idlist = doc.xpathEval('//channel/attribute::id')
70 baselist = doc.xpathEval('//base-url/text()')
72 for name,idn,base in zip(namelist,idlist,baselist):
73 name = str(name.content)
74 idn = str(idn.content)
75 base = str(base.content)
76 self.cl.append( Channel(name, base + idn))
78 def __iter__(self):
79 return self.cl.__iter__()
81 def main():
82 cl = ChannelList()
83 for c in cl:
84 print c.get_name()
85 print c.list_today()
87 if __name__ == "__main__":
88 main()