re-implement mangadex api myself

This commit is contained in:
franchioping 2024-07-22 23:01:29 +01:00
parent a4c70f454f
commit 9985525576
1 changed files with 70 additions and 20 deletions

View File

@ -1,33 +1,83 @@
import mangadex as md
import os import os
from dotenv import load_dotenv from dotenv import load_dotenv
import requests
load_dotenv() load_dotenv()
base_url = "https://api.mangadex.org"
class MangaWrapper:
def __init__(self): class Chapter:
self.auth = md.auth.Auth() def __init__(self, id: str, _base_url=base_url):
self.auth.login(os.environ.get("MANGADEX_USR"), self.id = id
os.environ.get("MANGADEX_PSWD"), self.base_url = _base_url
os.environ.get("MANGADEX_CLIENT"),
os.environ.get("MANGADEX_TOKEN") def _get_self(self):
r = requests.get(
f"{self.base_url}/chapter/{self.id}"
) )
self.manga = md.series.Manga(auth=self.auth) return r.json()["data"]
self.chapter = md.series.Chapter(auth=self.auth)
def search(self, title: str, limit: int = 10) -> list[md.series.Manga]: def get_chapter_num(self) -> str:
return self.manga.get_manga_list(title=title) return self._get_self()["attributes"]["chapter"]
def get_latest_chapter(self, manga_to_get: md.series.Manga) -> int: def get_chapter_url(self) -> str:
manga_feed = self.manga.manga_feed(manga_id=manga_to_get.manga_id) return self._get_self()["attributes"]["readableAt"]
print(manga_feed[0].chapter)
def __str__(self):
return str({
"chapter_num": self.get_chapter_num(),
})
class Manga:
def __init__(self, id: str, _base_url=base_url):
self.id = id
self.base_url = _base_url
def _get_self(self):
r = requests.get(
f"{self.base_url}/manga/{self.id}"
)
return r.json()["data"]
def get_title(self) -> str:
return self._get_self()["attributes"]["title"]
def get_latest_chap(self) -> Chapter:
return Chapter(self._get_self()["attributes"]["latestUploadedChapter"])
def __str__(self):
return str({
"title": self.get_title(),
"latest_chapter": str(self.get_latest_chap())
})
class MangaHandler:
def __init__(self):
self.base_url = base_url
def search(self, title: str) -> list[Manga]:
r = requests.get(
f"{self.base_url}/manga",
params={"title": title}
)
data = r.json()["data"]
manga_list: list[Manga] = []
for manga in data:
manga_id = manga["id"]
manga_list.append(Manga(manga_id))
return manga_list
def get_chapter(self, chapter_id: str):
r = requests.get(
f"{self.base_url}/chapter/{chapter_id}"
)
return r.json()["data"]
if __name__ == "__main__": if __name__ == "__main__":
mw = MangaWrapper() mh = MangaHandler()
manga = mw.search("Release That Witch")[0] print(mh.search("Release That Witch")[0])
print(manga.title)
mw.get_latest_chapter(manga)