47 lines
1.0 KiB
Python
47 lines
1.0 KiB
Python
import typing
|
|
|
|
from requests import Session
|
|
|
|
from al_arr_sync.types import AnyDict
|
|
|
|
|
|
USER_WATCHING_QUERY = """
|
|
query ($userName: String) {
|
|
MediaListCollection(userName: $userName, type:ANIME, status:CURRENT) {
|
|
lists {
|
|
entries {
|
|
media {
|
|
title {
|
|
english
|
|
}
|
|
format
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
|
|
|
|
class AniListClient:
|
|
def __init__(self) -> None:
|
|
self.graphql_api_url = "https://graphql.anilist.co/"
|
|
self.http_session = Session()
|
|
|
|
def currently_watching(self, username: str) -> typing.List[AnyDict]:
|
|
resp = self.http_session.post(
|
|
self.graphql_api_url,
|
|
json={"query": USER_WATCHING_QUERY, "variables": {"userName": username}},
|
|
)
|
|
resp_data: AnyDict = resp.json()
|
|
if errors := resp_data.get("errors"):
|
|
raise Exception(errors)
|
|
|
|
media = [
|
|
entry
|
|
for lst in resp_data["data"]["MediaListCollection"]["lists"]
|
|
for entry in lst["entries"]
|
|
]
|
|
|
|
return media
|