1
0
personal-data/personal_data/fetchers/myanimelist.py
2025-05-14 23:50:13 +02:00

37 lines
1.0 KiB
Python

import dataclasses
import logging
from collections.abc import Iterator
from clients import init_client
from clients.myanimelist import MyAnimeListAnime, MyAnimeListClient, MyAnimeListSong
from personal_data.data import DeduplicateMode, Scraper
from .. import secrets
logger = logging.getLogger(__name__)
def client(session):
return init_client(MyAnimeListClient, session, secrets.secrets, throws=True)
@dataclasses.dataclass(frozen=True)
class MyAnimeList(Scraper):
dataset_name = 'myanimelist_anime'
deduplicate_mode = DeduplicateMode.BY_FIRST_COLUMN
def scrape(self) -> Iterator[MyAnimeListAnime]:
yield from client(self.session).get_my_anime_list()
@dataclasses.dataclass(frozen=True)
class MyAnimeListSongs(Scraper):
dataset_name = 'myanimelist_songs'
deduplicate_mode = DeduplicateMode.BY_FIRST_COLUMN
def scrape(self) -> Iterator[MyAnimeListSong]:
my_client = client(self.session)
for anime in my_client.get_my_anime_list():
yield from my_client.get_songs_for_anime(anime)