资讯动态

k-skill 的 Naver 新闻搜索技能:基于 k-skill-proxy 的 Open API 新闻检索、数据清洗与去重实践

发布时间:2026/9/17 14:45:42 来源:尧图企业网站定制
k-skill 的 Naver 新闻搜索技能基于 k-skill-proxy 的 Open API 新闻检索、数据清洗与去重实践【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill本指南围绕开源仓库 k-skill 中的naver-news-search技能展开讲解如何通过k-skill-proxy代理层调用 Naver 搜索 Open API 的新闻接口openapi.naver.com/v1/search/news.json以无需自备 API Key 的方式检索最新新闻候选并获得经代理端清洗、规范化、去重后的结构化 JSON。读完本文你将掌握该技能的全部端点参数、调用方式、响应字段含义、失败模式与运营注意事项并能从 源码 层面理解b标签剥离、HTML entity 解码、canonical URL 去重等实现细节。这个技能能做什么naver-news-search是 k-skill 仓库한국인을 위한 스킬 모음집中面向韩国新闻检索场景的一个技能核心能力如下基于搜索词的 Naver 新闻文章候选列表查询整理文章标题、正文摘要description、原文链接original_link与 Naver 新闻跳转链接link按发布时间ISO-8601进行最新优先或相关度优先排序由代理端预先移除 Naver 返回结果中夹杂的b高亮标签与 HTML entityamp;、quot;、lt;等直接输出干净文本。技能元数据位于 skill.json类型为information、区域ko-KR、阶段v1运行时通过 instruction.md 提供完整指令用户侧入口为 SKILL.md。最重要的规则一切经由 k-skill-proxy该技能的一条核心设计是用户不需要自行前往 Naver 开发者中心申请 Client ID / Secret。默认访问路径为https://k-skill-proxy.nomadamas.org/v1/naver-news/search上游密钥NAVER_SEARCH_CLIENT_ID/NAVER_SEARCH_CLIENT_SECRET只注入在代理服务器端代理以只读、公开、无鉴权的方式对外提供服务。这一点在 instruction.md 与 naver-news-search.md 中均有明确声明。同时需要注意两个使用边界配额共享Naver 搜索 Open API 将全部搜索类目新闻/博客/购物等合并计算每日上限为25,000 次调用。由于配额在代理端集中消耗客户端不应以重试循环浪费配额。只取元数据本技能只处理文章元数据与摘要不提供全文、付费文章或需登录的文章。需要全文时应引导用户直接访问链接。前置条件可访问互联网具备curl或任意可发起 HTTP 请求的工具仅代理运营者需要在 Naver 开发者中心注册具备검색搜索权限的应用取得NAVER_SEARCH_CLIENT_ID与NAVER_SEARCH_CLIENT_SECRET两个环境变量并配置到代理服务器。从源码看代理端在 server.js 中读取环境变量naverSearchClientId: trimOrNull(env.NAVER_SEARCH_CLIENT_ID ?? env.NAVER_CLIENT_ID), naverSearchClientSecret: trimOrNull(env.NAVER_SEARCH_CLIENT_SECRET ?? env.NAVER_CLIENT_SECRET),即同时兼容NAVER_SEARCH_CLIENT_ID与NAVER_CLIENT_ID两种命名。支持端点与参数Route说明GET /v1/naver-news/searchNaver 新闻搜索输出标题/摘要/链接/发布时间并做规范化/v1/naver-news/search参数表参数类型默认值说明q/query/keywordstring必填搜索词至少 2 个字符display/limit/sizeint10返回条数按 1 ~ 100 范围 clampstart/offsetint1搜索起始位置1 起始最大 1000当start display - 1 1000时代理会在调用上游之前直接以400 bad_request拒绝sortstringsimsim相关度或date最新优先其余值回退为sim参数别名在源码 naver-news.js 的normalizeNaverNewsSearchQuery中统一处理q ?? query ?? keyword、display ?? limit ?? size、start ?? offset。display与start分别按1~100与1~1000做clamp随后校验搜索窗口。基本调用公开代理curl -fsS --get https://k-skill-proxy.nomadamas.org/v1/naver-news/search \ --data-urlencode q삼성전자 실적 \ --data-urlencode display10 \ --data-urlencode sortdate本地代理通过KSKILL_PROXY_BASE_URL环境变量覆盖基地址curl -fsS --get ${KSKILL_PROXY_BASE_URL:-https://k-skill-proxy.nomadamas.org}/v1/naver-news/search \ --data-urlencode q인공지능 규제 \ --data-urlencode display5代理路由实现位于 server.js先对查询做规范化失败即返回 400再以q小写、display、start、sort组合生成缓存键查缓存未命中则调用上游并返回标准化载荷。响应结构示例{ items: [ { rank: 1, title: 삼성전자 1분기 실적 발표, description: 삼성전자가 올해 1분기 실적을 발표했다. 영업이익은 전년 동기 대비 증가했다., link: https://n.news.naver.com/mnews/article/001/samsung, original_link: https://news.example.com/samsung, pub_date: Mon, 22 Apr 2026 09:30:00 0900, pub_date_iso: 2026-04-22T00:30:00.000Z, source: naver-openapi } ], query: { q: 삼성전자 실적, display: 10, start: 1, sort: date }, meta: { query: 삼성전자 실적, extraction: naver-openapi, item_count: 1, total: 1234567, start: 1, display: 1, last_build_date: Mon, 22 Apr 2026 10:00:00 0900, sort: date }, upstream: { url: https://openapi.naver.com/v1/search/news.json?query...display10start1sortdate, status_code: 200, content_type: application/json;charsetUTF-8, provider: naver-search-api }, proxy: { name: k-skill-proxy, cache: { hit: false, ttl_ms: 300000 }, requested_at: 2026-04-22T01:00:00.000Z } }响应顶层结构分为四块items[]规范化后的文章列表核心字段如下详见 instruction.mdtitle— 已去除b标签与 HTML entity 的标题description— 已清洗的摘要original_link为空时该字段可为nulllink— Naver 新闻跳转链接original_link— 原文链接无则为nullpub_date— 原始 RFC822 格式发布时间pub_date_iso— 解析后的 ISO-8601UTC解析失败为nullrank— 去重后从 1 开始的连续序号。query回显本次请求的规范化参数q、display、start、sort。metaextraction恒为naver-openapi另含total、start、display、last_build_date、sort。upstream上游请求的 URL、状态码、Content-Type 与provider: naver-search-api。proxy代理自身信息含缓存命中状态与 TTL默认 300000ms 5 分钟。源码级解析代理端如何清洗与规范化代理端清洗逻辑集中在 naver-news.js 的normalizeNaverNewsSearchPayloadL137-L189与配套工具函数中。HTML entity 解码L28-L43decodeHtmlEntities依次替换quot;/#34;、apos;/#39;、lt;/gt;、十进制与十六进制数字实体#(\d);、#x...;最后处理amp;置于末尾以避免二次解码。标签剥离与空白归一L45-L50stripTags在解码后用正则/\/?[^](|$)/g删除标签并将连续空白折叠为单个空格后trim。URL 校验L57-L66normalizeUrl拒绝javascript:协议与非http(s)链接返回null。发布时间转换L84-L93parsePubDateIso将 RFC822 字符串交给new Date()解析成功则输出 UTC ISO-8601失败返回null。pub_dateRFC822与pub_date_isoUTC ISO-8601双字段并存展示给用户时建议换算为 KSTUTC9。上游调用细节L191-L254fetchNaverNewsSearch以X-Naver-Client-Id/X-Naver-Client-Secret请求头调用上游并设置accept: application/json与 15 秒超时AbortSignal.timeout(15000)非 2xx 响应、非法 JSON 均转换为带code/statusCode/upstreamStatusCode的异常对象。同一文章的链接去重规则为避免同一新闻尤其不同媒体转载同一事件在结果中重复出现代理端基于canonical URL去重实现于canonicalizeLinkForDedupnaver-news.js。判定同一篇文章时忽略以下差异查询参数顺序?a1b2与?b2a1视为相同路径尾部斜杠/article/42与/article/42/视为相同host 大小写news.example.com与NEWS.example.com视为相同URL fragment#comments等差异忽略。而不同 path/article/42与/article/42/related或不同查询值?a1与?a2仍视为不同文章。需要强调去重只影响内部排序与计数items[].link字段仍原样保留 Naver 返回的原文链接。去重逻辑位于 naver-news.js首现 URL 写入seenLinks重复即跳过。标准工作流供 Agent 使用技能 instruction.md 定义了 Agent 的标准执行流程确认搜索词缺失或少于 2 个字符时先向用户询问。用户要求最新时使用sortdate否则使用sortsim。调用GET /v1/naver-news/search。有items时整理顶部 3~5 条输出标题、发布时间按 KST 重新格式化、摘要与链接。发布时间可以基于pub_date_iso标注今天/昨天KST UTC9。items为空或发生upstream_error时不重试改为缩小搜索词后重新询问。响应风格要求只引用 API 返回的标题/摘要原文不加解读发布时间以 KST 기준 {YYYY-MM-DD HH:mm} 或 {n}시간 전 呈现original_link存在时优先展示否则展示linkNaver 跳转不同媒体报道同一事件时并行给出 2~3 个链接供比较description仅为摘要应表述为기사 요약에 따르면根据文章摘要不做事实断言。失败模式与对应处理状态码 / 错误触发条件处理建议400 bad_request搜索词缺失、少于 2 字符、参数不允许或start display - 1 1000超出 Naver 1000 条搜索窗口将错误消息原样展示给用户503 upstream_not_configured代理服务器未配置NAVER_SEARCH_CLIENT_ID/NAVER_SEARCH_CLIENT_SECRET提示请稍后重试由运营者补配密钥401 upstream_errorerrorCode: 024代理端 Client ID/Secret 错误运营者需重新签发密钥429 upstream_errorerrorCode: 010超出 Naver 每日配额25,000 次/日严禁重试循环稍后再试502 upstream_errorNaver API 返回 5xx 或响应 JSON 解析失败不重试明确告知当前无法查询几个要点搜索窗口校验在代理发起上游请求之前完成例如start1000display100将直接收到400 bad_request错误消息为start display exceeds Navers 1000-item search window源码见 naver-news.jsNaver API 最多只能访问第 1000 条因此查找更早的文章时应缩小搜索词。另外代理对上游失败响应不做缓存failure-aware cache下一次请求会完整重走一次上游见 instruction.md 与 server.js 的异常分支——异常路径直接返回 payload 而不写入缓存。上游错误映射逻辑在 naver-news.js4xx 保留原状态码其余一律归一为502。运营与使用提示用户诉求是오늘今天/최신最新时sortdate通常更令人满意。display越大消耗 Naver 配额越快多数场景无需偏离默认值 10。start display - 1超过 1000 的组合会在上游调用前被400拒绝找更旧文章优先收窄搜索词。pub_date为 RFC822、pub_date_iso为 UTC ISO-8601展示给用户时换算为 KSTUTC9。该代理路由为 public/read-only/no-auth通过5 分钟缓存 每分钟 60 次 rate limit防止滥用响应中proxy.cache.ttl_ms恒为 300000 即 5 分钟。需要文章全文时本技能无法提供应引导用户自行访问链接。隐私层面代理与技能不持久化保存搜索词/结果不请求文章正文仅使用 API 提供的摘要对特定人物/事件不做诽谤性推测只传递文章原文详见 instruction.md 的 Privacy 一节。使用边界与合规说明本技能仅用于个人、非组织性的信息查询不应用于系统性/批量爬取、文章全文与图片归档、独立数据库构建与再分发也不得绕过访问控制、CAPTCHA 或干扰第三方正常服务。技能不是 Naver 或媒体的官方功能、官方支持或认证工具第三方名称仅用于描述功能与检索目标完整法律声明见 DISCLAIMER.md 与 TRADEMARK-LEGAL-STATEMENT.md。技能运行前可通过npx -y nomadamas/k-skill0 read naver-news-search references/DISCLAIMER.md查阅完整免责声明并须遵守不代付、不代发、不存储明文凭据、不越过法律与安全边界等硬性规则见 SKILL.md。参考与源码索引技能主文档naver-news-search.md技能指令instruction.md、SKILL.md、skill.json代理端核心实现naver-news.js参数规范化、HTML 清洗、canonical 去重、上游调用与错误映射代理路由注册server.js400/缓存/异常分支代理环境变量读取server.jsNAVER_SEARCH_CLIENT_ID/NAVER_SEARCH_CLIENT_SECRET相关测试naver-news.test.js上游能力参考Naver 搜索 API 新闻检索文档openapi.naver.com/v1/search/news.json与参考开源实现isnow890/naver-search-mcp、kiyeonjeon21/naver-cli。【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价