fix(route/foresightnews): fetch API via Playwright
Amp-Thread-ID: https://ampcode.com/threads/T-019fc331-8a09-7609-bc48-7ffd887a05d6 Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
parent
ec501c4e4e
commit
baa8d99308
|
|
@ -9,7 +9,7 @@ export const route: Route = {
|
|||
parameters: {},
|
||||
features: {
|
||||
requireConfig: false,
|
||||
requirePuppeteer: false,
|
||||
requirePuppeteer: true,
|
||||
antiCrawler: false,
|
||||
supportBT: false,
|
||||
supportPodcast: false,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ export const route: Route = {
|
|||
parameters: { id: '专栏 id, 可在对应专栏页 URL 中找到' },
|
||||
features: {
|
||||
requireConfig: false,
|
||||
requirePuppeteer: false,
|
||||
requirePuppeteer: true,
|
||||
antiCrawler: false,
|
||||
supportBT: false,
|
||||
supportPodcast: false,
|
||||
|
|
|
|||
|
|
@ -12,6 +12,14 @@ export const route: Route = {
|
|||
target: '',
|
||||
},
|
||||
],
|
||||
features: {
|
||||
requireConfig: false,
|
||||
requirePuppeteer: true,
|
||||
antiCrawler: false,
|
||||
supportBT: false,
|
||||
supportPodcast: false,
|
||||
supportScihub: false,
|
||||
},
|
||||
name: '精选资讯',
|
||||
maintainers: ['nczitzk'],
|
||||
handler,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ export const route: Route = {
|
|||
parameters: {},
|
||||
features: {
|
||||
requireConfig: false,
|
||||
requirePuppeteer: false,
|
||||
requirePuppeteer: true,
|
||||
antiCrawler: false,
|
||||
supportBT: false,
|
||||
supportPodcast: false,
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ import zlib from 'node:zlib';
|
|||
import { raw } from 'hono/html';
|
||||
import { renderToString } from 'hono/jsx/dom/server';
|
||||
|
||||
import got from '@/utils/got';
|
||||
import { parseDate } from '@/utils/parse-date';
|
||||
import { getPlaywrightPage } from '@/utils/playwright';
|
||||
|
||||
const constants = {
|
||||
labelHot: '热门',
|
||||
|
|
@ -40,9 +40,25 @@ const processItems = async (apiUrl, limit, ...parameters) => {
|
|||
column: '',
|
||||
};
|
||||
|
||||
const { data: response } = await got(apiUrl, {
|
||||
searchParams,
|
||||
const requestUrl = new URL(apiUrl);
|
||||
for (const [key, value] of Object.entries(searchParams)) {
|
||||
requestUrl.searchParams.set(key, String(value));
|
||||
}
|
||||
|
||||
// Cloudflare fingerprints the HTTP client, so browser-like headers alone are insufficient.
|
||||
const { page, destroy } = await getPlaywrightPage(requestUrl.href, {
|
||||
onBeforeLoad: async (page) => {
|
||||
await page.route('**/*', (route) => {
|
||||
route.request().resourceType() === 'document' ? route.continue() : route.abort();
|
||||
});
|
||||
},
|
||||
});
|
||||
let response;
|
||||
try {
|
||||
response = JSON.parse((await page.textContent('body')) ?? '');
|
||||
} finally {
|
||||
await destroy();
|
||||
}
|
||||
|
||||
const buffer = Buffer.from(response.data?.list ?? response.data, 'base64');
|
||||
let items = JSON.parse(String(zlib.inflateSync(buffer)));
|
||||
|
|
|
|||
Loading…
Reference in New Issue