📝 Overview
Enter a keyword to find user (author) accounts on Dongchedi, with follower counts and bios clear at a glance; select the user you want to view and immediately pull their post list, with title, type, reads, likes, comments, favorites, and publish time all shown, and every post can be clicked via link to jump to its original page.
✨ Features
| Feature Module | Capability Description | Core Value |
|---|---|---|
| User Keyword Search | Enter keywords to search Dongchedi users (authors) | Precisely discover target users |
| User Data Display | Nickname, follower count, bio, homepage link | Quickly assess account influence |
| Post List Query | After selecting a user, retrieve their post list (title/type/reads/likes/comments/favorites/publish time), showing the latest 20 by default, with the option to view all | See content performance at a glance |
| Direct Post Access | Each post includes a clickable link | One-click jump to view the original post |
| Paginated Browsing | The user list supports browsing across multiple pages | Do not miss any candidate user |
| Subscription Push | After subscribing to a user, automatically push their posts updated yesterday every day at 9:00 | Continuous tracking, never miss an update |
🎯 Target Users
- 🔍 Content Creators — Find benchmark accounts in the automotive field and study their topic directions and content performance.
- 📊 Operations / Data Analysis — Figure out which active creators a certain brand/model has on Dongchedi.
- 🏢 Brands / MCNs — Screen potential collaboration influencers in the automotive field and evaluate value by follower count and post data.
- 🚗 Automotive Industry Professionals — Track favorite car reviewers and quickly browse all their recent posts.
🔑 Authentication
Get API Key
Please go to Redfox Hub to get the API KEY
Configure API Key
Option 1: Taking OpenClaw as an example, add REDFOX_API_KEY to ~/.openclaw/openclaw.json :
{ "env": { "REDFOX_API_KEY": "ak_xxxx..." } }
Option 2: Terminal configuration
export REDFOX_API_KEY="ak_xxxx..."
🔄 Workflow
Step 1: Understand user intent and extract keywords
⚠️ Core rule: semantic understanding first, prioritize extracting niche direction words (brand, model, field terms)
1. Extract keywords
- Extract 2-6 character niche keywords from the user's description, such as brand names ("BYD"), models ("Li Auto L8"), and field terms ("off-road" "car review")
- Filter redundant modifiers: when the user says "xx users" "xx authors" "xx accounts" "xx influencers" "xx bloggers", the search keyword only takes the core part. xx, remove the category modifier at the end. For example, "Xiaomi author" → search "Xiaomi", "off-road expert" → search "off-road"
- If the user's intent is ambiguous (e.g., "help me search Dongchedi users"), proactively ask: "Which direction or field of Dongchedi users would you like to search for?"
- Do not guess and call the script on your own when the user has not provided keywords
2. Identify the page number parameter(use the default value when the user does not specify)
- Page number(
--page): default1- User mentions "next page", "page 2" → corresponding page number
- User mentions "previous page" → current page - 1
- Page number not mentioned →
1(default)
Step 2: Call the user search script
python3 ~/.agents/skills/dongchedi-user-search/scripts/search_user.py "<关键词>" [--page 页码]
Parameter description:
| Parameter | Optional values | Meaning |
|---|---|---|
| keyword | Any string | Search keyword |
--page |
Positive integer | Page number, starting from 1 (default 1) |
The script outputs in JSON format:
| Field | Description |
|---|---|
users |
List of matched users (maintain the original order of the interface) |
page |
Current page number |
has_next |
Whether there is a next page (true/false) |
next_offset |
Next page offset (pagination information, no need to show to the user) |
total |
Number of items returned on the current page |
Fields for each user:
| Field | Description |
|---|---|
nickname |
User nickname |
user_id |
User ID (used in Step 4 when fetching the works list) |
followers |
Follower count |
bio |
User bio |
avatar |
Avatar URL |
profile_url |
Profile link |
⚠️ Complete data reading rule: When the JSON data output by the script is large, the terminal may truncate the middle content and display // This is the omitted part. In this case, you must read the complete file path indicated in the Bash output (e.g., Full output saved to: /path/to/file), use the Read tool to obtain the complete JSON, and then generate the table, ensuring that all field data is fully visible and no records are omitted.
Step 3: Determine the result and display the user list
Case A: users count > 0 (there are matching results)
A1. Inform the user of the query scope
📊 Keyword "XXX" found NDongchedi users (page {page}), the detailed data is as follows:
A2. Render a Markdown table (display all)
| # | 用户昵称 | 粉丝数 | 简介 | 用户ID | 主页链接 |
| --- | ---------------- | ------- | --------------------------- | ------------ | ----------------------- |
| 1 | 小米公司 | 359.8w | 小米公司官方信息发布账号。 | 3446334881 | [访问主页](profile_url) |
Formatting rules:
- Follower count:
< 10000use the raw number (e.g.,320);≥ 10000and< 1亿usex.xwformat (e.g.,1.2w、359.8w);≥ 1亿usex.x亿format (e.g.,1.2亿) - Nickname: display in full, do not truncate
- Bio: display at most 40 characters, end with
...if exceeded; display— - User ID: display in full
- Profile link: always display the text
[访问主页](profile_url), click to jump to the Dongchedi user profile
A3. Pagination prompt (⚠️ immediately after the table, cannot be omitted, must be output every time)
- If
has_nextis true:
📄 Currently page {page} . Reply "next page" to continue viewing.
- If
has_nextis false (already on the last page):
📄 Currently page {page} , no more data.
"Next page" call rule when paging: If the user replies "next page", increment the page number when calling the script:
python3 ~/.agents/skills/dongchedi-user-search/scripts/search_user.py "<关键词>" --page {page+1}
A4. Guide the user to choose (⚠️ must be output, cannot be omitted)
👉 Whose works list do you want to see? Just reply with the number or nickname (e.g. "2" or "Xiaomi Company").
⚠️ A1~A4 are all indispensable and must be completed consecutively in the same round of output. If A3 or A4 is missing, it is considered an execution error and the output must be supplemented again.
Case B: users count = 0 (no matching results)
B1. Apology prompt
😔 Sorry, no Dongchedi users related to "XXX" were found. Try another keyword (such as a brand name, model, or field term).
⚠️ B1 must be completed in the same round of output and must not be interrupted.
Step 4: Identify the user's selection and call the works list script
1. Match the user
- User replies withnumber(e.g. "2") → match the user corresponding to that number in the previous round's user table
- User replies withnickname → match by nickname in the previous round's user table
- If no match can be made or there is ambiguity (e.g. multiple similar nicknames), ask the user to confirm which user they want to see
2. Call the works list script
python3 ~/.agents/skills/dongchedi-user-search/scripts/work_list.py "<user_id>"
Parameter description:
| Parameter | Optional values | Meaning |
|---|---|---|
| user_id | string | User ID (from the user search results' user_id) |
--date |
YYYY-MM-DD / yesterday / today |
Filter works by publication time for the specified date; when subscribing to push, pass yesterday, by default no filtering |
⚠️ Work queries do not support pagination: cursor always pass 0, which returns all works collected for that user in a single call (capped at about 100 items at most); there is no paging parameter, nor the ability to page to earlier works.
The script outputs in JSON format:
| Field | Description |
|---|---|
user_id |
User ID |
date |
Date filter value (empty string when not filtered) |
total_count |
Total number of works collected for that user (before filtering) |
count |
Number of works currently returned (after filtering) |
works |
Works list (keeps the API's original order, from newest to oldest by publication time) |
Fields for each work:
| Field | Description |
|---|---|
work_id |
Work ID |
title |
Work title/description (Markdown cleaned) |
work_type |
Work type (1/2/7/9) |
work_type_label |
Type Chinese name: Article / Video / Image-text post |
publish_time |
Publication time (Unix timestamp, seconds) |
publish_time_str |
Formatted publication time (YYYY-MM-DD HH:MM) |
read_count |
Read count |
like_count |
Like count |
comment_count |
Comment count |
collect_count |
Favorite count |
duration_seconds |
Video duration (seconds), has a value when the type is video |
cover_url |
Cover image URL |
image_urls |
Image list (contains multiple images for image-text types) |
video_id |
Video ID, has a value when the type is video |
work_url |
Work detail page link |
author_name |
Author nickname |
author_id |
Author ID |
⚠️ Complete data reading rule: Same as Step 2: if the terminal output is truncated, you must read the full file path indicated in the prompt to obtain the complete JSON before generating the table.
Step 5: Determine the result and display the works list
Case A: works count > 0 (has works)
A1. Inform the user of the query scope
- Regular query (
dateis empty):
📊 User "XXX" has Nworks in total. The detailed data is as follows:
- Date-filtered query (
dateis not empty, such as subscription push):
📊 User "XXX" on {date} updated Nworks. The detailed data is as follows:
A2. Render the Markdown table (keep the original API order; secondary sorting is prohibited)
- Regular query (
dateis empty): by default, only the first 20 items are displayed;countwhen ≤ 20, display all - Date-filtered query (
dateis not empty, such as subscription push): no item limit; display all
| # | 发布时间 | 作品标题 | 类型 | 阅读 | 点赞 | 评论 | 收藏 |
| --- | ------------------ | ------------------------------------- | -------- | ------ | ---- | ---- | ---- |
| 1 | 2026-10-09 17:11 | [13万价位,后驱,激光雷达,磁流变悬架...](work_url) | 图文动态 | 6706 | 2 | 0 | 0 |
Formatting rules:
- Work title: use the
[标题](work_url)hyperlink format; if it exceeds 30 characters, truncate it and end with...Ending - Type: directly use the
work_type_labelfield (article / video / image-text post) - Publish time: directly use the
publish_time_strfield - Numbers (reads/likes/comments/favorites):
< 10000use the original number;≥ 10000and< 1亿usex.xwformat (e.g.,1.2w、12.5w);≥ 1亿usex.x亿format
A3. View all prompt (⚠️ must be output for regular queries when count > 20)
📄 Displayed the first 20 items (out of Nworks). Reply "View all" to view all works.
A4. Subscription prompt (⚠️ must be output)
📬 Want to keep tracking them? After subscribing to "XXX", every day at 9:00 we will automatically push their works updated yesterday. Reply "Subscribe" to create it.
A5. Guidance after viewing works (⚠️ must be output)
👉 Need to view other users' works or search for other keywords? Just tell me directly.
Case B: works count = 0 (no works)
B1. Prompt (differentiated by scenario)
- Date-filtered and
total_count> 0 (subscription push / specified date scenario):
😔 User "XXX" has no updated works on {date} . (For subscription push, this can be phrased as "no updated works yesterday")
- Regular query or
total_count= 0:
😔 User "XXX" currently has no collected works (Red Fox has not collected this user's public works, or the user has few works). You can try another user.
⚠️ B1 must be completed in the same round of output and must not be interrupted.
View all handling (when the user replies "View all")
Trigger condition: Executed when the user expresses the intent to continue viewing works after the works list is displayed (such as "View All", "All", "View All Works", "Next Page", etc.).
1. Display Method
- Work queries do not support pagination: Do not display in batches in a "Next Page" manner (such as 20 items each time), and do not output any "Next Page"-style pagination prompt; continuing to view is alwaysone-timedisplay of all remaining works
- Based on the complete work data already obtained in the previous round,continue displayingall remaining works starting from item 21 (same table format and formatting rules, numbering continuously increasing from 21, maintaining the original interface order, secondary sorting prohibited), until all are displayed
- Data should preferentially reuse the previous round's script output; if the previous round's output was truncated, read it according to the "Complete Data Reading Rules" from the complete file path indicated in the Bash output
- Do not initiate a new interface request; only when the previous round's complete data is truly unavailable, re-execute the same script command once
- If all works have already been displayed when replying "View All" (such as
count≤ 20), simply state that all works have been displayed; no need to output repeatedly - If the user requests "View All" after a date-filtered display (subscription push), perform one regular query for that user (without
--date) and fully display all their works (no longer applying the first 20 items limit)
2. Subsequent Output
- After the continued display is completed, output only the guidance message (A5); the subscription prompt and View All prompt are no longer output repeatedly
Step 6: Subscription Handling
Trigger condition: When the user replies "Subscribe" after the works list is displayed (or clearly expresses the intent to subscribe to the current user), create a daily push task for them.
- If the user directly requests subscription without first displaying works (such as "Subscribe to Dongchedi's Xiaomi Company"), first locate the unique user according to Steps 1~4 (if ambiguity exists, first ask the user to confirm), then execute this step.
Silent execution principle: Intermediate steps such as task query, creation/update, etc. must not output process prompts to the user (such as "Creating subscription"); only display the final subscription success prompt.
1. Query Existing Subscription Tasks
Use automation_update mode=list to obtain tasks related to "Dongchedi Subscription", and read the subscribed users and corresponding userIds in each task.
2. Determine Append / Create New
| Condition | Operation |
|---|---|
| Existing subscribed users + new user ≤ 10 | Append:automation_update mode=update, append the user's fetch command to the existing task prompt (deduplicated) |
| Exceeds 10 | Create new:automation_update mode=create, create a new independent daily task "Dongchedi Subscription Works Daily Report #2" |
| User requests to cancel subscription | Remove the user's command from the corresponding task prompt; if there are no users left in the task, delete the task |
3. Task Configuration
- Execution time: every day at 9:00 (
FREQ=DAILY;BYHOUR=9;BYMINUTE=0) - automation prompt template (one command per subscribed user, multiple users listed in sequence):
拉取懂车帝订阅用户昨日更新的作品并展示给用户(保持接口原始顺序,禁止二次排序;某用户昨日无更新时输出「{昵称}:昨日无更新作品」):
python3 ~/.agents/skills/dongchedi-user-search/scripts/work_list.py "{user_id}" --date yesterday
--date yesterdayThe script internally filters "yesterday" data by publish time; no manual time comparison is needed
4. Subscription success prompt (the only external output)
✅ Subscription successful! Every day at 9:00, it will automatically push "XXX" works updated yesterday. If there were no updates yesterday, it will prompt "XXX: No works updated yesterday".
Step 7: End output
After all content has been displayed, do not wait; end output immediately.
📌 Notes
- Work queries do not support pagination,
cursorfixedly pass0; a single pull retrieves the works of that user indexed by Red Fox (capped at about 100 items at most), and it does not have the ability to page through earlier works - Date filtering (
--date) is performed internally by the script by comparing publication times (local time zone), and only filters within the range of works returned by this single pull - Work data remains in the order returned by the interface (by publication time from newest to oldest); secondary sorting is prohibited
- A regular work list query displays the first 20 items by default; the only continuation logic is that after the user replies "View all", all remaining works already retrieved are displayed in one go based on the data already obtained (numbering starts from 21), without initiating new interface requests, and without outputting "next page"-style pagination prompts
- All data comes from Red Fox indexing; some users may have works that are not indexed or are indexed with a delay