aboutsummaryrefslogtreecommitdiff
path: root/src/due/media.py
blob: 5dde30394595b3a296d7738785fda25caaabedf3 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import requests


def user_id(anilist):
    return int(
        requests.post(
            "https://graphql.anilist.co",
            json={"query": "{ Viewer { id } }"},
            headers={
                "Authorization": anilist["token_type"] + " " + anilist["access_token"],
                "Content-Type": "application/json",
                "Accept": "application/json",
            },
        ).json()["data"]["Viewer"]["id"]
    )


def user_name_to_id(name):
    return int(
        requests.post(
            "https://graphql.anilist.co",
            json={"query": f'{{ User(name: "{name}") {{ id }} }}'},
            headers={
                "Content-Type": "application/json",
                "Accept": "application/json",
            },
        ).json()["data"]["User"]["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(anilist, pageNumber):
#     return requests.post(
#         "https://graphql.anilist.co",
#         json={"query": media_list_query(user_id(anilist), pageNumber)},
#         headers={
#             "Authorization": anilist["token_type"] + " " + anilist["access_token"],
#             "Content-Type": "application/json",
#             "Accept": "application/json",
#         },
#     ).json()["data"]


# def media_list_query(user_id: int, page_number: int) -> str:
#     return f"""{{
#         Page(page: {page_number}) {{
#             mediaList(userId: {user_id}, status_not_in: [COMPLETED]) {{
#                 media {{
#                     id
#                     status
#                     type
#                     title {{ romaji english }}
#                     nextAiringEpisode {{ episode }}
#                     mediaListEntry {{ progress }}
#                     startDate {{ year }}
#                 }}
#             }}
#             pageInfo {{ hasNextPage }}
#         }}
#     }}"""


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
                        title {{ romaji english native }}
                        nextAiringEpisode {{ episode }}
                        mediaListEntry {{ progress }}
                        startDate {{ year }}
                    }}
                }}
            }}
            user {{ name }}
        }}
    }}"""