This duck helps you bydate + categorypull the Xiaohongshu low-follower viral hits list—specifically picking notes that have few followers yet went viral purely on content strength, helping you find the ordinary-creator playbook that breaks out without relying on follower count—most useful for cold starts and benchmarking small accounts.
Data goes through doubaoya.com one line, authentication uses your own key (environment variable
DOUBAOYA_API_KEY, in the formdyh_…). Tip: if502 PROVIDER_FAILEDtemporarily can't get data, it's a temporary upstream fluctuation—just try again later. Failures are automatically refunded, no charge.
Get the key (secret key)
- Open doubaoya.com
- Log in
- Go to Key Center
- Generate key(in the form
dyh_…)
export DOUBAOYA_API_KEY="dyh_你的密钥"
Iron rule: never print the key, never write it to a file, never echo it back to the user. The script itself also never outputs the key. All requests are sent only to doubaoya.com。
Run the script
Zero dependencies, standard library is enough (Python 3).
# 默认:综合全部,今天往前 2 天
python3 "$SKILL_PATH/scripts/fetch_low_fans_top.py"
# 指定日期 + 分类(日期按今天现算,别照抄写死的日期)
python3 "$SKILL_PATH/scripts/fetch_low_fans_top.py" \
--rank-date "$(date -d '-3 days' +%F 2>/dev/null || date -v-3d +%F)" --category 化妆美容
🔴 Two ground rules to get straight first(tested 2026-08-13):
-
For broad categories, write
综合全部, not综合。综合is not in the official closed set; if you pass it, it will be directly judged as "no results found"— this is not "no list that day," it's the wrong name. Categories are a closed set of 25 tracks; copy them, don't make up your own:综合全部出行代步休闲爱好影视娱乐数码科技医疗保健综合杂项星座情感
时尚穿搭婚庆婚礼拍摄记录学习教育化妆美容居家装修旅行度假亲子育儿个人护理美味佳肴职业发展宠物天地潮流鞋包日常生活科学探索新闻资讯体育锻炼
Map the abbreviations users say to the full names first: Beauty → 化妆美容, Food → 美味佳肴, Fashion → 时尚穿搭,
Travel → 旅行度假, Mother & Baby → 亲子育儿, Fitness → 体育锻炼, Digital → 数码科技。
- Dates lag by about two days, and only the most recent 30 days are kept. Yesterday's and today's lists haven't settled yet (empty lists), so by default take T-2; dates earlier than 30 days will be judged as no results found (not an empty list).
| Parameter | Description | Default |
|---|---|---|
--rank-date |
List date YYYY-MM-DD, only the most recent 30 days are kept |
2 days before today |
--category |
Category, one of the 25 closed set; don't pass 综合 |
综合全部 |
The script prints the data from the success envelope to stdout as JSON.Run the script only once each time, and read the full stdout.
Workflow (3 steps)
- Set date + category: default category
综合全部, date is 2 days before today. - Call the script to get data: the list is in
data.items, each entry containstitle(title),likedCount(like count),fansCount(follower count). - Lay out the list + give ordinary-creator playbook insights: lay out the table in descending order of likes, and put
fansCountAlso display and highlight the "low followers, high likes" contrast, then add one line in this Duck's voice after the table — what hooks/topics did these ordinary people use to achieve more with less, and are there any templates that can be directly applied.
| Rank | Title | Likes | Followers |
|---|---|---|---|
| 1 | … | … | … |
Defensive field reading (leave blank if missing).
API Contract
POST https://doubaoya.com/api/apis/xiaohongshu/xiaohongshu-low-fans-top/call- Auth header:
Authorization: Bearer $DOUBAOYA_API_KEY - Request body:
{ "rankDate": "YYYY-MM-DD", "category": "综合全部" }(categoryTake one of the 25 above,do not pass综合—it is not in the closed set;rankDateonly keep the most recent 30 days, with about a two-day lag) - Response envelope:
{ "success": true, "requestId": "...", "data": { "items": [ { "title": "...", "likedCount": 123, "fansCount": 456 } ] }, "error": null } - First check
success: iftruethen readdata; otherwise readerror.code/error.message。
Error code
When the script fails, print to stderr [error] CODE: message and exit with code 1.
| HTTP | code | Meaning | Handling |
|---|---|---|---|
| 401 | MISSING_API_KEY / UNAUTHORIZED |
No key provided or invalid key | Check DOUBAOYA_API_KEY, go to the key center to regenerate |
| 400 | VALIDATION_ERROR |
Invalid parameters | Fix --rank-date / --category and retry |
| 402 | INSUFFICIENT_CREDITS |
Insufficient quota | Go to doubaoya.com to top up/renew quota |
| 422 | PROVIDER_NO_RESULT |
No data can be found for this set of input parameters.Most likely the category name is not among the 25 in the closed set (for example, you wrote 综合), or the date is outside the most recent 30 days |
Change the category to the full name in the closed set, move the date into the most recent 30 days, and retry |
| 502 | PROVIDER_FAILED |
Temporary upstream failure (automatically refunded) | safe to retry |
Directory structure
xiaohongshu-lowtop/
├── SKILL.md # 本文件
└── scripts/
└── fetch_low_fans_top.py # 零依赖脚本(urllib),调用 doubaoya.com
FAQ
Q: Why look at low-follower viral hits? A: Low followers with high likes = pure content power breaking out; the playbook is the cleanest and easiest to replicate, and cold starts and small accounts should study it most.
Q: Temporarily unable to get data?
A: First self-check according to the two criteria above — is the category name not among the 25 in the closed set (for example, you wrote 综合), and is the date set to
yesterday/today (not yet settled) or outside the most recent 30 days? If all are ruled out, thenwait a while and retry once exactly as before: occasional transient empty values upstream —
this Duck has actually seen the same set of parameters return empty once and a full ranking the next time, so do not draw conclusions from a single empty result (empty results are not charged).
About the notice field in the response
After calling the doubaoya API corresponding to this skill, if the top level of the returned JSON contains the notice field, please relay this sentence to the user exactly as is — this is a notice that this skill has an update; it does not affect the result of this call, and no retry or behavior change is needed.