add type checking, rework to use nyaapy api wrapper

This commit is contained in:
2025-05-06 20:50:43 +02:00
parent 0eb4256111
commit a3a96b054e

View File

@@ -1,5 +1,5 @@
# Nyaa.si will be parsed using feedparser, as they provide a RSS feed.
from komsuite_nyaapy import Nyaa
import time
from komsuite_nyaapy import Nyaa, Torrent
from natsort import natsorted
import re
from komconfig import KomConfig
@@ -10,25 +10,34 @@ log.add("logs/nyaasi.log", rotation="1 week")
config = KomConfig()
class NyaaFeed(Nyaa):
class NyaaFeed:
def __init__(self) -> None:
super().__init__()
pass
def list_volumes(self, inpt) -> list[int]:
volumes = []
inpt = inpt[0].replace("v", "")
def list_volumes(self, input: str) -> list[int]:
volumes: list[int] = []
input = input[0].replace("v", "")
if "-" in inpt:
start, end = inpt.split("-")
if "-" in input:
start, end = input.split("-")
for i in range(int(start), int(end) + 1):
volumes.append(i)
else:
volumes.append(int(inpt))
volumes.append(int(input))
return natsorted(volumes)
def search(self, title: str):
def search(self, title: str) -> list[Torrent]:
def __search(title: str):
return Nyaa().search(title, 3, 1)
regex = r"\b(v\d{2,3}-\d{2,3}|v\d{2,3}-v\d{2,3}|\d{2}|\d{2}-\d{2}|v\d{2,3})\b"
dataset = super().search(title, 3, 1)
dataset = None
while dataset is None:
try:
dataset = __search(title)
except:
time.sleep(5)
datalist = []
if dataset is None:
return datalist
@@ -39,37 +48,42 @@ class NyaaFeed(Nyaa):
"Skipping {}, Reason: Chapters disabled".format(entry.name)
)
continue
data = {}
data["title"] = entry.name
if any(
x in data["title"].lower() for x in config.komgrabber.skip_parameters
):
log.info("Skipping {}".format(data["title"]))
name = entry.name
skip_parameters = config.komgrabber.skip_parameters
skip_parameters.extend(config.komgrabber.manga.skip_parameters)
if any(x in name.lower() for x in skip_parameters):
log.info("Skipping {}".format(name))
continue
data["volumes"] = re.findall(regex, data["title"])
volumes = re.findall(regex, name)
try:
match = re.match(
r"^(.*?)\s(vol\.\s\d{2})|(v\d{2,3})", data["title"].lower()
)
match = re.match(r"^(.*?)\s(vol\.\s\d{2})|(v\d{2,3})", name.lower())
if match:
data["title"] = match.group(1)
name = match.group(1)
except AttributeError:
# chapter check
try:
match = re.findall(r"(?<!\d)\d{2,3}(?!\d)", data["title"])
match = re.findall(r"(?<!\d)\d{2,3}(?!\d)", name)
print("Matched chapter: {}".format(match))
print("Found Chapters only, skipping")
continue
except AttributeError:
pass
data["volumes"] = (
self.list_volumes(data["volumes"]) if data["volumes"] else [0]
volumes = self.list_volumes(volumes) if volumes else [0]
download_url = entry.download_url
seeders = entry.seeders
size = entry.size
data = Torrent(
name=name,
download_url=download_url,
seeders=seeders,
size=size,
volumes=volumes,
)
data["link"] = entry.download_url
data["seeders"] = entry.seeders
data["filesize"] = entry.size
# print(data)
datalist.append(data)
log.debug("Found: {}, volumes: {}".format(data.name, data.volumes))
log.success("Found {} entries".format(len(datalist)))
return datalist