95 lines
2.6 KiB
Python
95 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
from base64 import b64decode
|
|
from pprint import pprint
|
|
from urllib.parse import urlencode, quote
|
|
from requests import get
|
|
import transmissionrpc
|
|
from imdbpie import Imdb
|
|
import time
|
|
import feedparser
|
|
import PTN
|
|
import sys
|
|
|
|
|
|
extratorrents = "http://extra.to"
|
|
|
|
default_trackers = [
|
|
'udp://glotorrents.pw:6969/announce',
|
|
'udp://tracker.openbittorrent.com:80',
|
|
'udp://tracker.coppersurfer.tk:6969',
|
|
'udp://tracker.leechers-paradise.org:6969',
|
|
'udp://p4p.arenabg.ch:1337',
|
|
'udp://tracker.internetwarriors.net:1337',
|
|
'udp://tracker.opentrackr.org:1337/announce'
|
|
]
|
|
|
|
r = get("https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt")
|
|
|
|
best_trackers = r.text
|
|
|
|
for tracker in best_trackers.split("\n"):
|
|
tracker = tracker.strip()
|
|
if tracker:
|
|
default_trackers.append(tracker)
|
|
|
|
def hash_to_magnet(infoHash, name=None, trackers=None):
|
|
try:
|
|
b64decode(infoHash)
|
|
except:
|
|
raise Exception("Invalid infoHash")
|
|
magnet = {
|
|
"dn": name,
|
|
"tr": list(default_trackers)
|
|
}
|
|
if not name:
|
|
del magnet["dn"]
|
|
if trackers:
|
|
magnet["tr"].extend(trackers)
|
|
return "magnet:?xt=urn:btih:{}&".format(infoHash) + urlencode(magnet, doseq=True)
|
|
|
|
|
|
|
|
def search_extra(query_term):
|
|
query_term = quote(query_term + " ettv")
|
|
url = f"{extratorrents}/rss.xml?type=search&search={query_term}"
|
|
entries = feedparser.parse(url)["entries"]
|
|
for e in entries:
|
|
info = {
|
|
"infoHash": e["info_hash"],
|
|
"raw_title": e["title"],
|
|
"seeders": e["seeders"],
|
|
"leechers": e["leechers"],
|
|
"size": e["size"]
|
|
}
|
|
info.update(PTN.parse(e["title"]))
|
|
yield info
|
|
|
|
|
|
magnet = hash_to_magnet("6a02592d2bbc069628cd5ed8a54f88ee06ac0ba5",
|
|
trackers=(
|
|
"http://bt1.archive.org:6969/announce",
|
|
"http://bt2.archive.org:6969/announce"
|
|
)
|
|
)
|
|
|
|
|
|
search = "the flash s03e02"
|
|
search = sys.argv[1]
|
|
#pprint(list(search_extra(search)))
|
|
best = sorted(search_extra(search), key=lambda e: e["seeders"])[0]
|
|
pprint(best)
|
|
|
|
magnet = hash_to_magnet(best["infoHash"],
|
|
name=search)
|
|
|
|
tc = transmissionrpc.Client("localhost")
|
|
t = tc.add_torrent(magnet)
|
|
hashString = t.hashString
|
|
while True:
|
|
t = tc.get_torrent(hashString)
|
|
print(t.name, t.status, t.metadataPercentComplete*100, t.percentDone*100)
|
|
if t.metadataPercentComplete == 1:
|
|
pprint(t.files())
|
|
exit(0)
|
|
time.sleep(1)
|