def generate_genre_menu(self, arg=None, menuw=None): """ Generates the genre list menu """ genrelist = [] pop = ProgressBox(text = _('Fetching Shoutcast Genres'), full = 2) pop.show() xmlfile = self.retrievexml() pop.tick() if xmlfile == None: genrelist = [ menu.MenuItem( _('Error retrieving genres'), action = menuw.back_one_menu, arg = None) ] else: parser = make_parser() parseGenreXML = GenreParser() parser.setContentHandler(parseGenreXML) parser.parse(xmlfile) try: for genre in parseGenreXML.genrelist: genrelist.append( menu.MenuItem(genre, action = self.generate_station_list, arg = genre ) ) except: genrelist = [ menu.MenuItem( _('Error retrieving genres'), action = menuw.back_one_menu, arg = None) ] genremenu = menu.Menu( _("Genres"), genrelist, item_types = 'audio' ) menuw.pushmenu(genremenu) menuw.refresh() pop.destroy()
def generate_station_list(self, arg=None, menuw=None): """ Generates the Station List """ stationlist = [] pop = ProgressBox(text=_('Fetching station list for %s') % arg, full=2) pop.show() xmlfile = self.retrievexml(arg) pop.tick() if xmlfile == None: stationlist = [ menu.MenuItem(_('Error retrieving stations'), action=menuw.back_one_menu, arg=None) ] else: try: parser = make_parser() parseStationXML = StationParser() parser.setContentHandler(parseStationXML) parser.parse(xmlfile) for station in parseStationXML.stationlist: statid = urllib2.quote(station["id"]) statname = station["name"] statbr = station["br"] statct = station['ct'] if int(statbr) >= self.min_bitrate and ( self.max_bitrate == 0 or int(statbr) <= self.max_bitrate): stationitem = AudioItem( 'http://www.shoutcast.com%s?id=%s' % (parseStationXML.tunein, statid), self, statname, False) stationitem.player = 'mplayer' stationitem.reconect = True stationitem.network_play = True stationitem.is_playlist = True stationitem.bitrate = int(statbr) stationitem.length = 0 stationitem.remain = 0 stationitem.info = { 'title': statname, 'description': '%s - %skbs' % (station['genre'], statbr) } stationlist.append(stationitem) stationlist.sort(key=self.stationsortkey) except: stationlist = [ menu.MenuItem(_('Error retrieving stationlist'), action=menuw.back_one_menu, arg=None) ] stationmenu = menu.Menu(arg, stationlist, item_types='audio') menuw.pushmenu(stationmenu) menuw.refresh() pop.destroy()
class AppleItem(Item): def __init__(self, parent): Item.__init__(self, parent) self.type = 'dir' self.skin_display_type = 'video' self.__load() def __progress(self, percent): if percent > self.__last_perc: for i in xrange(percent - self.__last_perc): self.__pop.tick() self.__last_perc = percent def __load(self): pfile = os.path.join(cachedir, 'data') if (os.path.isfile(pfile) == 0): self.trailers = applelib.Trailers() self.__pop = ProgressBox(text=_('Scanning Apple for trailers...'), full=100) self.__pop.show() self.__last_perc = -1 self.trailers.parse(self.__progress) self.__pop.destroy() util.fileops.save_pickle(self.trailers, pfile) else: self.trailers = util.fileops.read_pickle(pfile) if abs(time.time() - os.path.getmtime(pfile)) > MAX_CACHE_AGE: self.__pop = ProgressBox(text=_('Scanning Apple for trailers...'), full=100) self.__pop.show() self.__last_perc = -1 self.trailers.parse(self.__progress) self.__pop.destroy() util.fileops.save_pickle(self.trailers, pfile)
class RtveItem(Item): def __init__(self, parent): Item.__init__(self, parent) self.type = 'dir' self.skin_display_type = 'video' self.__load() def __progress(self, percent): if percent > self.__last_perc: for i in xrange(percent - self.__last_perc): self.__pop.tick() self.__last_perc = percent def __load(self): if hasattr(config, 'RTVE_BLACKLIST'): blackList = config.RTVE_BLACKLIST else: blackList = None pfile = os.path.join(cachedir, 'data') if (os.path.isfile(pfile) == 0): self.programacion = rtvelib.Programacion() self.__pop = ProgressBox(text=_('Escaneando la web de RTVE...'), full=100) self.__pop.show() self.__last_perc = -1 self.programacion.parse(self.__progress, blackList) self.__pop.destroy() util.fileops.save_pickle(self.programacion, pfile) else: if abs(time.time() - os.path.getmtime(pfile)) > MAX_CACHE_AGE: self.programacion = rtvelib.Programacion() self.__pop = ProgressBox( text=_('Escaneando la web de RTVE...'), full=100) self.__pop.show() self.__last_perc = -1 self.programacion.parse(self.__progress, blackList) self.__pop.destroy() util.fileops.save_pickle(self.programacion, pfile) else: self.programacion = util.fileops.read_pickle(pfile)
def generate_station_list(self, arg=None, menuw=None): """ Generates the Station List """ stationlist = [] pop = ProgressBox(text = _('Fetching station list for %s') % arg, full = 2) pop.show() xmlfile = self.retrievexml(arg) pop.tick() if xmlfile == None: stationlist = [ menu.MenuItem( _('Error retrieving stations'), action = menuw.back_one_menu, arg = None) ] else: try: parser = make_parser() parseStationXML = StationParser() parser.setContentHandler(parseStationXML) parser.parse(xmlfile) for station in parseStationXML.stationlist: statid = urllib2.quote(station["id"]) statname = station["name"] statbr = station["br"] statct = station['ct'] if int(statbr) >= self.min_bitrate and (self.max_bitrate == 0 or int(statbr) <= self.max_bitrate): stationitem = AudioItem('http://www.shoutcast.com%s?id=%s' % (parseStationXML.tunein, statid), self, statname, False) stationitem.player = 'mplayer' stationitem.reconect = True stationitem.network_play = True stationitem.is_playlist = True stationitem.bitrate = int(statbr) stationitem.length = 0 stationitem.remain = 0 stationitem.info = {'title':statname, 'description':'%s - %skbs' % (station['genre'], statbr) } stationlist.append(stationitem) stationlist.sort(key = self.stationsortkey) except: stationlist = [ menu.MenuItem( _('Error retrieving stationlist'), action = menuw.back_one_menu, arg = None) ] stationmenu = menu.Menu( arg, stationlist, item_types = 'audio' ) menuw.pushmenu(stationmenu) menuw.refresh() pop.destroy()
class RtveItem(Item): def __init__(self, parent): Item.__init__(self, parent) self.type = "dir" self.skin_display_type = "video" self.__load() def __progress(self, percent): if percent > self.__last_perc: for i in xrange(percent - self.__last_perc): self.__pop.tick() self.__last_perc = percent def __load(self): if hasattr(config, "RTVE_BLACKLIST"): blackList = config.RTVE_BLACKLIST else: blackList = None pfile = os.path.join(cachedir, "data") if os.path.isfile(pfile) == 0: self.programacion = rtvelib.Programacion() self.__pop = ProgressBox(text=_("Escaneando la web de RTVE..."), full=100) self.__pop.show() self.__last_perc = -1 self.programacion.parse(self.__progress, blackList) self.__pop.destroy() util.fileops.save_pickle(self.programacion, pfile) else: if abs(time.time() - os.path.getmtime(pfile)) > MAX_CACHE_AGE: self.programacion = rtvelib.Programacion() self.__pop = ProgressBox(text=_("Escaneando la web de RTVE..."), full=100) self.__pop.show() self.__last_perc = -1 self.programacion.parse(self.__progress, blackList) self.__pop.destroy() util.fileops.save_pickle(self.programacion, pfile) else: self.programacion = util.fileops.read_pickle(pfile)
def generate_genre_menu(self, arg=None, menuw=None): """ Generates the genre list menu """ genrelist = [] pop = ProgressBox(text=_('Fetching Shoutcast Genres'), full=2) pop.show() xmlfile = self.retrievexml() pop.tick() if xmlfile == None: genrelist = [ menu.MenuItem(_('Error retrieving genres'), action=menuw.back_one_menu, arg=None) ] else: parser = make_parser() parseGenreXML = GenreParser() parser.setContentHandler(parseGenreXML) parser.parse(xmlfile) try: for genre in parseGenreXML.genrelist: genrelist.append( menu.MenuItem(genre, action=self.generate_station_list, arg=genre)) except: genrelist = [ menu.MenuItem(_('Error retrieving genres'), action=menuw.back_one_menu, arg=None) ] genremenu = menu.Menu(_("Genres"), genrelist, item_types='audio') menuw.pushmenu(genremenu) menuw.refresh() pop.destroy()
def retrievexml(self): socktimeout = socket.getdefaulttimeout() self.genres = {} self.stations = {} try: finfo = os.stat(self.cacheFolder + 'built.pickle') ftime = finfo[ST_MTIME] except: ftime = -1 if ftime > 0: delta = time.time() - ftime else: delta = self.cache_ttl + 5 if delta < self.cache_ttl: fd = open(self.cacheFolder + 'built.pickle', "rb") self.stations = cPickle.load(fd) self.genres = cPickle.load(fd) self.bitrates = cPickle.load(fd) fd.close() return genrelist = [] stationlist = [] socket.setdefaulttimeout(20) for url in self.yellowpages: cachefile = self.cacheFolder xmlfile = self.cacheFolder glist = [] slist = [] purl = urlparse(url) cachefile += '%s.pickle' % purl.netloc xmlfile += '%s.xml' % purl.netloc pop = ProgressBox(text=_('Fetching Feed %s') % url, full=2) pop.show() try: finfo = os.stat(xmlfile) ftime = finfo[ST_MTIME] except: ftime = -1 if ftime > 0: delta = time.time() - ftime else: delta = self.cache_ttl + 5 if delta > self.cache_ttl: tries = 5 while tries > 0: try: cache = open(xmlfile, 'w') f = urllib2.urlopen(url) xmlt = "".join(f.readlines()) f.close() cache.write(xmlt) cache.close() tries = 0 except: if tries > 0: time.sleep(5) tries -= 1 else: socket.setdefaulttimeout(socktimeout) pop.destroy() return None pop.tick() pop.destroy() socket.setdefaulttimeout(socktimeout) pop2 = ProgressBox(text=_('Parsing Feed %s') % url, full=1) pop2.show() parser = make_parser() parseXML = StationParser(self.genres, self.audiotypes, self.genremapping, self.bitrates) parser.setContentHandler(parseXML) parser.parse(xmlfile) stationlist += parseXML.stations self.genres = parseXML.genres self.bitrates = parseXML.bitrates pop2.destroy() pop = ProgressBox(text=_('Building Station List'), full=len(stationlist)) pop.show() for station in stationlist: key = "%s%s%s" % (station["name"], station["bitrate"], station["listen_url"]) self.stations[key] = station pop.destroy() fd = open(self.cacheFolder + 'built.pickle', "wb") cPickle.dump(self.stations, fd) cPickle.dump(self.genres, fd) cPickle.dump(self.bitrates, fd) fd.close()
def retrievexml(self): socktimeout = socket.getdefaulttimeout() self.genres = {} self.stations = {} try: finfo = os.stat(self.cacheFolder + 'built.pickle') ftime = finfo[ST_MTIME] except: ftime = -1 if ftime > 0: delta = time.time() - ftime else: delta = self.cache_ttl + 5 if delta < self.cache_ttl: fd = open(self.cacheFolder + 'built.pickle', "rb") self.stations = cPickle.load(fd) self.genres = cPickle.load(fd) self.bitrates = cPickle.load(fd) fd.close() return genrelist = [] stationlist = [] socket.setdefaulttimeout(20) for url in self.yellowpages: cachefile = self.cacheFolder xmlfile = self.cacheFolder glist = [] slist = [] purl = urlparse(url) cachefile += '%s.pickle' % purl.netloc xmlfile += '%s.xml' % purl.netloc pop = ProgressBox(text = _('Fetching Feed %s') % url, full = 2) pop.show() try: finfo = os.stat(xmlfile) ftime = finfo[ST_MTIME] except: ftime = -1 if ftime > 0: delta = time.time() - ftime else: delta = self.cache_ttl + 5 if delta > self.cache_ttl: tries = 5 while tries > 0: try: cache = open(xmlfile, 'w') f = urllib2.urlopen(url) xmlt = "".join(f.readlines()) f.close() cache.write(xmlt) cache.close() tries = 0 except: if tries > 0: time.sleep(5) tries -= 1 else: socket.setdefaulttimeout(socktimeout) pop.destroy() return None pop.tick() pop.destroy() socket.setdefaulttimeout(socktimeout) pop2 = ProgressBox(text = _('Parsing Feed %s') % url, full = 1) pop2.show() parser = make_parser() parseXML = StationParser(self.genres, self.audiotypes, self.genremapping, self.bitrates) parser.setContentHandler(parseXML) parser.parse(xmlfile) stationlist += parseXML.stations self.genres = parseXML.genres self.bitrates = parseXML.bitrates pop2.destroy() pop = ProgressBox(text = _('Building Station List'), full = len(stationlist)) pop.show() for station in stationlist: key = "%s%s%s" % ( station["name"], station["bitrate"], station["listen_url"] ) self.stations[key] = station pop.destroy() fd = open(self.cacheFolder + 'built.pickle',"wb") cPickle.dump(self.stations, fd) cPickle.dump(self.genres, fd) cPickle.dump(self.bitrates, fd) fd.close()
def getMainInfo(self): """ Get main info for city Returns a dict of the form:: { 'Movies': [{'sysname': string, 'name': string, 'showtimes': string, 'url': string, 'genre': string, 'rating': string, 'length': string, 'director': string, 'writer': string, 'company': string, 'starring': string, 'poster_path': string}], 'Theatres': [{'sysname': string, 'name': string, 'movies': list of movies as above}]} """ d = {'Movies': [], 'Theatres': []} page = urllib2.urlopen(CC_MAIN_URL).read() rawmovies = page.split('<select name=f>')[1].split('</select>')[0] rms = rawmovies.split('<OPTION value="')[1:] pbox = ProgressBox(_("Retrieving Movie Information"), full=len(rms)) pbox.show() for rm in rms: names = rm.split('">') movie = {'sysname': names[0].strip()} _debug_("getting showtime info for "+movie['sysname'], 2) showtimepage = urllib2.urlopen(CC_MOVIE_URL+'&f='+movie['sysname']).read() movie['showtimes'] = {} for rawst in showtimepage.split('<table cellspacing=0 cellpadding=0 border=0><tr><td><a')[1:]: theatrename = sttheatrename_re.search(rawst).group(1) movie['showtimes'][theatrename] = showtime_re.search(rawst).group(1).replace(' <br> ', '\n') movie['url'] = CC_URL+stmovieurl_re.search(showtimepage).group(1) moviepage = urllib2.urlopen(movie['url']).read() movie['name'] = movie_res['name'].search(moviepage).group(1) for key in ('genre', 'rating', 'length', 'director', 'writer', 'company', 'starring'): res = movie_res[key].search(moviepage) if res: movie['key'] = res.group(1) if movie.has_key('starring'): movie['starring'] = htmlstrip_re.sub('', movie['starring']) res = movie_res['poster'].search(moviepage) if res: poster_url = CC_URL+res.group(1) imgfile = os.path.join(self.posterdir, str(movie['sysname']) + '.' + poster_url.split('.')[-1]) if (os.path.isfile(imgfile) == 0 or \ (abs(time.time() - os.path.getmtime(imgfile)) > MAX_POSTER_AGE)): open(imgfile, 'w').write(urllib2.urlopen(poster_url).read()) movie['poster_path'] = imgfile movie['trailers'] = [] for trailertype in (('QuickTime', '<span class=arial2>Quick Time: </span>'), \ ('RealVideo', '<span class=arial2>Real Video: </span>'), \ ('Windows Media', '<span class=arial2>Windows Media: </span>')): if moviepage.find(trailertype[1]) == -1: continue rawtrailers = moviepage.split(trailertype[1])[1].split('<br>')[0] for s in rawtrailers.split("window.open('/aw/trailer.aw?p=clock&j=e&t=")[1:]: trailer = {} trailer['type'] = trailertype[0] trailer['url'] = s.split('&mv=')[0] trailer['speed'] = s.split('return false;">')[1].split('</a></span>')[0] movie['trailers'].append(trailer) if moviepage.find('<p STYLE="text-align: justify"><span class=arial2>') > -1: movie['description'] = moviepage.split('<p STYLE="text-align: justify"><span class=arial2>')[1].split('</span></p></td>')[0] d['Movies'].append(movie) pbox.tick() rawtheatres = page.split('<select name=k>')[1].split('</select>')[0].replace('</option>', '') for rt in rawtheatres.split('<OPTION value="')[1:]: names = rt.split('">') theatre = {'sysname': names[0].strip(), : 'name': names[1].strip(), 'movies': []} theatrepage = urllib2.urlopen(CC_THEATRE_URL+'&k='+theatre['sysname']).read() for rawmovie in theatrepage.split('<span class=arial1><br></span>')[1:]: murl = CC_URL+tmovieurl_re.search(rawmovie).group(1) for m in d['Movies']: if m['url'] == murl: theatre['movies'].append(m) d['Theatres'].append(theatre) pbox.destroy() return d