This duck helps you scan Bilibili for viral cultural tourism videos by keyword—fishing out the hottest travel Vlogs, city documentaries, and in-depth scenic area videos, laying them out in a clickable viral video table in the terminal, then clustering them into several cultural tourism topic directions to build a directly actionable long-video benchmarking list.
Bilibili is the high ground for in-depth cultural tourism videos: travel Vlogs, city documentaries, and culture-oriented topics all produce long-tail viral hits here. Suitable forcultural tourism bureaus, scenic area operations, city cultural tourism accounts, travel UP creatorsto find long-video topics, see benchmarks in the same track, and carve out narrative angles.
Data goes through doubaoya.com as a single line, authentication uses your own token (environment variable
DOUBAOYA_API_KEY, in the formdyh_…)。
Note: the underlying layer is the Bilibili content feed, which fetches videos by the keyword you give. "Cultural tourism" is using keywords to treat it as a cultural tourism topic lens—results depend on the feed's hits for your word; the closer the word is to cultural tourism, the more accurate it is.
Use cases
| Scenario | How to use | What you get |
|---|---|---|
| Long-video topic selection | Use 文旅、旅行 Vlog to scan high-play viral hits |
See clearly what is hot in cultural tourism long videos right now |
| City documentary benchmarking | Use 城市、城市漫游 etc. |
Lock onto the narrative and structure of city documentaries |
| In-depth scenic area orientation | Use 景区、古建、国风 to find angles |
Find how in-depth scenic area videos are shot |
| Viral video benchmarking | See which angles high-like videos cluster around | Find content angles in the same track worth benchmarking |
| Narrative angle breakdown | Look at the titles and structure of high-like videos | Distill the viral formulas of cultural tourism long videos |
Workflow (4 steps)
1. Set the keyword
Extract one cultural tourism direction keyword(required) from the user's description, such as 文旅、旅行 Vlog、城市漫游、景区、古建、国风. Broad words get more hits, narrow words are more focused; scan only one keyword at a time.
2. Call the script
python3 "$SKILL_PATH/scripts/fetch_culture_feed.py" "旅行 Vlog"
Pagination / adjust items per page (optional):
python3 "$SKILL_PATH/scripts/fetch_culture_feed.py" "城市漫游" --page 2 --size 30
The script prints the data from the success envelope as JSON to stdout.Run the script only once per query, read the full stdout directly, do not use head/tail to preview, and do not call repeatedly with the same parameters.
3. Render the viral video table
From data.items(video array), take the fields and lay them out as a Markdown table. The core fields this interface reliably returns are title(title) and likeCount(likes); read defensively—fields may be missing, leave them blank if so, do not error, and do not invent links or UP creators the interface did not return. If a given return happens to include a link, then render the title as a clickable link; otherwise plain text is fine.
| Title | Likes |
|---|---|
| Example cultural tourism video | 5.6w |
4. Cluster into topic directions + one-sentence insight
Take this batch of videos from a cultural tourism anglecluster(e.g. travel Vlog / city documentary / scenic area deep dive / ancient architecture guofeng / food exploration), pick out representative viral hits for each direction, and form a short benchmarking list. At the end, add one line in this duck's tonetopic insight: which angle is hottest in current cultural tourism long-form video, and which narrative still has room. Don't pile on clichés, don't ask the user their purpose.
Get key (passcode)
- Open doubaoya.com
- Log in
- Go to passcode center
- Generate passcode(in the form
dyh_…)
Configure to environment variable (the script only recognizes this):
export DOUBAOYA_API_KEY="dyh_你的口令"
Iron rule: the passcode is never printed, never written to a file, never echoed back to the user. The script itself also never outputs the passcode. All requests are sent only to doubaoya.com。
Interface and envelope
POST https://doubaoya.com/api/apis/bilibili/bilibili-playlet-feed/call- Auth header:
Authorization: Bearer $DOUBAOYA_API_KEY - Request body:
{ "keyword": "旅行 Vlog", "pageNum": 1, "pageSize": 20 }keyword: string, requiredpageNum: integer, optional (default 1, controlled by--pagecontrolled)pageSize: integer, optional (default 20, controlled by--sizecontrolled)
- Return envelope:
{ "success": true, "requestId": "...", "data": { "items": [ { "title": "...", "likeCount": 56000 } ] }, "error": null } - First check
success: istrueonly then readdata; otherwise readerror.code/error.message。
Error handling
When the script fails, print to stderr [error] CODE: message and exit with code 1. Common cases:
| HTTP | code | Meaning | Handling |
|---|---|---|---|
| 401 | MISSING_API_KEY / UNAUTHORIZED |
No passcode or invalid passcode | Check DOUBAOYA_API_KEY, go to the passcode 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 automatically refund, retrying is safe and will not double-charge.
Directory structure
cultural-tourism-bilibili-feed/
├── SKILL.md # 本文件
└── scripts/
└── fetch_culture_feed.py # 零依赖脚本(urllib),调用 doubaoya.com