This duck will, bykeyword + time rangefish out for you official accounts on the same topicviral articles—not just whether there are any, but which ones actually racked up reads. With reads / watches / likes, laid out in the terminal as a popularity ranking, then a line of viral insight: who is leading this wave and what they're relying on.
Data goes through doubaoya.com in one line, authentication uses your own key (environment variable
DOUBAOYA_API_KEY, in the formdyh_…)。If you just want to scan a batch of articles without looking at popularity, use
gzh-search; if you want to use this batch of viral articles to directly assist writing and crafting titles, usewechat-hot-write。
Use cases
| Scenario | How to use | What you get |
|---|---|---|
| Recent viral article roundup | Search AI 工具, defaults to the last 7 days |
Who racked up volume in this track this week |
| Dig up viral articles in a specified period | Search 大模型 --start 2026-06-01 --end 2026-06-20 |
High-read articles from a certain period |
| Viral article pattern analysis | Look at the commonalities in titles/angles of the top few | Figure out the formula of this wave of viral articles |
| Chase trends and find an angle | Search trending words to see who has already written a hit | Judge whether there's still an opening to follow |
| Competitor viral article monitoring | Regularly search competitor topics to see their viral articles | Keep an eye on opponents' content playbook |
Workflow (4 steps)
1. Extract keywords
Extract thecore keyword, best kept to 2–6 characters (e.g. AI 工具、大模型、职场). Search only one keyword at a time.
2. Call the viral article script
# 默认:最近 7 天(end=今天,start=今天往前 6 天)
python3 "$SKILL_PATH/scripts/hot_article.py" "AI 工具"
# 指定时间区间
python3 "$SKILL_PATH/scripts/hot_article.py" "AI 工具" --start 2026-06-01 --end 2026-06-20
The script prints the data from the success envelope as JSON to stdout.Run it only once per query, read the full stdout directly, don't preview, don't call repeatedly.
3. Lay out the viral article popularity ranking
From data.items take the fields and lay out a Markdown table, sorted by popularity (reads) descending. Read the fields in adefensive way—leave blank if missing, don't error out. Popularity fields:clicksCount(reads) / watchCount(watches) / likeCount(likes).
| Title | Reads | Watches | Likes |
|---|---|---|---|
| Sample viral article | 10.0w | 1.2k | 3.4k |
Read counts of ten thousand or more can be formatted as
10.0wto be more eye-catching—a presentation-layer treatment, not changing the API call.
4. Give a line of viral insight
After the table add a line: what angle this wave of viral articles is grabbing, what commonalities the top few have in titles/topics, and whether there's still an opening to follow. Brief, evidence-based, don't pile on platitudes.
Get a key (secret key)
- Open doubaoya.com
- Log in
- Go to Key Center
- Generate key(in the form
dyh_…)
Set into an environment variable (the script only recognizes this one):
export DOUBAOYA_API_KEY="dyh_你的密钥"
Iron rule: the key is never printed, never written to a file, and never echoed back to the user. The script itself also never outputs the key. All requests are sent only to doubaoya.com。
Interface and envelope
POST https://doubaoya.com/api/apis/gongzhonghao/hot-article/call- Auth header:
Authorization: Bearer $DOUBAOYA_API_KEY - Request body:
{ "keyword": "AI 工具", "startDate": "2026-06-21", "endDate": "2026-06-27" }keyword: string, requiredstartDate/endDate:YYYY-MM-DD. The script defaults toendDate=今天、startDate=今天往前 6 天, can be overridden with--start/--end.
- Return envelope:
{ "success": true, "requestId": "...", "data": { "items": [ { "title": "...", "clicksCount": 0, "watchCount": 0, "likeCount": 0 } ] }, "error": null } - First check
success: only when it istruereaddata; otherwise readerror.code/error.message。
Error handling
When the script fails, it prints to stderr [error] CODE: message and exits with exit 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 (e.g. empty keyword, wrong date format) | Fix and retry |
| 402 | INSUFFICIENT_CREDITS |
Insufficient quota | Go to doubaoya.com to top up/renew quota |
| 502 | PROVIDER_FAILED |
Temporary upstream failure (automatically refunded) | Safe to retry |
502 PROVIDER_FAILEDis automatically refunded, retrying is safe, and you will not be charged twice.
Directory structure
wechat-hot-article/
├── SKILL.md # 本文件
└── scripts/
└── hot_article.py # 零依赖爆文脚本(urllib),调用 doubaoya.com
About the notice field in the response
After calling the doubaoya API corresponding to this skill, if the returned JSON has a top-level notice field, please relay this sentence to the user verbatim—this is a notice that this skill has an update, it does not affect the result of this call, and there is no need to retry or change behavior.