Initial commit
This commit is contained in:
50
api/random.ts
Normal file
50
api/random.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { VercelRequest, VercelResponse } from '@vercel/node'
|
||||
import { formatInTimeZone } from 'date-fns-tz'
|
||||
import { PXIMG_BASEURL_I, ajax } from './utils.js'
|
||||
import { Artwork } from '../src/types/Artworks.js'
|
||||
|
||||
type ArtworkOrAd = Artwork | { isAdContainer: boolean }
|
||||
|
||||
export default async (req: VercelRequest, res: VercelResponse) => {
|
||||
const requestImage =
|
||||
(req.headers.accept?.includes('image') || req.query.format === 'image') &&
|
||||
req.query.format !== 'json'
|
||||
try {
|
||||
const data: { illusts?: ArtworkOrAd[] } = (
|
||||
await ajax({
|
||||
url: '/ajax/illust/discovery',
|
||||
params: {
|
||||
mode: req.query.mode ?? 'safe',
|
||||
max: requestImage ? '1' : req.query.max ?? '18',
|
||||
},
|
||||
headers: req.headers,
|
||||
})
|
||||
).data
|
||||
const illusts = (data.illusts ?? []).filter((value): value is Artwork =>
|
||||
Object.keys(value).includes('id')
|
||||
)
|
||||
illusts.forEach((value) => {
|
||||
const middle = `img/${formatInTimeZone(
|
||||
value.updateDate,
|
||||
'Asia/Tokyo',
|
||||
'yyyy/MM/dd/HH/mm/ss'
|
||||
)}/${value.id}`
|
||||
value.urls = {
|
||||
mini: `${PXIMG_BASEURL_I}c/48x48/img-master/${middle}_p0_square1200.jpg`,
|
||||
thumb: `${PXIMG_BASEURL_I}c/250x250_80_a2/img-master/${middle}_p0_square1200.jpg`,
|
||||
small: `${PXIMG_BASEURL_I}c/540x540_70/img-master/${middle}_p0_master1200.jpg`,
|
||||
regular: `${PXIMG_BASEURL_I}img-master/${middle}_p0_master1200.jpg`,
|
||||
original: `${PXIMG_BASEURL_I}img-original/${middle}_p0.jpg`,
|
||||
}
|
||||
})
|
||||
if (requestImage) {
|
||||
res.redirect(illusts[0].urls.regular)
|
||||
return
|
||||
} else {
|
||||
res.send(illusts)
|
||||
return
|
||||
}
|
||||
} catch (e: any) {
|
||||
res.status(e?.response?.status ?? 500).send(e?.response?.data ?? e)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user