SuperAPI AI 工具集

hashnode

写作与研究

查看项目

更新于 10-15 09:56

技能介绍

用途

hashnode 技能用于在用户自己的 Hashnode 博客上发布、保存草稿和读取文章。它通过用户自己的登录 Cookie(BYOC)完成认证,无需 Hashnode Pro 订阅。

背景:Hashnode 于 2026-05-13 将其公开 GraphQL API 移入付费 Pro 计划,因此个人访问令牌(Personal Access Token)已无法免费发布。本技能改为驱动 Hashnode 网页编辑器使用的同一套第一方 REST API(https://hashnode.com/api/...),由用户的登录会话 Cookie 认证——这是免费的,且不需要 Pro 计划。

主要能力

  • 列出用户的博客(出版物),同时验证 Cookie 是否有效。
  • 创建并保存私有草稿:支持标题、副标题、封面图、标签和 Markdown 正文。
  • 发布文章到用户的真实博客。
  • 删除草稿或已发布文章。

该技能已于 2026-07-12 在真实连接的博客上完成端到端验证:列出出版物、创建并保存草稿(标题/副标题/封面/标签/Markdown)、发布、删除——全部通过 Cookie 认证,无需 Pro。

认证与安全

连接器将 Cookie jar 注入为环境变量 HASHNODE_COOKIES(一个 JSON 数组;会话 Cookie 为 hashnode-session)。该变量属于敏感信息,拥有完整账户访问权限,绝不能回显或打印。

若出现认证错误,说明 Cookie 已过期,应让用户在 https://studio.acedata.cloud/console/connectors 重新连接,不要循环重试。

使用方式

设置时锚定到本技能自带的脚本:

# $SKILL_DIR can point at another skill loaded this turn — anchor on our script.
H="$SKILL_DIR/scripts/hashnode.py"; [ -f "$H" ] || H=$(find /tmp -maxdepth 8 -path '*/skills/*/hashnode/scripts/hashnode.py' 2>/dev/null | head -1)
[ -f "$H" ] || { echo "hashnode script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
python3 "$H" publications          # list the user's blogs (verifies the cookie)

读取出版物:

python3 "$H" publications        # {publications:[{id,title,url}]}

保存私有草稿(安全、非公开):

python3 "$H" draft \
  --title "My Title" \
  --subtitle "Optional subtitle" \
  --content-file article.md \
  --cover "https://cdn.example.com/cover.jpg" \
  --tags ai,apis
# → {draft_id, editor_url}. Nothing is public yet.
  • --content-file 是 Markdown 正文(长文建议用文件;短内容可用 --content 内联字符串)。内联图片和链接就是普通 Markdown。
  • --cover 设置页眉/封面图(同时用作 OG 图)。
  • --tags 是逗号分隔的 slug(ai,apis,web-development),会自动解析为真实的 Hashnode 标签 id(最多 5 个)。
  • --publication <id> 仅在账户有多个博客时需要。

发布(门控:除非末尾加 --confirm,否则为 dry-run):

python3 "$H" publish --title "My Title" --content-file article.md --cover "https://…" --tags ai,apis          # dry-run
python3 "$H" publish --title "My Title" --content-file article.md --cover "https://…" --tags ai,apis --confirm # LIVE
# → {ok, url}  (or {ok:false, warning:"…automoderation removed…"} — rewrite editorially)

确认发布后文章会立即公开在用户的真实博客上。务必先展示最终标题和正文,获得用户明确同意,然后把 --confirm 作为最后一个参数运行。

删除草稿或文章(门控):

python3 "$H" delete --id <draftOrPostId>            # dry-run
python3 "$H" delete --id <draftOrPostId> --confirm  # delete

适用场景与限制

⚠️ 非 Pro 博客受自动审核——写社论式内容,不要写广告。

这是最重要的一条规则。非 Pro 出版物受 Hashnode 自动审核约束:明显推广性的文章(夸张语言、"free credits!!"、同一 CTA 链接重复 3–4 次)会在几秒内被自动移除——发布调用仍返回成功,但线上 URL 随后会 404。(Pro 在此处的一个好处就是"免受自动审核移除"。)

要保持文章在线,应写真正有用的 how-to / 指南,顺带介绍产品:

  • 教育性框架和具体标题(例如 "… (Beginner's Guide)")。
  • 最多几个得体的链接,不要重复同一 CTA。
  • 不要 "limited-time!! grab now!!" 这类营销口吻。

publish 会在发布后重新抓取线上 URL,如果文章被审核移除会返回警告——若看到该警告,应改写为社论式内容并重新发布。

其他注意事项:

  • 无 Pro、无 PAT。本技能使用 Cookie 认证的 hashnode.com/api/* 编辑器 API,而非 gql-beta.hashnode.com(后者需要付费 Pro 计划)。
  • 自动审核(见上)是免费博客上的主要失败模式——保持社论式内容。
  • 这是用户的真实博客。任何发布/删除前都要确认。
  • 绝不打印 HASHNODE_COOKIES——它拥有完整账户访问权限。
  • 第一方内部 API——Hashnode 更新编辑器时它可能变化;如果某个调用意外返回 HTML/404,应作为上游漂移上报。

记录输出

成功发布并获得线上结果 URL 后,调用内置的 publish_artifact 工具一次,以便用户在 My Outputs 中跟踪该交付物:

publish_artifact(kind="article", channel="hashnode", title="<title>", url="<the REAL returned URL>", status="delivered")

使用真实返回的 URL——绝不编造。每个已发布条目调用一次,仅在交付确认后调用;若发布失败则跳过(或使用 status="failed")。参见 _shared/artifacts.md。