Exemplo n.º 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
Exemplo n.º 2
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
Exemplo n.º 3
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
Exemplo n.º 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
Exemplo n.º 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
Exemplo n.º 6
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
Exemplo n.º 7
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
Exemplo n.º 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
Exemplo n.º 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
Exemplo n.º 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
Exemplo n.º 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
Exemplo n.º 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
Exemplo n.º 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)
Exemplo n.º 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)