@yeci226/nhentai-ts
Version:
A scraper for NHentai with types
42 lines (38 loc) • 1.19 kB
text/typescript
import axios, { AxiosInstance } from 'axios'
import { load } from 'cheerio'
export const clean = (x: string[]): string[] => {
const result: string[] = []
x.forEach((a) => {
const text = a.split(/\d/g)[0].trim()
if (text !== '') result.push(text)
})
return result
}
export const getExtension = (type: string): 'jpg' | 'png' | 'gif' => {
switch (type) {
case 'g':
return 'gif'
case 'j':
return 'jpg'
default:
return 'png'
}
}
export const getAPIGalleryPages = async (
axios: AxiosInstance,
data: string
): Promise<{ t: string }[]> => {
const $ = load(data)
const id = ($('#cover').find('a').attr('href') || 'g/')
.split('g/')[1]
.split('/')[0]
return (
await axios.get<{ images: { pages: { t: string }[] } }>(
`https://nhentai.net/api/gallery/${id}`
)
).data.images.pages
}
export const getPageStatus = (url: string): Promise<number> =>
axios.head(url)
.then((res: any) => res.status as number)
.catch((err: any) => (err.response?.status || 500) as number)