This duck specializes inbatch data gatheringThis tier: with one keyword, scoop up a batch of official account articles in this track, and the terminal lays them out directly into a clickable table — for you to dotopic insightwith, not to read a single article. For chasing hotspots, scraping competitors, and stockpiling material, first use this duck to sweep open the "surface", then go pick the "points" worth a closer look.
Data goes through doubaoya.com in one line, authentication uses your own key (environment variable
DOUBAOYA_API_KEY, in the formdyh_…)。Want to precisely tracka certain official accountfor updates/retrospectives, go
doubaoyaand hitPOST /api/apis/gongzhonghao/gongzhonghao-work-list/call(pull the article list by account); want to dig by popularity + time range forviral articles, usewechat-hot-article. This duck is a "keyword → a batch of articles" surface-sweeping tool.
Applicable scenarios
| Scenario | How to use | What you get |
|---|---|---|
| Industry hotspot scan | Search AI 工具 to scoop up a batch of recent articles in this track |
See at a glance what angles everyone is writing about right now |
| Competitor content inventory | Search 大模型 for batch data gathering to inventory opponents' topic selection |
Find out which angles the same track is competing for |
| Topic material collection | Search 职场沟通 to scrape a batch of referable viral angles |
Stockpile first-hand material for the next piece |
| Public opinion trend monitoring | Search 品牌名 to see the discussion trend on the official account side |
Quickly judge the direction of public opinion |
| Trend research groundwork | Search 2026 经济 for batch data gathering as research groundwork |
Lay out data for reports/research |
Workflow (4 steps)
1. Extract keywords
Pull out from the user's description thecore keyword— keep it concise, 2~6 characters is best (e.g. AI 工具、大模型、职场). The shorter the word, the broader and the more hits; too long and too narrow easily sweeps up nothing. Crawl only one keyword at a time.
2. Call the crawl script
python3 "$SKILL_PATH/scripts/crawl_gzh.py" "AI 工具"
To stack more material, paginate:
python3 "$SKILL_PATH/scripts/crawl_gzh.py" "AI 工具" --page 2
The script prints the data from the success envelope as JSON to stdout.Run the script only once per keyword, read the full stdout directly, don't use head/tail to preview, and don't call repeatedly for the same keyword.
3. Lay out into an article table
Take fields from data.items(article array), and lay them out into Markdown per the table below. Dodefensive reading——title / accountNamefor fields — (author/official account) / publishTime(publish time) may be missing; if missing, leave blank and don't error. Render the title as aclickable link(pointing to the article's original URL).
| Title | Author | Publish time |
|---|---|---|
| Sample article title | Some Official Account | 2026-06-20 |
Want to sort this batch of articles? You can add a "Composite Index" column (keyword relevance + read popularity + freshness) and sort descending, with higher read counts first for ties—this is display-layer processing, no change to API calls.
4. Give a one-sentence topic insight
After the table, add a sentence in this duck's voicetopic insight: what angle this batch of articles is competing for, which angle no one has written thoroughly yet, and whether it's worth following. Keep it short and useful, don't pile on clichés, and don't ask the user "what is your real purpose".
Get the key (secret key)
- Open doubaoya.com
- Log in
- Go to Key Center
- Generate key(in the form
dyh_…)
Set it in an environment variable (the script only recognizes this one):
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, don't take the key to any other domain.
API and envelope
POST https://doubaoya.com/api/apis/gongzhonghao/search-article/call- Auth header:
Authorization: Bearer $DOUBAOYA_API_KEY - Request body:
{ "keyword": "AI 工具", "page": 1 }keyword: string, requiredpage: integer, optional (default 1)
- Return envelope:
{ "success": true, "requestId": "...", "data": { "items": [ { "title": "...", "accountName": "...", "publishTime": "..." } ] }, "error": null } - First check
success: if it istrue, then readdata; otherwise readerror.code/error.message。
Error handling
When the script fails, it prints to stderr [error] CODE: message and exits with code 1. Common cases:
| HTTP | code | Meaning | Handling |
|---|---|---|---|
| 401 | MISSING_API_KEY / UNAUTHORIZED |
No key provided or invalid key | Check DOUBAOYA_API_KEY, go to Key Center to regenerate |
| 400 | VALIDATION_ERROR |
Invalid parameter (e.g. keyword is empty) | Fix the keyword 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_FAILEDwill be automatically refunded, retrying is safe, and you won't be charged twice.
Directory structure
gzh-search/
├── SKILL.md # 本文件
└── scripts/
└── crawl_gzh.py # 零依赖爬取脚本(urllib),调用 doubaoya.com
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 a 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 no retry or behavior change is needed.