Exemple #1
0
    def get_torrent(self, infohash = None, player_id = None):
        if infohash is None and player_id is None:
            raise ValueError, 'Infohash or player id must be specified'
        params = {}
        if player_id is not None:
            params['pid'] = player_id
        elif infohash is not None:
            params['infohash'] = b64encode(infohash)
        response = self.send_request('gettorrent', params, use_random=True)
        if response is None:
            return
        torrent_data = domutils.get_tag_value(response, 'torrent')
        if torrent_data is None:
            return
        torrent_checksum = domutils.get_tag_value(response, 'checksum')
        if torrent_checksum is None:
            return
        torrent_data = b64decode(torrent_data)
        buf = StringIO(torrent_data)
        tdef = TorrentDef._read(buf)
        player_data = {'tdef': tdef,
         'checksum': binascii.unhexlify(torrent_checksum)}
        if player_id is not None:
            try:
                developer_id = int(domutils.get_tag_value(response, 'developer_id'))
                affiliate_id = int(domutils.get_tag_value(response, 'affiliate_id'))
                zone_id = int(domutils.get_tag_value(response, 'zone_id'))
                player_data['developer_id'] = developer_id
                player_data['affiliate_id'] = affiliate_id
                player_data['zone_id'] = zone_id
            except:
                if DEBUG:
                    print_exc()

        return player_data
Exemple #2
0
    def get_user_level(self, login, password, action, device_id, hardware_key):
        if hardware_key is None:
            hardware_key = ''
        device_key = hashlib.sha1(device_id + hardware_key).hexdigest()
        params = {
            'l': login,
            'p': hashlib.sha1(password).hexdigest(),
            'h': b64encode(hardware_key),
            action: device_key
        }
        response = self.send_request('getuserlevel',
                                     params,
                                     use_random=True,
                                     server_type=SERVER_TYPE_AUTH)
        if response is None:
            if DEBUG:
                log('tsservice::get_user_level: request failed')
            return
        user_level = domutils.get_tag_value(response, 'level')
        if user_level is None:
            return
        try:
            user_level = int(user_level)
        except:
            if DEBUG:
                log('tsservice::get_user_level: bad user_level:', user_level)
            return

        return user_level
Exemple #3
0
    def send_torrent(self, torrent_data, developer_id = None, affiliate_id = None, zone_id = None, protected = False, infohash = None):
        params = {}
        if developer_id is not None:
            params['d'] = str(developer_id)
        if affiliate_id is not None:
            params['a'] = str(affiliate_id)
        if zone_id is not None:
            params['z'] = str(zone_id)
        if protected:
            params['protected'] = '1'
        if infohash is not None:
            params['infohash'] = binascii.hexlify(infohash)
        response = self.send_request('puttorrent', params, data=torrent_data, content_type='application/octet-stream', use_random=True)
        if response is None:
            if DEBUG:
                log('tsservice::send_torrent: request failed')
            return
        try:
            player_id = domutils.get_tag_value(response, 'id')
        except Exception as e:
            if DEBUG:
                log('tsservice::send_torrent: failed to parse response: ' + str(e))
            return

        return player_id
Exemple #4
0
    def check_premium_status(self, provider_key, content_id, infohash):
        params = {
            'p': provider_key,
            'c': content_id,
            'i': binascii.hexlify(infohash)
        }
        response = self.send_request('checkpremiumstatus',
                                     params,
                                     use_random=True,
                                     server_type=SERVER_TYPE_PREMIUM_SERVICE)
        if response is None:
            if DEBUG:
                log('tsservice::check_premium_status: request failed')
            return
        status = domutils.get_tag_value(response, 'status')
        if status is None:
            return
        try:
            status = int(status)
        except:
            if DEBUG:
                log('tsservice::check_premium_status: bad status:', status)
            return

        return status
Exemple #5
0
    def get_torrent(self, infohash=None, player_id=None):
        if infohash is None and player_id is None:
            raise ValueError, 'Infohash or player id must be specified'
        params = {}
        if player_id is not None:
            params['pid'] = player_id
        elif infohash is not None:
            params['infohash'] = b64encode(infohash)
        response = self.send_request('gettorrent', params, use_random=True)
        if response is None:
            return
        torrent_data = domutils.get_tag_value(response, 'torrent')
        if torrent_data is None:
            return
        torrent_checksum = domutils.get_tag_value(response, 'checksum')
        if torrent_checksum is None:
            return
        torrent_data = b64decode(torrent_data)
        buf = StringIO(torrent_data)
        tdef = TorrentDef._read(buf)
        player_data = {
            'tdef': tdef,
            'checksum': binascii.unhexlify(torrent_checksum)
        }
        if player_id is not None:
            try:
                developer_id = int(
                    domutils.get_tag_value(response, 'developer_id'))
                affiliate_id = int(
                    domutils.get_tag_value(response, 'affiliate_id'))
                zone_id = int(domutils.get_tag_value(response, 'zone_id'))
                player_data['developer_id'] = developer_id
                player_data['affiliate_id'] = affiliate_id
                player_data['zone_id'] = zone_id
            except:
                if DEBUG:
                    print_exc()

        return player_data
Exemple #6
0
 def get_infohash_from_url(self, url):
     params = {'url': b64encode(url)}
     response = self.send_request('getu2t', params, use_random=True)
     if response is None:
         if DEBUG:
             log('tsservice::get_infohash_from_url: request failed: url', url)
         return
     infohash = domutils.get_tag_value(response, 'infohash')
     if infohash is None:
         return
     infohash = b64decode(infohash)
     if DEBUG:
         log('tsservice::get_infohash_from_url: got data: infohash', binascii.hexlify(infohash))
     return infohash
Exemple #7
0
 def get_infohash_from_adid(self, adid):
     params = {'id': str(adid)}
     response = self.send_request('geta2i', params, use_random=True)
     if response is None:
         if DEBUG:
             log('tsservice::get_infohash_from_adid: request failed: adid', adid)
         return
     infohash = domutils.get_tag_value(response, 'infohash')
     if infohash is None:
         return
     infohash = b64decode(infohash)
     if DEBUG:
         log('tsservice::get_infohash_from_adid: got data: infohash', binascii.hexlify(infohash))
     return infohash
Exemple #8
0
 def get_infohash_from_adid(self, adid):
     params = {'id': str(adid)}
     response = self.send_request('geta2i', params, use_random=True)
     if response is None:
         if DEBUG:
             log('tsservice::get_infohash_from_adid: request failed: adid',
                 adid)
         return
     infohash = domutils.get_tag_value(response, 'infohash')
     if infohash is None:
         return
     infohash = b64decode(infohash)
     if DEBUG:
         log('tsservice::get_infohash_from_adid: got data: infohash',
             binascii.hexlify(infohash))
     return infohash
Exemple #9
0
 def get_infohash_from_url(self, url):
     params = {'url': b64encode(url)}
     response = self.send_request('getu2t', params, use_random=True)
     if response is None:
         if DEBUG:
             log('tsservice::get_infohash_from_url: request failed: url',
                 url)
         return
     infohash = domutils.get_tag_value(response, 'infohash')
     if infohash is None:
         return
     infohash = b64decode(infohash)
     if DEBUG:
         log('tsservice::get_infohash_from_url: got data: infohash',
             binascii.hexlify(infohash))
     return infohash
Exemple #10
0
    def check_premium_status(self, provider_key, content_id, infohash):
        params = {'p': provider_key,
         'c': content_id,
         'i': binascii.hexlify(infohash)}
        response = self.send_request('checkpremiumstatus', params, use_random=True, server_type=SERVER_TYPE_PREMIUM_SERVICE)
        if response is None:
            if DEBUG:
                log('tsservice::check_premium_status: request failed')
            return
        status = domutils.get_tag_value(response, 'status')
        if status is None:
            return
        try:
            status = int(status)
        except:
            if DEBUG:
                log('tsservice::check_premium_status: bad status:', status)
            return

        return status
Exemple #11
0
    def get_user_level(self, login, password, action, device_id, hardware_key):
        if hardware_key is None:
            hardware_key = ''
        device_key = hashlib.sha1(device_id + hardware_key).hexdigest()
        params = {'l': login,
         'p': hashlib.sha1(password).hexdigest(),
         'h': b64encode(hardware_key),
         action: device_key}
        response = self.send_request('getuserlevel', params, use_random=True, server_type=SERVER_TYPE_AUTH)
        if response is None:
            if DEBUG:
                log('tsservice::get_user_level: request failed')
            return
        user_level = domutils.get_tag_value(response, 'level')
        if user_level is None:
            return
        try:
            user_level = int(user_level)
        except:
            if DEBUG:
                log('tsservice::get_user_level: bad user_level:', user_level)
            return

        return user_level
Exemple #12
0
    def send_torrent(self,
                     torrent_data,
                     developer_id=None,
                     affiliate_id=None,
                     zone_id=None,
                     protected=False,
                     infohash=None):
        params = {}
        if developer_id is not None:
            params['d'] = str(developer_id)
        if affiliate_id is not None:
            params['a'] = str(affiliate_id)
        if zone_id is not None:
            params['z'] = str(zone_id)
        if protected:
            params['protected'] = '1'
        if infohash is not None:
            params['infohash'] = binascii.hexlify(infohash)
        response = self.send_request('puttorrent',
                                     params,
                                     data=torrent_data,
                                     content_type='application/octet-stream',
                                     use_random=True)
        if response is None:
            if DEBUG:
                log('tsservice::send_torrent: request failed')
            return
        try:
            player_id = domutils.get_tag_value(response, 'id')
        except Exception as e:
            if DEBUG:
                log('tsservice::send_torrent: failed to parse response: ' +
                    str(e))
            return

        return player_id
Exemple #13
0
    def check_torrent(self, torrent_checksum = None, infohash = None, player_id = None, developer_id = 0, affiliate_id = 0, zone_id = 0):
        if infohash is None and player_id is None:
            raise ValueError, 'Infohash or player id must be specified'
        params = {}
        if player_id is not None:
            params['pid'] = player_id
        elif infohash is not None:
            if torrent_checksum is not None:
                params['checksum'] = binascii.hexlify(torrent_checksum)
            params['infohash'] = b64encode(infohash)
            params['d'] = str(developer_id)
            params['a'] = str(affiliate_id)
            params['z'] = str(zone_id)
        response = self.send_request('checktorrent', params, use_random=True)
        if response is None:
            return
        player_id = domutils.get_tag_value(response, 'id')
        metadata = None
        http_seeds = None
        if player_id is not None:
            root = response.documentElement
            e_http_seeds = domutils.get_single_element(root, 'httpseeds', False)
            if e_http_seeds is not None:
                http_seeds = []
                e_urls = domutils.get_children_by_tag_name(e_http_seeds, 'url')
                for e_url in e_urls:
                    url = domutils.get_node_text(e_url)
                    http_seeds.append(url)

            e_metadata = domutils.get_single_element(root, 'metadata', False)
            if e_metadata is not None:
                metadata = {}
                e_duration = domutils.get_single_element(e_metadata, 'duration', False)
                e_prebuf_pieces = domutils.get_single_element(e_metadata, 'prebuf_pieces', False)
                e_rpmp4mt = domutils.get_single_element(e_metadata, 'rpmp4mt', False)
                if e_duration is not None:
                    metadata['duration'] = {}
                    files = domutils.get_children_by_tag_name(e_duration, 'file')
                    for f in files:
                        idx = f.getAttribute('id')
                        try:
                            idx = int(idx)
                        except:
                            continue

                        value = domutils.get_node_text(f)
                        metadata['duration']['f' + str(idx)] = value

                if e_prebuf_pieces is not None:
                    metadata['prebuf_pieces'] = {}
                    files = domutils.get_children_by_tag_name(e_prebuf_pieces, 'file')
                    for f in files:
                        idx = f.getAttribute('id')
                        try:
                            idx = int(idx)
                        except:
                            continue

                        value = domutils.get_node_text(f)
                        metadata['prebuf_pieces']['f' + str(idx)] = value

                if e_rpmp4mt is not None:
                    metadata['rpmp4mt'] = {}
                    files = domutils.get_children_by_tag_name(e_rpmp4mt, 'file')
                    for f in files:
                        idx = f.getAttribute('id')
                        try:
                            idx = int(idx)
                        except:
                            continue

                        value = domutils.get_node_text(f)
                        metadata['rpmp4mt']['f' + str(idx)] = value

                if DEBUG:
                    log('tsservice::check_torrent: got metadata: metadata', metadata)
        return (player_id, metadata, http_seeds)
Exemple #14
0
    def check_torrent(self,
                      torrent_checksum=None,
                      infohash=None,
                      player_id=None,
                      developer_id=0,
                      affiliate_id=0,
                      zone_id=0):
        if infohash is None and player_id is None:
            raise ValueError, 'Infohash or player id must be specified'
        params = {}
        if player_id is not None:
            params['pid'] = player_id
        elif infohash is not None:
            if torrent_checksum is not None:
                params['checksum'] = binascii.hexlify(torrent_checksum)
            params['infohash'] = b64encode(infohash)
            params['d'] = str(developer_id)
            params['a'] = str(affiliate_id)
            params['z'] = str(zone_id)
        response = self.send_request('checktorrent', params, use_random=True)
        if response is None:
            return
        player_id = domutils.get_tag_value(response, 'id')
        metadata = None
        http_seeds = None
        if player_id is not None:
            root = response.documentElement
            e_http_seeds = domutils.get_single_element(root, 'httpseeds',
                                                       False)
            if e_http_seeds is not None:
                http_seeds = []
                e_urls = domutils.get_children_by_tag_name(e_http_seeds, 'url')
                for e_url in e_urls:
                    url = domutils.get_node_text(e_url)
                    http_seeds.append(url)

            e_metadata = domutils.get_single_element(root, 'metadata', False)
            if e_metadata is not None:
                metadata = {}
                e_duration = domutils.get_single_element(
                    e_metadata, 'duration', False)
                e_prebuf_pieces = domutils.get_single_element(
                    e_metadata, 'prebuf_pieces', False)
                e_rpmp4mt = domutils.get_single_element(
                    e_metadata, 'rpmp4mt', False)
                if e_duration is not None:
                    metadata['duration'] = {}
                    files = domutils.get_children_by_tag_name(
                        e_duration, 'file')
                    for f in files:
                        idx = f.getAttribute('id')
                        try:
                            idx = int(idx)
                        except:
                            continue

                        value = domutils.get_node_text(f)
                        metadata['duration']['f' + str(idx)] = value

                if e_prebuf_pieces is not None:
                    metadata['prebuf_pieces'] = {}
                    files = domutils.get_children_by_tag_name(
                        e_prebuf_pieces, 'file')
                    for f in files:
                        idx = f.getAttribute('id')
                        try:
                            idx = int(idx)
                        except:
                            continue

                        value = domutils.get_node_text(f)
                        metadata['prebuf_pieces']['f' + str(idx)] = value

                if e_rpmp4mt is not None:
                    metadata['rpmp4mt'] = {}
                    files = domutils.get_children_by_tag_name(
                        e_rpmp4mt, 'file')
                    for f in files:
                        idx = f.getAttribute('id')
                        try:
                            idx = int(idx)
                        except:
                            continue

                        value = domutils.get_node_text(f)
                        metadata['rpmp4mt']['f' + str(idx)] = value

                if DEBUG:
                    log('tsservice::check_torrent: got metadata: metadata',
                        metadata)
        return (player_id, metadata, http_seeds)