ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

k-skill 的 geeknews-search 技能实战:基于 GeekNews 公开 RSS/Atom 订阅源实现只读查询、关键词检索与单条详情解析

2026/9/17 16:13:36 拓冰建站 浏览量
k-skill 的 geeknews-search 技能实战:基于 GeekNews 公开 RSS/Atom 订阅源实现只读查询、关键词检索与单条详情解析 k-skill 的 geeknews-search 技能实战基于 GeekNews 公开 RSS/Atom 订阅源实现只读查询、关键词检索与单条详情解析【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill本篇技术指南围绕 k-skill 仓库中geeknews-search技能展开该技能以 GeekNews한국 개발/기술/스타트업 뉴스 서비스首页https://news.hada.io的公开 RSS/Atom 订阅源https://feeds.feedburner.com/geeknews-feed为唯一数据来源实现无需任何认证的「最新列表 → 关键词检索 → 单条详情」三段式只读查询流程。读完本文你将掌握npx -y nomadamas/k-skill0 exec geeknews-search ...的完整命令用法、各子命令的参数语义、底层 Atom 解析与 JSON 输出的数据形状以及如何借助仓库内的测试与离线 fixture 对技能进行可复现的验证。技能定位RSS-first、read-only 的资讯查询技能geeknews-search是一个面向 Agent 的轻量查询型技能其设计边界在关联文档中被明确为三条核心能力最新文章列表查询list按标题 / 摘要 / 作者进行关键词检索search按条目id/link/ 主题编号进行单条详情确认detail。该技能的元信息同样可以在skill.json中看到category: news、locale: ko-KR、source: geeknews-rssprofile 为lookup属于典型的查询类技能。其「RSS-first、read-only」的 v1 定位意味着它只依赖公开订阅源不依赖任何非官方 API 或登录会话评论、投票、个人化信息均不在覆盖范围内。从触发场景看技能文档给出了三类典型用法긱뉴스 오늘 뭐 올라왔어?今天 GeekNews 有什么新文章→ 走list긱뉴스에서 Claude 관련 글 찾아줘帮我找 GeekNews 上关于 Claude 的文章→ 走search이 GeekNews 글 요약/링크 확인해줘帮我确认这篇 GeekNews 文章的摘要与链接→ 走detail。输入参数与官方数据面技能输入非常简洁默认情况下不需要任何认证或密钥仅依赖公开 feed操作必填参数可选参数说明list无--limit默认 10按 feed 原始顺序返回最近条目search--query--limit默认 10仅在标题、摘要、作者、链接/id 上做保守匹配detail--id无接受完整 id、完整 link 或主题编号片段全部子命令无--feed-url、--feed-file指定数据源或使用本地离线 Atom XML官方数据面Official surface在文档中固定为两个端点GeekNews RSS/Atom feedhttps://feeds.feedburner.com/geeknews-feedGeekNews 首页https://news.hada.io。--feed-url在源码中的默认值即GEEKNEWS_FEED_URL https://feeds.feedburner.com/geeknews-feed见 scripts/geeknews_search.py日常使用无需显式指定。标准工作流三个子命令的完整实战技能文档给出了三段式工作流命令统一通过 k-skill CLI 的exec执行--之后才是 Python 脚本自身参数1) 拉取最新条目列表List recent entriesnpx -y nomadamas/k-skill0 exec geeknews-search scripts/geeknews_search.py -- list --limit 10该命令会拉取 feed并按 feed 顺序返回前 10 条。list在源码中对应 list_items()实现就是对feed.items做切片feed.items[:limit]因此结果顺序与订阅源顺序严格一致同时_validate_limit()要求limit必须为正整数否则抛出ValueError(limit must be positive)。2) 在 feed 内进行保守检索Search the feed conservativelynpx -y nomadamas/k-skill0 exec geeknews-search scripts/geeknews_search.py -- search --query Claude --limit 5检索的匹配范围在文档中明确限定为标题、摘要、作者、链接/id。对应源码 search_items() 的实现是将每个条目的title、summary、author_name、author_url、id、link拼接为 haystack与query均做casefold()处理后做子串匹配大小写不敏感命中即返回达到limit即停止。这解释了为什么搜索「Claude」可以命中标题含 claude 的大小写变体——匹配是文本级、保守的子串匹配而不是语义搜索。3) 单条详情确认Inspect a specific itemnpx -y nomadamas/k-skill0 exec geeknews-search scripts/geeknews_search.py -- detail --id 28439detail的--id参数非常宽容文档说明它接受「id / link / 主题编号的一部分」。源码 get_item_detail() 会依次拿item.id、item.link、item.title做 casefold 后判断传入的 lookup 是否包含于候选值或完全相等因此28439、https://news.hada.io/topic?id28439都能解析到同一条目若没有任何条目匹配则抛出LookupError(No GeekNews entry matched: ...)。详情返回时会同时携带 feed 内包含的content/摘要文本与指向原文的link方便 Agent 在回复中一并给出摘要与原文链接。输出形状稳定可解析的 JSON 载荷三个子命令统一输出 UTF-8 编码、缩进 2 的 JSONensure_asciiFalse见 main()Agent 可直接json.loads消费。载荷结构如下list{source: {...}, count: N, items: [...]}search{source: {...}, query: ..., count: N, items: [...]}detail{source: {...}, item: {...}}其中source由 GeekNewsFeed.source_dict() 生成包含title、id、updated、home_url、feed_url、category单个条目item则由 GeekNewsItem 的to_dict()序列化字段为字段含义id条目唯一 id通常即https://news.hada.io/topic?id...title标题已去除 HTML 标签link原文链接published/updated发布时间 / 更新时间ISO 8601author_name/author_url作者名 / 作者主页summary纯文本摘要由 content 剥离 HTML 生成content_html原始 HTML 内容测试 test_geeknews_search.py 专门断言了这三种载荷形状的稳定性例如list_payload[count]、search_payload[query]、detail_payload[item][id]的取值以及summary与content_html同时存在于 detail 载荷中——这为 Agent 下游解析提供了契约级保证。源码实现纵深从 Atom XML 到结构化数据解析链是理解本技能的关键。load_feed()见 scripts/geeknews_search.py是核心入口它不依赖第三方 XML 库而是用正则 html.parser完成全部解析工作流程如下切分条目块_entry_blocks()用entry ....../entry正则切出每条 entry字段提取_first_tag()提取title/id/updated/published等文本字段_first_link_href()优先取relalternate的link作为link其次回退到普通 hrefCDATA 与实体清理_clean_xml_text()依次完成_strip_cdata()剥掉![CDATA[ ... ]]、unescape()HTML 实体反转义与_collapse_whitespace()空白折叠三层清洗HTML 转纯文本摘要由_html_to_text()借助自定义的_TextExtractor(HTMLParser)L17-L26把content typehtml中的标签剥除、得到规整纯文本同时原始 HTML 保留在content_html字段源信息feed 前缀部分的title、id、updated、home_urlrelalternate、feed_urlrelself以及可选category term...一并解析进GeekNewsFeed。以仓库测试夹具 scripts/fixtures/geeknews-feed.xml 为例可以看到 feed 的home_url解析为https://news.hada.io、feed_url解析为https://news.hada.io/rss/news而单条content中的p标签在summary中被剥离、在content_html中被保留——这与测试 test_load_feed_parses_atom_entries_into_normalized_items 的断言完全一致。网络层方面fetch_feed() 使用标准库urllib.request发起请求携带User-Agent: k-skill-geeknews/1.0默认超时 20 秒并按响应头 charset缺失时回退 UTF-8解码、errorsreplace容错——这也解释了文档「Failure modes」中提到的「FeedBurner 可能暂时无响应」需要重试的注意事项。离线验证与测试--feed-file的实战价值技能文档的 Notes 中特别提到测试与离线验证时可使用--feed-file传入本地保存的 Atom XML。这在源码 parse_args() 与_load_feed_text()L275-L278中有直接对应只要指定了--feed-file脚本便从本地文件读取 XML 而完全跳过网络请求。npx -y nomadamas/k-skill0 exec geeknews-search scripts/geeknews_search.py -- list \ --feed-file scripts/fixtures/geeknews-feed.xml \ --limit 3这一机制同时服务于 CI 与开发验证仓库内的单元测试 test_geeknews_search.py 正是基于scripts/fixtures/geeknews-feed.xml这个 3 条目的离线样本完成全部断言包括解析正确性feed 标题、updated时间戳、home_url/feed_url、条目数list保持 feed 顺序并应用limitsearch大小写不敏感匹配如小写agent命中、全大写WORKDRIVER命中作者detail用完整 id 与28439片段均可解析到同一条目且未命中时抛出LookupError三个子命令的 CLI 输出均为可json.loads的稳定 JSON两个 helper 脚本仓库根scripts/与技能目录geeknews-search/scripts/两份副本均带 shebang 且可执行。其中「两份脚本副本」的细节值得一提源码同时存在于 scripts/geeknews_search.py 与 geeknews-search/scripts/geeknews_search.py后者是随 k-skill CLI 打包发布的技能资产测试 test_helper_scripts_are_executable_python_entrypoints 对两者做了同等校验CLI 的exec命令正是定位到随包分发的scripts/geeknews_search.py来执行。技能的功能文档 docs/features/geeknews-search.md 也给出了与该离线示例等价的三条命令。完成标准与已知边界Done when / Failure modes文档为 Agent 定义了清晰的「何时算完成」能立即展示最新 GeekNews 文章列表能整理关键词检索结果中的标题 / 链接 / 作者 / 摘要能基于 RSS 内容保守地确认特定条目的信息并附带原文链接。同时需警惕以下失败模式这些是 RSS 数据面的固有边界FeedBurner / GeekNews feed 可能临时无响应——可重试或回退为直接打开https://news.hada.io链接超出 RSS feed 提供范围的完整正文、评论、投票信息不在覆盖之内summary以 feed 原文的 HTML 摘要为准内容可能被截断。小结geeknews-search以「公开 RSS/Atom feed 标准库解析 稳定 JSON 输出」构建了一条无认证、无状态、可离线验证的 GeekNews 查询链路。对 Agent 而言只需掌握list/search/detail三个子命令与对应的--limit/--query/--id参数即可在韩语技术资讯场景下完成从「今天有什么」到「帮我找某主题文章」再到「确认某条详情」的完整闭环对开发者而言scripts/geeknews_search.py 与 scripts/test_geeknews_search.py 提供了一份零第三方依赖的 Atom 解析与 CLI 测试范本可直接借鉴。【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考