예제 #1
0
파일: rtve.py 프로젝트: golaizola/freevo1
    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)
예제 #2
0
    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)
예제 #3
0
    def __init__(self, text, x=None, y=None, width=0, height=0, icon=None,
        vertical_expansion=1, text_prop=None, full=0, parent='osd',
        handler=None, initial_progress=0):

        ProgressBox.__init__(self, text, x, y, width, height,
                 icon, vertical_expansion, text_prop, full, parent);

        b1 = Button(_('OK'))
        b1.toggle_selected()

        self.add_child(b1)

        self.progressbar.position = initial_progress
예제 #4
0
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)
예제 #5
0
    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()
예제 #6
0
    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()
예제 #7
0
 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)
예제 #8
0
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)
예제 #9
0
파일: rtve.py 프로젝트: golaizola/freevo1
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)
예제 #10
0
    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()
예제 #11
0
    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()
예제 #12
0
    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()
예제 #13
0
    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()
예제 #14
0
파일: cml.py 프로젝트: glyph-se/dotfiles
    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> &nbsp;', '\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&nbsp;Time:&nbsp;</span>'), \
                                ('RealVideo', '<span class=arial2>Real&nbsp;Video:&nbsp;</span>'), \
                                ('Windows Media', '<span class=arial2>Windows&nbsp;Media:&nbsp;</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