# VERSION: 1.0
# AUTHORS: LightDestory (https://github.com/LightDestory)
import re
from helpers import download_file, retrieve_url
from novaprinter import prettyPrinter
from time import sleep
from datetime import datetime
class torrentgalaxy(object):
url = "https://torrentgalaxy.one/"
name = "TorrentGalaxy"
supported_categories = {
"all": "",
"movies": "Movies",
"tv": "TV",
"music": "Music",
"games": "Games",
"anime": "Anime",
"software": "Apps",
"books": "Books",
}
class HTMLParser:
def __init__(self, url):
self.url = url
self.noTorrents = False
def feed(self, html):
self.noTorrents = False
torrents = self.__findTorrents(html)
if len(torrents) == 0:
self.noTorrents = True
return
for torrent in range(len(torrents)):
data = {
"link": torrents[torrent][0],
"name": torrents[torrent][1],
"size": torrents[torrent][2],
"seeds": torrents[torrent][3],
"leech": torrents[torrent][4],
"engine_url": self.url,
"desc_link": torrents[torrent][5],
"pub_date": torrents[torrent][6],
}
prettyPrinter(data)
def __findTorrents(self, html):
torrents = []
trs = re.findall(
r"
\s?
", html
)
for tr in trs:
url_titles = re.search(
r"(.+?).+?href=\"(.+?)\".+?([0-9\,\.]+ (?:TB|GB|MB|KB)).+?green\".+?([0-9.,]+).+?>([0-9.,]+)",
tr,
)
if url_titles:
# Get Unix timestamp if possible using datetime.timestamp() function, otherwise set it to -1
timestamp = -1
generic_url = "{0}{1}".format(self.url[:-1], url_titles.group(2))
torrent_data = [
generic_url,
url_titles.group(1),
url_titles.group(3),
url_titles.group(4),
url_titles.group(5),
generic_url,
timestamp,
]
torrents.append(torrent_data)
return torrents
def download_torrent(self, info):
torrent_page = re.sub(r"\s+", " ", retrieve_url(info)).strip()
download_link = re.search(
r"href=\"(https?://itorrents.+?)\?.+?\"", torrent_page
)
if download_link:
print(download_file(download_link.groups(1)[0]))
else:
raise Exception("Download link not found")
def search(self, what, cat="all"):
cat = "" if cat == "all" else f":category:{self.supported_categories[cat]}"
parser = self.HTMLParser(self.url)
current_page = 1
while True:
url = "{0}get-posts/keywords:{1}{2}/?page={3}".format(
self.url, what, cat, current_page
)
html = re.sub(r"\s+", " ", retrieve_url(url)).strip()
parser.feed(html)
if parser.noTorrents:
break
current_page += 1
# Always set a sleep(3) after each request to the search engine website, otherwise you might get banned by the search engine.
sleep(3)