randydev commited on
Commit
b51f32d
·
verified ·
1 Parent(s): ed49645

Create nyaa_si.py

Browse files
Files changed (1) hide show
  1. torrents/nyaa_si.py +87 -0
torrents/nyaa_si.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 NYAASI
7
+
8
+
9
+ class NyaaSi:
10
+ def __init__(self):
11
+ self.BASE_URL = NYAASI
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
+ for tr in (soup.find("table")).find_all("tr")[1:]:
21
+ td = tr.find_all("td")
22
+ name = td[1].find_all("a")[-1].text
23
+ url = td[1].find_all("a")[-1]["href"]
24
+ magnet_and_torrent = td[2].find_all("a")
25
+ magnet = magnet_and_torrent[-1]["href"]
26
+ torrent = self.BASE_URL + magnet_and_torrent[0]["href"]
27
+ size = td[3].text
28
+ date = td[4].text
29
+ seeders = td[5].text
30
+ leechers = td[6].text
31
+ downloads = td[7].text
32
+ category = td[0].find("a")["title"].split("-")[0].strip()
33
+ my_dict["data"].append(
34
+ {
35
+ "name": name,
36
+ "size": size,
37
+ "seeders": seeders,
38
+ "leechers": leechers,
39
+ "category": category,
40
+ "hash": re.search(
41
+ r"([{a-f\d,A-F\d}]{32,40})\b", magnet
42
+ ).group(0),
43
+ "magnet": magnet,
44
+ "torrent": torrent,
45
+ "url": self.BASE_URL + url,
46
+ "date": date,
47
+ "downloads": downloads,
48
+ }
49
+ )
50
+ if len(my_dict["data"]) == self.LIMIT:
51
+ break
52
+
53
+ try:
54
+ ul = soup.find("ul", class_="pagination")
55
+ tpages = ul.find_all("a")[-2].text
56
+ current_page = (ul.find("li", class_="active")).find("a").text
57
+ my_dict["current_page"] = int(current_page)
58
+ my_dict["total_pages"] = int(tpages)
59
+ except:
60
+ my_dict["current_page"] = None
61
+ my_dict["total_pages"] = None
62
+ return my_dict
63
+ except:
64
+ return None
65
+
66
+ async def search(self, query, page, limit):
67
+ async with aiohttp.ClientSession() as session:
68
+ start_time = time.time()
69
+ self.LIMIT = limit
70
+ url = self.BASE_URL + "/?f=0&c=0_0&q={}&p={}".format(query, page)
71
+ return await self.parser_result(start_time, url, session)
72
+
73
+ async def parser_result(self, start_time, url, session):
74
+ html = await Scraper().get_all_results(session, url)
75
+ results = self._parser(html)
76
+ if results is not None:
77
+ results["time"] = time.time() - start_time
78
+ results["total"] = len(results["data"])
79
+ return results
80
+ return results
81
+
82
+ async def recent(self, category, page, limit):
83
+ async with aiohttp.ClientSession() as session:
84
+ start_time = time.time()
85
+ self.LIMIT = limit
86
+ url = self.BASE_URL
87
+ return await self.parser_result(start_time, url, session)