interface Res { data?: { word_list?: { sentence_id: string word: string event_time: string hot_value: string }[] } } async function getDyCookies() { try { const cookisUrl = "https://www.douyin.com/passport/general/login_guiding_strategy/?aid=6383" const data = await $fetch.raw(cookisUrl) const pattern = /passport_csrf_token=(.*); Path/s const matchResult = data.headers.get("set-cookie")?.[0]?.match(pattern) if (matchResult && matchResult.length > 1) { const cookieData = matchResult[1] return cookieData } } catch (error) { logger.error(`获取抖音 Cookie 出错: ${error}`) return null } } export default defineSource(async () => { const url = "https://www.douyin.com/aweme/v1/web/hot/search/list/?device_platform=webapp&aid=6383&channel=channel_pc_web&detail_list=1" const cookie = await getDyCookies() const res: Res = await $fetch(url, { headers: { Cookie: `passport_csrf_token=${cookie}`, }, }) if (!res?.data?.word_list || res.data.word_list.length === 0) throw new Error("Cannot fetch data") return res.data.word_list .slice(0, 30) .map((k) => { return { id: k.sentence_id, title: k.word, extra: { info: k.hot_value, }, url: `https://www.douyin.com/hot/${k.sentence_id}`, } }) })