forked from sch/Slixfeed
39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import slixfeed.fetch as fetch
|
||
|
from slixfeed.log import Logger
|
||
|
import sys
|
||
|
from urllib.parse import parse_qs, urlsplit
|
||
|
|
||
|
logger = Logger(__name__)
|
||
|
|
||
|
class BitTorrent:
|
||
|
|
||
|
# TODO Add support for eDonkey, Gnutella, Soulseek
|
||
|
async def get_magnet(link):
|
||
|
function_name = sys._getframe().f_code.co_name
|
||
|
logger.debug('{}: {}'.format(function_name, link))
|
||
|
parted_link = urlsplit(link)
|
||
|
queries = parse_qs(parted_link.query)
|
||
|
query_xt = queries["xt"][0]
|
||
|
if query_xt.startswith("urn:btih:"):
|
||
|
filename = queries["dn"][0]
|
||
|
checksum = query_xt[len("urn:btih:"):]
|
||
|
torrent = await fetch.magnet(link)
|
||
|
logger.debug('Attempting to retrieve {} ({})'
|
||
|
.format(filename, checksum))
|
||
|
if not torrent:
|
||
|
logger.debug('Attempting to retrieve {} from HTTP caching service'
|
||
|
.format(filename))
|
||
|
urls = [
|
||
|
'https://watercache.libertycorp.org/get/{}/{}',
|
||
|
'https://itorrents.org/torrent/{}.torrent?title={}',
|
||
|
'https://firecache.libertycorp.org/get/{}/{}',
|
||
|
'http://fcache63sakpihd44kxdduy6kgpdhgejgp323wci435zwy6kiylcnfad.onion/get/{}/{}'
|
||
|
]
|
||
|
for url in urls:
|
||
|
torrent = fetch.http(url.format(checksum, filename))
|
||
|
if torrent:
|
||
|
break
|
||
|
return torrent
|