Files
wehub-resource-sync 9b395f5cc3
E2E Headed Chrome / e2e-headed (macos-15) (push) Has been cancelled
E2E Headed Chrome / e2e-headed (ubuntu-latest) (push) Has been cancelled
E2E Headed Chrome / e2e-headed (windows-latest) (push) Has been cancelled
CI / build (macos-latest) (push) Has been cancelled
CI / build (ubuntu-latest) (push) Has been cancelled
CI / build (windows-latest) (push) Has been cancelled
CI / unit-test (push) Has been cancelled
CI / bun-test (push) Has been cancelled
CI / adapter-test (push) Has been cancelled
CI / smoke-test (macos-latest) (push) Has been cancelled
CI / smoke-test (ubuntu-latest) (push) Has been cancelled
Security Audit / audit (push) Has been cancelled
Build Chrome Extension / build (push) Has been cancelled
Trigger Website Rebuild (Docs Updated) / dispatch (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:39:48 +08:00

61 lines
2.0 KiB
JavaScript

import { cli, Strategy } from '@jackwener/opencli/registry';
import { decodeHtmlEntities, getHupuSearchUrl, readHupuSearchData, stripHtml } from './utils.js';
cli({
site: 'hupu',
name: 'search',
access: 'read',
description: '搜索虎扑帖子 (使用官方API)',
domain: 'bbs.hupu.com',
strategy: Strategy.PUBLIC, // 公开API,不需要Cookie
browser: true,
args: [
{
name: 'query',
required: true,
positional: true,
help: '搜索关键词'
},
{
name: 'page',
type: 'int',
default: 1,
help: '结果页码'
},
{
name: 'limit',
type: 'int',
default: 20,
help: '返回结果数量'
},
{
name: 'forum',
help: '板块ID过滤 (可选)'
},
{
name: 'sort',
default: 'general',
help: '排序方式: general/createtime/replytime/light/reply'
}
],
columns: ['rank', 'tid', 'title', 'author', 'replies', 'lights', 'forum', 'url'],
func: async (page, kwargs) => {
const { query, page: pageNum = 1, limit = 20, forum, sort = 'general' } = kwargs;
const searchUrl = getHupuSearchUrl(query, pageNum, forum, sort);
const data = await readHupuSearchData(page, searchUrl, 'Search Hupu threads');
// 提取搜索结果
const results = data.searchRes?.data || [];
// 处理结果:清理HTML标签,解码HTML实体
const processedResults = results.slice(0, Number(limit)).map((item, index) => ({
rank: index + 1,
tid: String(item.id || ''),
title: decodeHtmlEntities(stripHtml(item.title)),
author: item.username || '未知用户',
replies: item.replies || '0',
lights: item.lights || '0',
forum: item.forum_name || '未知板块',
url: `https://bbs.hupu.com/${item.id}.html`
}));
return processedResults;
},
});