def _get_archive_videos(self, type, game_name, date, sort_by,genre_id, system_id):   
        query = '?search=&type=%s&time=%s&sort=%s' % (type, date, sort_by)
        
        if system_id:
            query += '&system=%d' % system_id
        
        if game_name:
            query += '&search_game=%s' % game_name

        if genre_id:
            query += '&genre_id=%d' % genre_id

        raw_data = self.get_response_data(self.LIST_ARCHIVE_URL + query)
        xml_doc = utils.build_xml_tree(raw_data)
        items = utils.do_xpath_query(xml_doc, '//item')
        return self.build_stream_object_list(items) 
    def get_game_list(self):
        # TODO: FIXME: 
        # maybe parse the category anchors as well, will be able to browse by
        # letter/number
        raw_data = self.get_response_data(self.LIST_GAMES_URL)
        html_tree = utils.build_html_tree(raw_data)

        game_links = utils.do_xpath_query(
            html_tree, 
            '//a[re:test(string(@href), "^/game/[\w+]*$", "i")]', 
            namespaces={
                're' : 'http://exslt.org/regular-expressions'
            }
        )
        game_list = { 
            game_link.text : 'http://www.own3d.tv' + game_link.attrib['href'] for game_link in game_links 
        }
        return game_list
    def get_rtmp_url(self, stream_id):
        '''
            possible rtmp servers
            rtmp://own3duslivefs.fplive.net/own3duslive-live <- almost never
            rtmp://own3deulivefs.fplive.net/own3deulive-live <- almost never

            rtmp://fml.2010.edgecastcdn.net:1935/202010 <- pretty stable.
            rtmp://owned.fc.llnwd.net:1935/owned <- pretty stable.
            
            problem is masked servers (${cdn1}, ${cdn2}), right now just
            guessing on one random edgecast cdn
            
            could probably retry on all known servers, but that would be really
            slow.
            
            from http://bogy.mine.nu/sc2/stream2vlc.php , with channel id :
                33356 (chaox) , hoster : own3d.tv
            "C:\rtmpdump-2.3\rtmpdump.exe" 
                -r "rtmp://own3duslivefs.fplive.net/own3duslive-live" 
                -f "WIN 11,1,102,55" 
                -W "http://static.ec.own3d.tv/player/Own3dPlayerV2_86.swf" 
                -p "http://www.own3d.tv/live/33356" 
                --live 
                -y "own3d.aonempatic_33356"
            
            -r|--rtmp     url     URL (e.g. rtmp://host[:port]/path)
            -f|--flashVer string  Flash version string (default: "WIN 10,0,32,18")
            -W|--swfVfy   url     URL to player swf file, compute hash/size automatically
            -p|--pageUrl  url     Web URL of played programme
            -v|--live             Save a live stream, no --resume (seeking) of live streams possible
            -y|--playpath path    Overrides the playpath parsed from rtmp url
        '''
        raw_data = self.get_response_data(self.LIVE_STREAM_CONFIG_URL %
                                          stream_id)
        xml_doc = utils.build_xml_tree(raw_data)

        channel = utils.do_xpath_query(xml_doc, '//channel')[0]
        item = utils.do_xpath_query(channel, '//item')[0]
        stream_item = utils.do_xpath_query(item, '//stream')[0]

        rtmp = item.attrib.get('base')

        # override if unknown
        if '${cdn1}' in rtmp:
            rtmp = 'rtmp://fml.2010.edgecastcdn.net:1935/202010'
        elif '${cdn2}' in rtmp:
            rtmp = 'rtmp://owned.fc.llnwd.net:1935/owned'

        #flashVer = 'WIN 11,1,102,55'
        #swfVfy   = 'http://static.ec.own3d.tv/player/Own3dPlayerV2_86.swf'
        pageUrl = 'http://www.own3d.tv/live/%d' % stream_id
        #live     = 'True'
        playpath = stream_item.attrib.get('name')

        stream_url = '%s pageUrl=%s Playpath=%s swfUrl=http://static.ec.own3d.tv/player/Own3dPlayerV2_86.swf swfVfy=True Live=True' % (
            rtmp, pageUrl, playpath)

        stream_object = StreamObject()
        stream_object.title = channel.attrib.get('name')
        stream_object.game = channel.attrib.get('description')
        stream_object.description = channel.attrib.get('description')
        stream_object.stream_id = stream_id
        stream_object.rtmp_url = stream_url

        return stream_object
 def get_live_streams(self, game):
     raw_data = self.get_response_data(self.LIST_LIVE_STREAMS_URL)
     xml_doc = utils.build_xml_tree(raw_data)
     items = utils.do_xpath_query(xml_doc,
                                  '//item[misc[@game = "%s"]]' % game)
     return self.build_stream_object_list(items)
    def get_rtmp_url(self, stream_id):
        '''
            possible rtmp servers
            rtmp://own3duslivefs.fplive.net/own3duslive-live <- almost never
            rtmp://own3deulivefs.fplive.net/own3deulive-live <- almost never

            rtmp://fml.2010.edgecastcdn.net:1935/202010 <- pretty stable.
            rtmp://owned.fc.llnwd.net:1935/owned <- pretty stable.
            
            problem is masked servers (${cdn1}, ${cdn2}), right now just
            guessing on one random edgecast cdn
            
            could probably retry on all known servers, but that would be really
            slow.
            
            from http://bogy.mine.nu/sc2/stream2vlc.php , with channel id :
                33356 (chaox) , hoster : own3d.tv
            "C:\rtmpdump-2.3\rtmpdump.exe" 
                -r "rtmp://own3duslivefs.fplive.net/own3duslive-live" 
                -f "WIN 11,1,102,55" 
                -W "http://static.ec.own3d.tv/player/Own3dPlayerV2_86.swf" 
                -p "http://www.own3d.tv/live/33356" 
                --live 
                -y "own3d.aonempatic_33356"
            
            -r|--rtmp     url     URL (e.g. rtmp://host[:port]/path)
            -f|--flashVer string  Flash version string (default: "WIN 10,0,32,18")
            -W|--swfVfy   url     URL to player swf file, compute hash/size automatically
            -p|--pageUrl  url     Web URL of played programme
            -v|--live             Save a live stream, no --resume (seeking) of live streams possible
            -y|--playpath path    Overrides the playpath parsed from rtmp url
        '''
        raw_data = self.get_response_data(self.LIVE_STREAM_CONFIG_URL % stream_id)
        xml_doc = utils.build_xml_tree(raw_data)

        channel = utils.do_xpath_query(xml_doc, '//channel')[0]
        item = utils.do_xpath_query(channel, '//item')[0]
        stream_item = utils.do_xpath_query(item, '//stream')[0]

        rtmp = item.attrib.get('base')
        
        # override if unknown
        if '${cdn1}' in rtmp:
            rtmp = 'rtmp://fml.2010.edgecastcdn.net:1935/202010'
        elif '${cdn2}' in rtmp:
            rtmp = 'rtmp://owned.fc.llnwd.net:1935/owned'
        
        #flashVer = 'WIN 11,1,102,55'
        #swfVfy   = 'http://static.ec.own3d.tv/player/Own3dPlayerV2_86.swf'
        pageUrl  = 'http://www.own3d.tv/live/%d' % stream_id
        #live     = 'True'
        playpath = stream_item.attrib.get('name')
        
        stream_url = '%s pageUrl=%s Playpath=%s swfUrl=http://static.ec.own3d.tv/player/Own3dPlayerV2_86.swf swfVfy=True Live=True' % (rtmp, pageUrl, playpath)
        
        stream_object = StreamObject()
        stream_object.title = channel.attrib.get('name')
        stream_object.game = channel.attrib.get('description')
        stream_object.description = channel.attrib.get('description')
        stream_object.stream_id = stream_id
        stream_object.rtmp_url = stream_url
        
        return stream_object
 def get_live_streams(self, game):
     raw_data = self.get_response_data(self.LIST_LIVE_STREAMS_URL)
     xml_doc = utils.build_xml_tree(raw_data)
     items = utils.do_xpath_query(xml_doc, '//item[misc[@game = "%s"]]' % game)
     return self.build_stream_object_list(items)