diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/AniList/character.ts | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/lib/AniList/character.ts b/src/lib/AniList/character.ts new file mode 100644 index 00000000..27caef99 --- /dev/null +++ b/src/lib/AniList/character.ts @@ -0,0 +1,66 @@ +export interface Character { + name: { + full: string; + }; + id: number; +} + +export interface CharactersPage { + data: { + Page: { + characters: Character[]; + pageInfo: { + hasNextPage: boolean; + currentPage: number; + }; + }; + }; +} + +const charactersPage = async (page: number): Promise<CharactersPage> => + await ( + await fetch('https://graphql.anilist.co', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json' + }, + body: JSON.stringify({ + query: `{ Page(page: ${page}, perPage: 50) { + characters(isBirthday: true) { name { full } id } + pageInfo { hasNextPage currentPage } + } }` + }) + }) + ).json(); + +export const todaysCharacterBirthdays = async (): Promise<Character[]> => { + const characters = []; + let page = 1; + let currentPage = await charactersPage(page); + + for (const character of currentPage['data']['Page']['characters']) { + characters.push({ + id: character['id'], + name: { + full: character['name']['full'] + } + }); + } + + while (currentPage['data']['Page']['pageInfo']['hasNextPage']) { + for (const character of currentPage['data']['Page']['characters']) { + characters.push({ + id: character['id'], + name: { + full: character['name']['full'] + } + }); + } + + page += 1; + currentPage = await charactersPage(page); + } + + return characters; +}; |