From 30b0adcacef48ac53aea13cbdc3288db0bd8d103 Mon Sep 17 00:00:00 2001 From: Volpeon Date: Sun, 17 Oct 2021 16:54:53 +0200 Subject: Init --- src/api/e621/index.ts | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/api/e621/index.ts (limited to 'src/api/e621/index.ts') diff --git a/src/api/e621/index.ts b/src/api/e621/index.ts new file mode 100644 index 0000000..6aa6a35 --- /dev/null +++ b/src/api/e621/index.ts @@ -0,0 +1,50 @@ +import got from "got"; +import config from "../../config"; + +export interface Post { + id: number; + file: { + url: string; + }; + sources: readonly string[]; + + tags: { + general: readonly string[]; + species: readonly string[]; + character: readonly string[]; + copyright: readonly string[]; + artist: readonly string[]; + invalid: readonly string[]; + lore: readonly string[]; + meta: readonly string[]; + }; +} + +export const client = got.extend({ + headers: { + "User-Agent": config.e621.userAgent, + }, +}); + +export async function randomPost() { + const page = Math.floor(Math.random() * (config.e621.maxPage - 1)) + 1; + + const response = await client + .get("https://e926.net/posts.json", { + searchParams: { + limit: 75, + page, + tags: config.e621.tags.join(" "), + }, + }) + .json<{ posts: readonly Post[] }>(); + + if (!response.posts.length) { + throw new Error("No posts received"); + } + + const postIndex = Math.floor(Math.random() * response.posts.length); + const post = response.posts[postIndex]; + + return post; +} -- cgit v1.2.3-70-g09d2