aboutsummaryrefslogtreecommitdiff
path: root/src/due/anilist/collection.py
blob: 1103ec629418a0a0f41326ffb125f025ea6cd129 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import requests
from .utilities import user_id, user_name_to_id


def create_collection(anilist, type, username=None):
    current_collection = media_list_collection(anilist, type, username)
    current = []

    for list in current_collection["MediaListCollection"]["lists"]:
        current += list["entries"]

    return (current, current_collection["MediaListCollection"]["user"]["name"])


def media_list_collection(anilist, type, username=None):
    return requests.post(
        "https://graphql.anilist.co",
        json={
            "query": media_list_collection_query(
                user_id(anilist) if username is None else user_name_to_id(username),
                type,
            )
        },
        headers={
            "Authorization": anilist["token_type"] + " " + anilist["access_token"],
            "Content-Type": "application/json",
            "Accept": "application/json",
        },
    ).json()["data"]


def media_list_collection_query(user_id: int, type) -> str:
    return f"""{{
        MediaListCollection(userId: {user_id}, type: {"ANIME" if type == "ANIME" else "MANGA"}, status_not_in: [COMPLETED]) {{
            hasNextChunk
            lists {{
                entries {{
                    media {{
                        id
                        status
                        type
                        episodes
                        format
                        title {{ romaji english native }}
                        nextAiringEpisode {{ episode timeUntilAiring }}
                        mediaListEntry {{ progress }}
                        startDate {{ year }}
                    }}
                }}
            }}
            user {{ name }}
        }}
    }}"""