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
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
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
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
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
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
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
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
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
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
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
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
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)
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)