def add_trackers(self, result): """ Adds public trackers to either torrent file or magnet link :param result: SearchResult :return: SearchResult """ try: trackers_list = self.session.get('https://cdn.sickrage.ca/torrent_trackers/').text.split() except Exception: trackers_list = [] if trackers_list: # adds public torrent trackers to magnet url if result.url.startswith('magnet:'): if not result.url.endswith('&tr='): result.url += '&tr=' result.url += '&tr='.join(trackers_list) # adds public torrent trackers to content if result.content: decoded_data = bdecode(result.content) if not decoded_data.get('announce-list'): decoded_data['announce-list'] = [] for tracker in trackers_list: if tracker not in decoded_data['announce-list']: decoded_data['announce-list'].append([str(tracker)]) result.content = bencode(decoded_data) return result
def _get_torrent_hash(result): if result.url.startswith('magnet'): result.hash = re.findall(r'urn:btih:([\w]{32,40})', result.url)[0] if len(result.hash) == 32: result.hash = b16encode(b32decode(result.hash)).lower() else: if not result.content: sickrage.app.log.warning('Torrent without content') raise Exception('Torrent without content') try: torrent_bdecode = bdecode(result.content) except BencodeError: sickrage.app.log.warning('Unable to bdecode torrent') sickrage.app.log.debug('Torrent bencoded data: %r' % result.content) raise try: info = torrent_bdecode["info"] except Exception: sickrage.app.log.warning('Unable to find info field in torrent') raise result.hash = sha1(bencode(info)).hexdigest() return result
def _hash_info(info): info_bencode = bencode(info) info_hash = sha1(info_bencode).digest() return info_hash