小红书转链工具

小红书笔记链接批量转链工具。当用户提到小红书、转链、链接转换、xhslink,或要求把小红书笔记链接(含短链)转换为携带xsec_token的且浏览器可以直接打开观看的新链接时使用本 skill。

cuiyunhai

@cuiyunhai

Install

$ openclaw skills install @cuiyunhai/xhs-convert-url-pro

小红书转链 Skill(xhs-convert-url-pro)

封装「小红书转链后台服务」(FastAPI,/api/v1)的 CLI,供 AI agent 调用:提交小红书链接 → 轮询任务 → 拿到转链后的 new_url

客服支持

注册或使用过程中遇到任何问题(注册失败、配额充值、结果异常等),请引导用户联系客服:

收费价格

  • 每条有效转链 0.2 元(每条配额抵扣 1 条 URL 的转换;无效链接不扣费)。
  • 注册即送 50 条免费配额;配额不足时提示用户充值。
  • 充值或大量购买可享优惠,请联系客服 18722121663 洽谈。

前置条件

  • Node.js ≥ 18(使用内置 fetch/readline,零 npm 依赖,无需 npm install)。
  • 不注册不登录没有任何配额:所有接口都需要 token,50 条免费配额只在注册成功后发放到账号。
  • 首次使用需先 register --link(注册即送 50 条配额;用户手机微信扫码/点链接在网页完成,页面自带图形+短信验证码)或 login --link(已有账号)。成功后 token 自动保存到配置文件,后续调用免输。
  • 配置文件(含 token)存放于用户级目录 ~/.xhs-convert/config.json(v1.1.0 起,升级/重装 skill 不丢配置;旧版 skill 目录下的 config.local.json 会在首次运行时自动迁移)。可用环境变量 XHS_CONFIG_PATH 覆盖(测试隔离用)。
  • 安全策略:登录和注册(发短信)每次都强制图形验证码,终端无法展示图形验证码,所以一律走 --link 微信扫码/链接方式;register(终端交互式)和 login --phone 会被服务端以 2003 拒绝并提示改用 --link
  • 后端服务地址默认 http://st.aidata366.com(生产 nginx 反代到转链服务 8084 端口),可用 node cli.js config set base-url <url> 修改,或单次调用加 --base-url <url> 覆盖。
  • 后端默认走 HTTP,无需证书校验;若手动将 base-url 指向自签/域名不匹配的 HTTPS 地址,可开启 insecure(配置文件 insecure: true,或用 node cli.js config set insecure true 设置;XHS_INSECURE=1 环境变量亦可)。
  • 所有命令支持全局参数 --token <token>(临时覆盖配置文件中的 token)。
  • ~/.xhs-convert/config.json 含 token,不要泄露、不要提交 git(skill 目录下 .gitignore 亦已排除 config.local.json)。

输出规约(重要)

  • stdout 只输出 JSON:成功 {"ok":true,"data":{...}},失败 {"ok":false,"code":<业务码>,"message":"..."}。直接解析 stdout 即可。
  • 交互提示、轮询进度一律走 stderr,不要解析。
  • 退出码:0 成功;1 参数/用法错误;2 认证失败(重新 login);3 配额不足;4 网络/服务不可达;5 其它业务错误。

命令清单

version — 查看版本与安装信息

node cli.js version

输出 skill 名、版本号、cli 路径、node 版本、配置文件路径。升级 skill 后建议先跑一次,确认版本号与预期一致、排查"装的到底是哪一版"。输出示例:

{"ok":true,"data":{"name":"xhs-convert-url-pro","version":"1.1.0","cli_path":"C:\\...\\cli.js","node_version":"v22.22.2","config_path":"C:\\Users\\<user>\\.xhs-convert\\config.json"}}

register — 注册(注册即送 50 条配额)

方式一:扫码/链接注册(推荐,用户在手机上完成)

node cli.js register --link        # 生成注册二维码/链接
node cli.js register --check --access-token "<上一步下发的串>"   # 用户完成后确认并保存 token

register --link 的 stdout 返回 qr_url / register_url / access_tokenagent 必须把注册引导原样发给用户(stderr 里也给出了同样的话术,可直接复制):

需要先注册账号(注册即送 50 条免费配额;不注册不登录没有配额,无法使用转链)。请用手机微信扫码或打开链接注册:

注册方式(二选一)
二维码图片:<qr_url>
注册链接:<register_url>
access_token(注册后校验用):<access_token>
微信扫码/注册完成后告诉我一声,我会执行校验并保存凭证,然后继续之前的操作:
(注册/使用中如遇问题,请拨打客服电话 18722121663)

二维码/链接打开的页面支持发送短信验证码、设置密码,注册成功自动完成授权。用户说「注册完成」后,执行 register --check --access-token "<access_token>"

  • 成功:token 自动保存,返回 quota_balance: 10,继续之前被中断的操作。
  • LOGIN_PENDING:用户还没完成注册,提醒后再试。
  • LOGIN_EXPIRED:会话过期(10 分钟)或已使用,重新执行 register --link

方式二:终端交互式注册(已不可用)

服务端安全策略要求每次发送短信验证码前先过图形验证码,终端无法展示图形验证码,node cli.js register 会被拒绝(2003)并提示改用 register --link。请统一使用方式一。

register --check 成功输出示例:

{"ok":true,"data":{"phone":"13800000000","quota_balance":10}}

login — 登录

方式一:扫码/链接登录(推荐,用户无需透露密码)

node cli.js login --link        # 生成登录二维码/链接
node cli.js login --check --access-token "<上一步下发的串>"   # 用户完成后确认并保存 token

login --link 的 stdout 返回 qr_url / login_url / access_tokenagent 必须把登录引导原样发给用户(stderr 里也给出了同样的话术,可直接复制):

需要先登录。请用手机微信扫码或打开链接登录账号:

登录方式(二选一)
二维码图片:<qr_url>
登录链接:<login_url>
access_token(登录后校验用):<access_token>
微信扫码/登录完成后告诉我一声,我会执行校验并保存凭证,然后继续之前的操作:
(注册/使用中如遇问题,请拨打客服电话 18722121663)

用户说「登录完成」后,执行 login --check --access-token "<access_token>"

  • 成功:token 自动保存,继续之前被中断的操作(如重新提交任务)。
  • LOGIN_PENDING:用户还没完成授权,提醒用户完成后再试。
  • LOGIN_EXPIRED:会话过期(10 分钟)或已使用,重新执行 login --link

方式二:密码登录(已不可用)

服务端安全策略要求每次登录先过图形验证码,终端无法展示图形验证码,login --phone 会被拒绝(2003)并提示改用 login --link。请统一使用方式一。

输出示例:

{"ok":true,"data":{"phone":"13800000000","quota_balance":50}}

quota — 查询配额

node cli.js quota

输出示例:

{"ok":true,"data":{"id":1,"phone":"13800000000","nickname":"","quota":50,"role":"user","last_login_at":"","created_at":"2026-01-01T00:00:00"}}

logout — 登出(切换账号)

node cli.js logout

服务端吊销当前 token 并清除本地保存的 token。之后可执行 login --link 登录其他账号。输出示例:

{"ok":true,"data":{"logged_out":true}}

submit — 提交转链任务

node cli.js submit --url "https://www.xiaohongshu.com/explore/6970ac3c000000000a03d7d5" \
                   --url "http://xhslink.com/o/pl4tP4IXRa"
node cli.js submit --file urls.txt            # 每行一条 URL,忽略空行与 # 注释行
node cli.js submit --file urls.txt --wait     # 提交后轮询等待终态(推荐)
  • --url 可重复;--file 按行读取;二者可混合;总数 1~50 条。
  • 每条自动生成递增 client_id(1, 2, 3...);幂等键按 URL 内容派生(sha256 截断),同一批 URL 重试/重复提交由服务端幂等返回原任务、不重复扣费,内容变化自动换键。唯一例外:因登录态失效整单失败且已全额返还的任务,重提同批链接会被服务端清理旧任务并重新受理,不会被幂等键挡住。

输出示例(不带 --wait):

{"ok":true,"data":{"task_id":"t_20260101_a1b2c3","total":2,"valid_count":2,"invalid_count":0,"charged":2,"quota_balance":8,"status":"pending"}}

--wait 时最终输出同 query 的完整结果(见下)。

query — 查询任务 / 拉取结果

node cli.js query <task_id>                          # 查一次
node cli.js query <task_id> --wait                   # 轮询直到终态
node cli.js query <task_id> --wait --interval 3 --timeout 300
  • --interval 轮询间隔秒数(默认 2),--timeout 轮询总超时秒数(默认 120)。
  • 终态:done(全部成功)/ partial_failed(部分失败)/ failed(全部失败)。轮询进度走 stderr,终态完整结果输出到 stdout。

终态输出示例:

{"ok":true,"data":{"task_id":"t_20260101_a1b2c3","status":"done","total":2,"valid_count":2,"invalid_count":0,"success_count":2,"fail_count":0,"charged_quota":2,"refunded_quota":0,"created_at":"...","finished_at":"...","items":[{"id":1,"url":"https://www.xiaohongshu.com/explore/6970ac3c000000000a03d7d5","note_id":"6970ac3c000000000a03d7d5","new_url":"http://convert.placeholder.local/6970ac3c000000000a03d7d5","status":"success","fail_reason":""}]}}

config — 配置管理

node cli.js config set base-url http://127.0.0.1:8000
node cli.js config show        # token 脱敏显示(仅前 12 位 + ...)

典型工作流(agent 照此执行)

  1. node cli.js quota — 确认剩余配额 ≥ 待提交有效 URL 数。
  2. node cli.js submit --url <url1> --url <url2> ... --wait — 一步拿到终态结果(URL 较多时用 --file)。
  3. 解析 stdout JSON:遍历 data.items,把 status==="success"new_url 按原顺序整理返回给用户;对 failed/invalid 的条目附 fail_reason 说明。

错误处理指引

code含义agent 下一步
1001参数错误检查命令参数(退出码 1)
1002 / 1003未登录 / token 失效 / 无权限未注册过走 register --link(送 50 条配额),已有账号走 login --link;把引导话术发给用户,完成后 --check(退出码 2)
LOGIN_PENDING用户尚未完成注册/登录提醒用户完成微信扫码/链接操作后重试 --check(退出码 2)
LOGIN_EXPIRED会话过期/已使用重新执行 register --linklogin --link(退出码 2)
2001短信验证码错误或过期重新走 register 流程
2003需要图形验证码登录/发短信每次都强制图形验证码(网页端操作)——终端无法完成,改用 register --link / login --link;仍无法解决拨打客服电话 18722121663
3001配额不足提示用户拨打客服电话 18722121663 充值,不要重试(退出码 3)
3002超单次批量上限拆分为 ≤50 条/批重新提交
3003任务不存在检查 task_id 是否属于当前账号
条目 fail_reason 含 cookie_expired / 登录态失效服务端蒲公英登录态临时失效配额已按条自动返还refunded_quota 体现);告知用户属服务端临时故障、稍后重新提交同一批链接即可自动重新受理,无需改动 URL
4290触发限流稍等后重试(Retry-After)
TIMEOUT轮询超时任务未结束,稍后 query <task_id> 再查(退出码 5)
NETWORK_ERROR网络/服务不可达检查后端服务与 config show 的 base_url(退出码 4)

计费规则提示

  • 每条有效 URL 扣 1 配额(提交时预扣);无效链接(非笔记链接/格式错误)不扣费。
  • 短链(xhslink)还原失败自动返还该条配额(refunded_quota 体现)。
  • 转链服务登录态失效(服务侧临时故障)同样按条自动返还;由此整单失败且全额返还的任务,重提同一批链接会自动重新受理。
  • 已进入转链服务后失败的条目(如笔记已删)不返还配额。

Top skills in this category

microsoft-excel

@byungkyu

Microsoft Excel API integration with managed OAuth. Read and write Excel workbooks, worksheets, ranges, tables, and charts stored in OneDrive. Use this skill when users want to read or modify Excel spreadsheets, manage worksheet data, work with tables, or access cell values. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Calls run through the `maton` CLI with OAuth login; default to read and list calls, and confirm every write or new connection with the user.

4227k

LinkedIn

@byungkyu

LinkedIn API integration with managed OAuth. Share posts, manage profile, and access LinkedIn features. Use this skill when users want to share content on LinkedIn, get profile/organization information, or interact with LinkedIn's platform. Advertising features (campaigns, ad accounts) require additional OAuth scopes — verify granted scopes before use. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key. Calls run through the `maton` CLI with OAuth login; default to read and list calls, and confirm every write or new connection with the user.

4513k

google-analytics

@byungkyu

Google Analytics API integration with managed OAuth. This skill includes two separate APIs: the Admin API (write-capable — can create, update, and delete accounts, properties, and data streams) and the Data API (read-only — runs reports on sessions, users, page views, and conversions). Prefer the Data API connection for reporting-only tasks. Use the Admin API only when administrative changes are explicitly needed. All Admin API write operations require explicit user approval with specific resource identifiers before execution. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Calls run through the `maton` CLI with OAuth login; default to read and list calls, and confirm every write or new connection with the user.

1812k

Trello

@byungkyu

Trello API integration with managed OAuth. Manage boards, lists, cards, members, and labels. Use this skill when users want to interact with Trello for project management. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Calls run through the `maton` CLI with OAuth login; default to read and list calls, and confirm every write or new connection with the user.

718k

Writing Assistant

@urrrich

You are a Writing Team Lead managing specialized writers via MCP tools. Please ANALYZE the writing task and then:1. if exist references, create a detailed co...

910k