randydev commited on
Commit
a9b380e
·
verified ·
1 Parent(s): 6f8cb9a

Create zooqle.py

Browse files
Files changed (1) hide show
  1. torrents/zooqle.py +78 -0
torrents/zooqle.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+ import time
3
+ import aiohttp
4
+ from bs4 import BeautifulSoup
5
+ from helper.html_scraper import Scraper
6
+ from constants.base_url import ZOOQLE
7
+
8
+
9
+ class Zooqle:
10
+ def __init__(self):
11
+ self.BASE_URL = ZOOQLE
12
+ self.LIMIT = None
13
+
14
+ def _parser(self, htmls):
15
+ try:
16
+ for html in htmls:
17
+ soup = BeautifulSoup(html, "html.parser")
18
+
19
+ my_dict = {"data": []}
20
+
21
+ for tr in soup.find_all("tr")[1:]:
22
+ td = tr.find_all("td")
23
+ name = td[1].find("a").get_text(strip=True)
24
+ if name != "":
25
+ magnet = td[2].find_all("a")[1]["href"]
26
+ try:
27
+ size = td[3].find_all("div")[1].text
28
+ except IndexError:
29
+ size = None
30
+ url = td[1].find_all("a")[0]["href"]
31
+ date = td[4].get_text(strip=True)
32
+ seeders_leechers = td[5].find("div")["title"].split("|")
33
+ seeders = seeders_leechers[0].replace("Seeders: ", "").strip()
34
+ leechers = seeders_leechers[1].replace("Leechers: ", "").strip()
35
+ my_dict["data"].append(
36
+ {
37
+ "name": name,
38
+ "size": size,
39
+ "seeders": seeders,
40
+ "leechers": leechers,
41
+ "hash": re.search(
42
+ r"([{a-f\d,A-F\d}]{32,40})\b", magnet
43
+ ).group(0),
44
+ "magnet": magnet,
45
+ "url": self.BASE_URL + url,
46
+ "date": date,
47
+ }
48
+ )
49
+ if len(my_dict["data"]) == self.LIMIT:
50
+ break
51
+ try:
52
+ ul = soup.find("ul", class_="pagination")
53
+ tpages = ul.find_all("a")[-3].text
54
+ current_page = (ul.find("li", class_="active")).find("a").text
55
+ my_dict["current_page"] = int(current_page)
56
+ my_dict["total_pages"] = int(tpages)
57
+ except:
58
+ my_dict["current_page"] = None
59
+ my_dict["total_pages"] = None
60
+ return my_dict
61
+ except:
62
+ return None
63
+
64
+ async def search(self, query, page, limit):
65
+ async with aiohttp.ClientSession() as session:
66
+ start_time = time.time()
67
+ self.LIMIT = limit
68
+ url = self.BASE_URL + "/search?pg={1}&q={0}&v=t".format(query, page)
69
+ return await self.parser_result(start_time, url, session)
70
+
71
+ async def parser_result(self, start_time, url, session):
72
+ html = await Scraper().get_all_results(session, url)
73
+ results = self._parser(html)
74
+ if results is not None:
75
+ results["time"] = time.time() - start_time
76
+ results["total"] = len(results["data"])
77
+ return results
78
+ return results