中文 | English
This project is designed to be lightweight and easy to deploy
| 🚀 Quick Start | 🤖 AI Analysis | ⚙️ Configuration Guide | 📝 Changelog | ❓ FAQ & Support |
|---|---|---|---|---|
| 🐳 Docker Deployment | 🔌 MCP Clients | 📚 Related Projects | 🪄 Sponsors |
Thanks to GitHub for providing free infrastructure, which is the biggest prerequisite for this project to run conveniently with one-click fork.
This project uses the API from newsnow to fetch multi-platform data. Special thanks to the author for providing this service.
After communication, the author indicated no concerns about server pressure, but this is based on their goodwill and trust. Please everyone:
Thanks to the following platforms and individuals for recommendations (in chronological order)
Thanks to financial supporters. Your generosity has transformed into snacks and drinks beside my keyboard, accompanying every iteration of this project
"One-yuan appreciation" has been suspended. If you still want to support the author, please visit the official account article and click "Like Author" at the bottom.
| Supporter | Amount (CNY) | Date | Note |
|---|---|---|---|
| D*5 | 1.8 * 3 | 2025.11.24 | |
| *鬼 | 1 | 2025.11.17 | |
| *超 | 10 | 2025.11.17 | |
| R*w | 10 | 2025.11.17 | Great agent work! |
| J*o | 1 | 2025.11.17 | Thanks for open source |
| *晨 | 8.88 | 2025.11.16 | Nice project |
| *海 | 1 | 2025.11.15 | |
| *德 | 1.99 | 2025.11.15 | |
| *疏 | 8.8 | 2025.11.14 | Great project |
| M*e | 10 | 2025.11.14 | Open source is not easy |
| **柯 | 1 | 2025.11.14 | |
| *云 | 88 | 2025.11.13 | Good project |
| *W | 6 | 2025.11.13 | |
| *凯 | 1 | 2025.11.13 | |
| 对*. | 1 | 2025.11.13 | Thanks for TrendRadar |
| s*y | 1 | 2025.11.13 | |
| **翔 | 10 | 2025.11.13 | Wish I found it earlier |
| *韦 | 9.9 | 2025.11.13 | TrendRadar is awesome |
| h*p | 5 | 2025.11.12 | Support Chinese open source |
| c*r | 6 | 2025.11.12 | |
| a*n | 5 | 2025.11.12 | |
| 。*c | 1 | 2025.11.12 | Thanks for sharing |
| ... | ... | ... | (More 50+ supporters) |
Default monitoring of 11 mainstream platforms, with support for adding custom platforms.
💡 For detailed configuration, see Configuration Guide - Platform Configuration
Three Push Modes:
| Mode | Target Users | Push Feature |
|---|---|---|
| Daily Summary (daily) | Managers/Regular Users | Push all matched news of the day (includes previously pushed) |
| Current Rankings (current) | Content Creators | Push current ranking matches (continuously ranked news appear each time) |
| Incremental Monitor (incremental) | Traders/Investors | Push only new content, zero duplication |
💡 Quick Selection Guide:
- 🔄 Don't want duplicate news → Use
incremental- 📊 Want complete ranking trends → Use
current- 📝 Need daily summary reports → Use
dailyFor detailed comparison and configuration, see Configuration Guide - Push Mode Details
Additional Feature - Push Time Window Control (Optional):
💡 This feature is disabled by default, see Quick Start for configuration
Set personal keywords (e.g., AI, BYD, Education Policy) to receive only relevant trending news, filtering out noise.
Basic Syntax (4 types):
+: Narrow scope!: Exclude noise@: Control display count (v3.2.0 new)Advanced Features (v3.2.0 new):
Group-based Management:
💡 Basic Configuration: Keyword Configuration - Basic Syntax
💡 Advanced Configuration: Keyword Configuration - Advanced Settings
💡 You can also skip filtering and receive all trending news (leave frequency_words.txt empty)
Real-time tracking of news popularity changes helps you understand not just "what's trending" but "how trends evolve."
💡 Push format reference: Configuration Guide - Push Format Reference
No longer controlled by platform algorithms, TrendRadar reorganizes all trending searches:
💡 Weight adjustment guide: Configuration Guide - Advanced Configuration
Supports WeWork (+ WeChat push solution), Feishu, DingTalk, Telegram, Email, ntfy, Bark, Slack — messages delivered directly to phone and email.
AI conversational analysis system based on MCP (Model Context Protocol), enabling deep data mining with natural language.
💡 Usage Tip: AI features require local news data support
- Project includes November 1-15 test data for immediate experience
- Recommend deploying the project yourself to get more real-time data
See AI Analysis for details
One-click GitHub Fork to use, no programming required.
30-second deployment: GitHub Pages (web browsing) supports one-click save as image for easy sharing
1-minute deployment: WeWork (mobile notification)
💡 Tip: Want a real-time updated web version? After forking, go to your repo Settings → Pages and enable GitHub Pages. Preview Effect.
Transform from "algorithm recommendation captivity" to "actively getting the information you want"
Target Users: Investors, content creators, PR professionals, news-conscious general users
Typical Scenarios: Stock investment monitoring, brand sentiment tracking, industry trend watching, lifestyle news gathering
| Github Pages Effect (Mobile Adapted, Email Push) | Feishu Push Effect |
|---|---|
![]() | ![]() |
Upgrade Instructions:
main.py in your forked repo with the latest version🔧 Format Optimization
Bark Push Enhancement
Slack Format Precision
<url|text> and bold syntax: *text*Performance Improvement
🔧 Upgrade Instructions:
main.py,config.yamlMCP Module Update:
🎉 Added Slack Push Support
Team Collaboration Push Channel
Multiple Deployment Methods
SLACK_WEBHOOK_URL SecretSLACK_WEBHOOK_URLconfig/config.yaml configuration file📖 Detailed Configuration Tutorial: Quick Start - Slack Push
🔧 Upgrade Instructions:
main.py, config/config.yaml, .github/workflows/crawler.yml🎉 Added Bark Push Support
iOS Exclusive Push Channel
Multiple Deployment Methods
BARK_URL SecretBARK_URLconfig/config.yaml configuration file📖 Detailed Configuration Tutorial: Quick Start - Bark Push
🐛 Bug Fix
ntfy_server_url in config.yaml was ignored (#345)🔧 Upgrade Instructions:
main.py, config/config.yaml, .github/workflows/crawler.yml🎯 New Advanced Customization Features
Keyword Sorting Priority Configuration
Display Count Precise Control
@number syntax to set specific limits📖 Detailed Tutorial: Keyword Configuration - Advanced Settings
🔧 Upgrade Instructions:
main.py, config/config.yaml'float' object has no attribute 'lower' error encountered by some users in GitHub Actions environmentUpgrade Instructions (GitHub Fork Users):
main.pyMCP Module Update:
markdown (WeWork group bot) and text (personal WeChat app)WEWORK_MSG_TYPE environment variable configuration, supporting GitHub Actions, Docker, docker-compose and other deployment methodstext mode automatically strips Markdown syntax for clean plain text pushUpgrade Instructions (GitHub Fork Users):
main.py, config/config.yaml.github/workflows/crawler.yml (if using GitHub Actions)enable_crawler, report_mode, push_window, etc.) support override via environment variables, solving config file modification issues for NAS users (see 🐳 Docker Deployment chapter)MCP Module Update:
Major Update - AI Analysis Feature Launched 🤖
Core Features:
Analysis Capabilities:
Update Note:
Updates:
Upgrade Note:
Thanks to nidaye996 for discovering the UX issue
Updates:
Upgrade Note:
Updates:
Upgrade Note:
Added ntfy Push Notification
Core Features:
Use Cases:
Upgrade Note:
Fix Description:
Usage Notes:
Upgrade Note:
Usage Notes:
Core Improvements:
Upgrade Note:
Fixed Issues:
Major Refactoring:
config/config.yaml file (main.py I still didn't split, convenient for you to copy and upgrade)daily (daily summary), current (current rankings), incremental (incremental monitoring)Config File Description:
config/config.yaml - Main config file (application settings, crawler config, notification config, platform config, etc.)config/frequency_words.txt - Keyword config (monitoring vocabulary settings)New Feature: Added incremental push (configure FOCUS_NEW_ONLY at top of main.py), this switch only cares about new topics not sustained heat, only sends notification when new content appears.
Fixed Issue: Under certain circumstances, some news containing special symbols caused occasional formatting exceptions.
WeWork and Telegram push messages have length limits, I adopted splitting messages for pushing. Development docs see WeWork and Telegram
Before this version, not only main.py needs copy replacement, crawler.yml also needs you to copy replacement https://github.com/sansan0/TrendRadar/blob/master/.github/workflows/crawler.yml
Thanks to Claude Research for organizing various platform APIs, helping me quickly complete platform adaptation (although code is more redundant~
200 stars⭐ reached, continue celebrating with everyone~
100 stars⭐ reached, writing small feature to celebrate
frequency_words.txt file added required word feature, using + sign
+Tang Monk +Pig
+Tang Monk !Tang Monk reciting sutras
📖 Reminder: Fork users should first check the latest official documentation to ensure the configuration steps are up to date.
Fork this project to your GitHub account
Setup GitHub Secrets (Choose your needed platforms):
In your forked repo, go to Settings > Secrets and variables > Actions > New repository secret
📌 Important Instructions (Please Read Carefully):
WEWORK_WEBHOOK_URL, FEISHU_WEBHOOK_URL, etc.). Do not modify or create new names arbitrarily, or the system will not recognize themConfiguration Example:
As shown above, each row is a configuration item:
WEWORK_WEBHOOK_URL)GitHub Secret Configuration (⚠️ Name must match exactly):
WEWORK_WEBHOOK_URL (Please copy and paste this name, do not type manually to avoid typos)Bot Setup Steps:
This solution is based on WeWork's plugin mechanism. The push style is plain text (no markdown format), but it can push directly to personal WeChat without installing WeWork App.
GitHub Secret Configuration (⚠️ Name must match exactly):
Name: WEWORK_WEBHOOK_URL (Please copy and paste this name, do not type manually)
Secret (Value): Your WeWork app Webhook address
Name: WEWORK_MSG_TYPE (Please copy and paste this name, do not type manually)
Secret (Value): text
Setup Steps:
WEWORK_MSG_TYPE Secret with value text
Notes:
text for plain text, markdown for rich text (default)GitHub Secret Configuration (⚠️ Name must match exactly):
FEISHU_WEBHOOK_URL (Please copy and paste this name, do not type manually)Two methods available, Method 1 is simpler, Method 2 is more complex (but stable push)
Method 1 discovered and suggested by ziventian, thanks to them. Default is personal push, group push can be configured via #97
Method 1:
For some users, additional operations needed to avoid "System Error". Need to search for the bot on mobile and enable Feishu bot application (suggestion from community, can refer)
Open in PC browser https://botbuilder.feishu.cn/home/my-command
Click "New Bot Command"
Click "Select Trigger", scroll down, click "Webhook Trigger"
Now you'll see "Webhook Address", copy this link to local notepad temporarily, continue with next steps
In "Parameters" put the following content, then click "Done"
{
"message_type": "text",
"content": {
"total_titles": "{{Content}}",
"timestamp": "{{Content}}",
"report_type": "{{Content}}",
"text": "{{Content}}"
}
}
Click "Select Action" > "Send via Official Bot"
Message title fill "TrendRadar Trending Monitor"
Most critical part, click + button, select "Webhook Trigger", then arrange as shown in image

FEISHU_WEBHOOK_URLMethod 2:
Open in PC browser https://botbuilder.feishu.cn/home/my-app
Click "New Bot Application"
After entering the created application, click "Process Design" > "Create Process" > "Select Trigger"
Scroll down, click "Webhook Trigger"
Now you'll see "Webhook Address", copy this link to local notepad temporarily, continue with next steps
In "Parameters" put the following content, then click "Done"
{
"message_type": "text",
"content": {
"total_titles": "{{Content}}",
"timestamp": "{{Content}}",
"report_type": "{{Content}}",
"text": "{{Content}}"
}
}
Click "Select Action" > "Send Feishu Message", check "Group Message", then click the input box below, click "Groups I Manage" (if no group, you can create one in Feishu app)
Message title fill "TrendRadar Trending Monitor"
Most critical part, click + button, select "Webhook Trigger", then arrange as shown in image

FEISHU_WEBHOOK_URLGitHub Secret Configuration (⚠️ Name must match exactly):
DINGTALK_WEBHOOK_URL (Please copy and paste this name, do not type manually)Bot Setup Steps:
Create Bot (PC Only):
Configure Bot:
Complete Setup:
DINGTALK_WEBHOOK_URLNote: Mobile can only receive messages, cannot create new bots.
GitHub Secret Configuration (⚠️ Name must match exactly):
Name: TELEGRAM_BOT_TOKEN (Please copy and paste this name, do not type manually)
Secret (Value): Your Telegram Bot Token
Name: TELEGRAM_CHAT_ID (Please copy and paste this name, do not type manually)
Secret (Value): Your Telegram Chat ID
Note: Telegram requires two Secrets, please click "New repository secret" button twice to add them separately
Bot Setup Steps:
Create Bot:
@BotFather in Telegram (note case, has blue verification checkmark, shows ~37849827 monthly users, this is official, beware of fake accounts)/newbot command to create new bot123456789:AAHfiqksKZ8WmR2zSjiQ7_v4TMAKdiHm9T0)Get Chat ID:
Method 1: Via Official API
https://api.telegram.org/bot<Your Bot Token>/getUpdates"chat":{"id":number} in returned JSONMethod 2: Using Third-Party Tool
@userinfobot and send /startConfigure to GitHub:
TELEGRAM_BOT_TOKEN: Fill in Bot Token from step 1TELEGRAM_CHAT_ID: Fill in Chat ID from step 2GitHub Secret Configuration (⚠️ Name must match exactly):
Name: EMAIL_FROM (Please copy and paste this name, do not type manually)
Secret (Value): Sender email address
Name: EMAIL_PASSWORD (Please copy and paste this name, do not type manually)
Secret (Value): Email password or authorization code
Name: EMAIL_TO (Please copy and paste this name, do not type manually)
Secret (Value): Recipient email address (multiple separated by comma, or can be same as EMAIL_FROM to send to yourself)
Name: EMAIL_SMTP_SERVER (Optional, please copy and paste this name)
Secret (Value): SMTP server address (leave empty for auto-detection)
Name: EMAIL_SMTP_PORT (Optional, please copy and paste this name)
Secret (Value): SMTP port (leave empty for auto-detection)
Note: Email push requires at least 3 required Secrets (EMAIL_FROM, EMAIL_PASSWORD, EMAIL_TO), the last two are optional
Supported Email Providers (Auto-detect SMTP config):
| Provider | Domain | SMTP Server | Port | Encryption |
|---|---|---|---|---|
| Gmail | gmail.com | smtp.gmail.com | 587 | TLS |
| QQ Mail | qq.com | smtp.qq.com | 465 | SSL |
| Outlook | outlook.com | smtp-mail.outlook.com | 587 | TLS |
| Hotmail | hotmail.com | smtp-mail.outlook.com | 587 | TLS |
| Live | live.com | smtp-mail.outlook.com | 587 | TLS |
| 163 Mail | 163.com | smtp.163.com | 465 | SSL |
| 126 Mail | 126.com | smtp.126.com | 465 | SSL |
| Sina Mail | sina.com | smtp.sina.com | 465 | SSL |
| Sohu Mail | sohu.com | smtp.sohu.com | 465 | SSL |
| 189 Mail | 189.cn | smtp.189.cn | 465 | SSL |
| Aliyun Mail | aliyun.com | smtp.aliyun.com | 465 | TLS |
Auto-detect: When using above emails, no need to manually configure
EMAIL_SMTP_SERVERandEMAIL_SMTP_PORT, system auto-detects.Feedback Notice:
- If you successfully test with other email providers, please open an Issue to let us know, we'll add to support list
- If above email configurations are incorrect or unusable, please also open an Issue for feedback to help improve the project
Special Thanks:
- Thanks to @DYZYD for contributing 189 Mail (189.cn) configuration and completing self-send-receive testing (#291)
- Thanks to @longzhenren for contributing Aliyun Mail (aliyun.com) configuration and completing testing (#344)
Common Email Settings:
EMAIL_PASSWORD fill authorization code, not QQ passwordEMAIL_PASSWORD fill app-specific passwordEMAIL_PASSWORD fill authorization code
Advanced Configuration: If auto-detect fails, manually configure SMTP:
EMAIL_SMTP_SERVER: Like smtp.gmail.comEMAIL_SMTP_PORT: Like 587 (TLS) or 465 (SSL)
Multiple Recipients (note: English comma separator):
Two Usage Methods:
Features:
Quick Start:
Download ntfy App:
Subscribe to Topic (choose a hard-to-guess name):
Suggested format: trendradar-{your initials}-{random numbers} Cannot use Chinese ✅ Good example: trendradar-zs-8492 ❌ Bad example: news, alerts (too easy to guess)
Configure GitHub Secret (⚠️ Name must match exactly):
Name: NTFY_TOPIC (Please copy and paste this name, do not type manually)
Secret (Value): Fill in your subscribed topic name
Name: NTFY_SERVER_URL (Optional, please copy and paste this name)
Secret (Value): Leave empty (default uses ntfy.sh)
Name: NTFY_TOKEN (Optional, please copy and paste this name)
Secret (Value): Leave empty
Note: ntfy requires at least 1 required Secret (NTFY_TOPIC), the last two are optional
Test:
curl -d "Test message" ntfy.sh/your-topic-name
Target Users: Have server, pursue complete privacy, strong technical ability
Advantages:
Docker One-Click Deploy:
docker run -d \ --name ntfy \ -p 80:80 \ -v /var/cache/ntfy:/var/cache/ntfy \ binwiederhier/ntfy \ serve --cache-file /var/cache/ntfy/cache.db
Configure TrendRadar:
NTFY_SERVER_URL: https://ntfy.yourdomain.com
NTFY_TOPIC: trendradar-alerts # Self-hosting can use simple name
NTFY_TOKEN: tk_your_token # Optional: Enable access control
Subscribe in App:
FAQ:
250 messages/day is enough for most users. With 30-minute crawl intervals, about 48 pushes/day, completely sufficient.
If you choose a random, sufficiently long name (like trendradar-zs-8492-news), brute force is nearly impossible:
Recommended Choice:
| User Type | Recommended | Reason |
|---|---|---|
| Regular Users | Method 1 (Free) | Simple, fast, enough |
| Technical Users | Method 2 (Self-Host) | Complete control, unlimited |
| High-Frequency Users | Method 3 (Paid) | Check official website |
Related Links:
GitHub Secret Configuration (⚠️ Name must be exact):
BARK_URL (copy and paste this name, don't type manually)Bark Introduction:
Bark is a free open-source push tool for iOS platform, featuring simplicity, speed, and no ads.
Usage Methods:
Download Bark App:
Get Push URL:
https://api.day.app/your_device_key)BARK_URLSuitable for: Users with servers, pursuing complete privacy, strong technical skills
Docker One-Click Deployment:
docker run -d \ --name bark-server \ -p 8080:8080 \ finab/bark-server
Configure TrendRadar:
BARK_URL: http://your-server-ip:8080/your_device_key
Notes:
Related Links:
GitHub Secret Configuration (⚠️ Name must be exact):
SLACK_WEBHOOK_URL (copy and paste this name, don't type manually)Slack Introduction:
Slack is a team collaboration tool, Incoming Webhooks can push messages to Slack channels.
Setup Steps:
Visit Slack API Page:
Choose Creation Method:
Fill in App Information:
TrendRadar or Hot News Monitor)Navigate to Incoming Webhooks:
Enable Feature:
OFF to ONAdd New Webhook:
Select Target Channel:
#hot-news)Authorize App:
View Generated URL:
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXXCopy URL:
Configure to TrendRadar:
SLACK_WEBHOOK_URLconfig/config.yaml slack_webhook_url fielddocker/.env file as SLACK_WEBHOOK_URL variableNotes:
Message Format Preview:
*[Batch 1/2]* 📊 *Trending Topics Statistics* 🔥 *[1/3] AI ChatGPT* : 2 articles 1. [Baidu Hot] 🆕 ChatGPT-5 Official Release *[1]* - 09:15 (1 time) 2. [Toutiao] AI Chip Stocks Surge *[3]* - [08:30 ~ 10:45] (3 times)
Related Links:
💡 Beginner Quick Start Tip:
For first deployment, suggest completing GitHub Secrets configuration first (choose one push platform), then jump to [Step 3] to test push success.
Don't modify
config/config.yamlandfrequency_words.txttemporarily, adjust these configs after push test succeeds as needed.
Manual Test News Push:
💡 Complete Step 1-2 first, then test immediately! Test success first, then adjust configuration (Step 4) as needed.
⚠️ IMPORTANT: Enter your own forked project, not this project!
How to find your Actions page:
https://github.com/YourUsername/TrendRadar/actionsExample comparison:
https://github.com/sansan0/TrendRadar/actionshttps://github.com/YourUsername/TrendRadar/actionsTesting steps:
Configuration Notes (Optional):
💡 Default configuration works normally, only adjust if you need personalization
Note: Suggest only adjusting explicitly documented config items, other options mainly for author's development testing
🎉 Deployment Success! Share Your Experience
Congratulations on completing TrendRadar configuration! You can now start tracking trending news.
💬 Join our community to share your experience~
👉 Follow our WeChat Official Account「硅基茶水间」(Silicon Tea Room), your likes and comments are the driving force for continuous updates!
For detailed communication methods, please check → FAQ & Support
🤖 Want Smarter Analysis? Try AI-Enhanced Features (Optional)
Basic configuration already meets daily needs, but if you want:
👉 Learn More: AI Analysis — Unlock hidden capabilities and make trend tracking more efficient!
📖 Reminder: This chapter provides detailed configuration explanations. Suggest completing Quick Start basic configuration first, then refer to detailed options here as needed.
This project's news data comes from newsnow. You can click the website, click [More], to see if there are platforms you want.
For specific additions, visit project source code, based on the file names there, modify the platforms configuration in config/config.yaml file:
platforms:
- id: "toutiao"
name: "Toutiao"
- id: "baidu"
name: "Baidu Hot Search"
- id: "wallstreetcn-hot"
name: "Wallstreetcn"
# Add more platforms...
If you don't know how to look, you can directly copy the partially organized Platform Configuration
Configure monitoring keywords in frequency_words.txt with four syntax types and grouping features.
| Syntax Type | Symbol | Purpose | Example | Matching Logic |
|---|---|---|---|---|
| Normal | None | Basic matching | Huawei | Match any one |
| Required | + | Scope limiting | +phone | Must include both |
| Filter | ! | Noise exclusion | !ad | Exclude if included |
| Count Limit | @ | Control display count | @10 | Max 10 news (v3.2.0 new) |
Huawei OPPO Apple
Effect: News containing any one of these words will be captured
Huawei OPPO +phone
Effect: Must include both normal word and required word to be captured
Apple Huawei !fruit !price
Effect: News containing filter words will be excluded, even if it contains keywords
Tesla Musk @5
Effect: Limit maximum news count for this keyword group
Priority: @number > Global config > Unlimited
Core Rule: Use empty lines to separate different groups, each group is independently counted
iPhone Huawei OPPO +launch A-shares Shanghai Index Shenzhen Index +fluctuation !prediction World Cup Euro Cup Asian Cup +match
Group 1 - Phone Launches:
Matching Examples:
Group 2 - Stock Market:
Matching Examples:
Group 3 - Football Events:
Matching Examples:
# Step 1: Start with broad keywords for testing Artificial Intelligence AI ChatGPT # Step 2: After finding mismatches, add required words Artificial Intelligence AI ChatGPT +technology # Step 3: After finding noise, add filter words Artificial Intelligence AI ChatGPT +technology !advertisement !training
❌ Not Recommended: Too many words in one group
Huawei OPPO Apple Samsung vivo OnePlus Meizu +phone +launch +sales !fake !repair !second-hand
Recommended: Split into precise groups
Huawei OPPO +new product Apple Samsung +launch phone sales +market
Config Location: config/config.yaml
report:
sort_by_position_first: false # Sorting priority config
| Value | Sorting Rule | Use Case |
|---|---|---|
false (default) | News count ↓ → Config position ↑ | Focus on popularity trends |
true | Config position ↑ → News count ↓ | Focus on personal priority |
Example: Config order A, B, C, news count A(3), B(10), C(5)
false: B(10) → C(5) → A(3)true: A(3) → B(10) → C(5)report:
max_news_per_keyword: 10 # Max 10 per keyword (0=unlimited)
Docker Environment Variables:
SORT_BY_POSITION_FIRST=true
MAX_NEWS_PER_KEYWORD=10
Combined Example:
# config.yaml
report:
sort_by_position_first: true # Config order priority
max_news_per_keyword: 10 # Global default max 10 per keyword
# frequency_words.txt Tesla Musk @20 # Key focus, show 20 (override global) Huawei # Use global config, show 10 BYD @5 # Limit to 5
Final Effect: Display in config order: Tesla(20) → Huawei(10) → BYD(5)
| Mode | Target Users | Push Timing | Display Content | Typical Use Case |
|---|---|---|---|---|
Daily Summarydaily | 📋 Managers/Regular Users | Scheduled push (default hourly) | All matched news of the day + New news section | Example: Check all important news of the day at 6 PM Feature: See full-day trend, don't miss any hot topic Note: Will include previously pushed news |
Current Rankingscurrent | 📰 Content Creators | Scheduled push (default hourly) | Current ranking matches + New news section | Example: Track "which topics are hottest now" hourly Feature: Real-time understanding of current popularity ranking changes Note: Continuously ranked news appear each time |
Incremental Monitorincremental | 📈 Traders/Investors | Push only when new | Newly appeared frequency word matches | Example: Monitor "Tesla", only notify when new news appears Feature: Zero duplication, only see first-time news Suitable for: High-frequency monitoring, avoid information disturbance |
Assume you monitor "Apple" keyword, execute once per hour:
| Time | daily Mode Push | current Mode Push | incremental Mode Push |
|---|---|---|---|
| 10:00 | News A, News B | News A, News B | News A, News B |
| 11:00 | News A, News B, News C | News B, News C, News D | Only News C |
| 12:00 | News A, News B, News C | News C, News D, News E | Only News D, News E |
Explanation:
daily: Cumulative display of all news of the day (A, B, C all retained)current: Display current ranking news (ranking changed, News D on list, News A off list)incremental: Only push newly appeared news (avoid duplicate disturbance)💡 Encountered this problem? 👉 "Execute once per hour, news output in first execution still appears in next hour execution"
- Reason: You might have selected
daily(Daily Summary) orcurrent(Current Rankings) mode- Solution: Change to
incremental(Incremental Monitor) mode, only push new content
Users who selected
incremental(Incremental Monitor) mode, please note:📌 Incremental mode only pushes when there are new matching news
If you haven't received push notifications for a long time, it may be because:
- No new hot topics matching your keywords in current time period
- Keyword configuration is too strict or too broad
- Too few monitoring platforms
Solutions:
- Solution 1: 👉 Optimize Keyword Configuration - Adjust keyword precision, add or modify monitoring keywords
- Solution 2: Switch push mode - Change to
currentordailymode for scheduled push notifications- Solution 3: 👉 Add More Platforms - Add more news platforms to expand information sources
Current default configuration is balanced.
Real-Time Trending Type:
weight:
rank_weight: 0.8 # Mainly focus on ranking
frequency_weight: 0.1 # Less concern about continuity
hotness_weight: 0.1
Target Users: Content creators, marketers, users wanting to quickly understand current hot topics
In-Depth Topic Type:
weight:
rank_weight: 0.4 # Moderate ranking focus
frequency_weight: 0.5 # Emphasize sustained heat within the day
hotness_weight: 0.1
Target Users: Investors, researchers, journalists, users needing deep trend analysis
Core idea: Users pursuing speed and timeliness increase ranking weight, users pursuing depth and stability increase frequency weight.
📊 Trending Keywords Stats
🔥 [1/3] AI ChatGPT : 2 items
[Baidu Hot] 🆕 ChatGPT-5 officially launched [1] - 09:15 (1 time)
[Toutiao] AI chip concept stocks surge [3] - [08:30 ~ 10:45] (3 times)
━━━━━━━━━━━━━━━━━━━
📈 [2/3] BYD Tesla : 2 items
[Weibo] 🆕 BYD monthly sales break record [2] - 10:20 (1 time)
[Douyin] Tesla price reduction promotion [4] - [07:45 ~ 09:15] (2 times)
━━━━━━━━━━━━━━━━━━━
📌 [3/3] A-shares Stock Market : 1 item
🆕 New Trending News (Total 2 items)
Baidu Hot (1 item):
Weibo (1 item):
Updated: 2025-01-15 12:30:15
| Format Element | Example | Meaning | Description |
|---|---|---|---|
| 🔥📈📌 | 🔥 [1/3] AI ChatGPT | Popularity Level | 🔥 High (≥10) 📈 Medium (5-9) 📌 Normal (<5) |
| [Number/Total] | [1/3] | Rank Position | Current group rank among all matches |
| Keyword Group | AI ChatGPT | Keyword Group | Group from config, title must contain words |
| : N items | : 2 items | Match Count | Total news matching this group |
| [Platform] | [Baidu Hot] | Source Platform | Platform name of the news |
| 🆕 | 🆕 ChatGPT-5 officially launched | New Mark | First appearance in this round |
| [number] | [1] | High Rank | Rank ≤ threshold, bold red display |
| [number] | [7] | Normal Rank | Rank > threshold, normal display |
| - time | - 09:15 | First Time | Time when news was first discovered |
| [time~time] | [08:30 ~ 10:45] | Duration | Time range from first to last appearance |
| (N times) | (3 times) | Frequency | Total appearances during monitoring |
| New Section | 🆕 New Trending News | New Topic Summary | Separately shows newly appeared topics |
Linux/macOS System:
# Create config directory and download config files
mkdir -p config output
wget https://raw.githubusercontent.com/sansan0/TrendRadar/master/config/config.yaml -P config/
wget https://raw.githubusercontent.com/sansan0/TrendRadar/master/config/frequency_words.txt -P config/
Or Manual Creation:
config folder in current directoryconfig\config.yamlconfig\frequency_words.txtFinal directory structure should be:
current directory/ └── config/ ├── config.yaml └── frequency_words.txt
docker run -d --name trend-radar \
-v ./config:/app/config:ro \
-v ./output:/app/output \
-e FEISHU_WEBHOOK_URL="your feishu webhook" \
-e DINGTALK_WEBHOOK_URL="your dingtalk webhook" \
-e WEWORK_WEBHOOK_URL="your wework webhook" \
-e TELEGRAM_BOT_TOKEN="your telegram_bot_token" \
-e TELEGRAM_CHAT_ID="your telegram_chat_id" \
-e EMAIL_FROM="your sender email" \
-e EMAIL_PASSWORD="your email password or auth code" \
-e EMAIL_TO="recipient email" \
-e CRON_SCHEDULE="*/30 * * * *" \
-e RUN_MODE="cron" \
-e IMMEDIATE_RUN="true" \
wantcat/trendradar:latest
# Create directory structure
mkdir -p trendradar/{config,docker}
cd trendradar
# Download config file templates
wget https://raw.githubusercontent.com/sansan0/TrendRadar/master/config/config.yaml -P config/
wget https://raw.githubusercontent.com/sansan0/TrendRadar/master/config/frequency_words.txt -P config/
# Download docker-compose config
wget https://raw.githubusercontent.com/sansan0/TrendRadar/master/docker/.env
wget https://raw.githubusercontent.com/sansan0/TrendRadar/master/docker/docker-compose.yml
Final directory structure should be:
current directory/ ├── config/ │ ├── config.yaml │ └── frequency_words.txt └── docker/ ├── .env └── docker-compose.yml
Config File Description:
config/config.yaml - Application main config (report mode, push settings, etc.)config/frequency_words.txt - Keyword config (set your interested trending keywords).env - Environment variable config (webhook URLs and scheduled tasks)⚙️ Environment Variable Override Mechanism (v3.0.5+)
If you encounter config.yaml modifications not taking effect in NAS or other Docker environments, you can directly override configs via environment variables:
| Environment Variable | Corresponding Config | Example Value | Description |
|---|---|---|---|
ENABLE_CRAWLER | crawler.enable_crawler | true / false | Enable crawler |
ENABLE_NOTIFICATION | notification.enable_notification | true / false | Enable notification |
REPORT_MODE | report.mode | daily / incremental / current | Report mode |
PUSH_WINDOW_ENABLED | notification.push_window.enabled | true / false | Push time window switch |
PUSH_WINDOW_START | notification.push_window.time_range.start | 08:00 | Push start time |
PUSH_WINDOW_END | notification.push_window.time_range.end | 22:00 | Push end time |
FEISHU_WEBHOOK_URL | notification.webhooks.feishu_url | https://... | Feishu Webhook |
Config Priority: Environment Variables > config.yaml
Usage Method:
.env file, uncomment and fill in needed configsdocker-compose up -dStart Service:
# Pull latest image and start
docker-compose pull
docker-compose up -d
Check Running Status:
# View logs
docker logs -f trend-radar
# View container status
docker ps | grep trend-radar
If you need custom code modifications or build your own image:
# Clone project
git clone https://github.com/sansan0/TrendRadar.git
cd TrendRadar
# Modify config files
vim config/config.yaml
vim config/frequency_words.txt
# Use build version docker-compose
cd docker
cp docker-compose-build.yml docker-compose.yml
# Build and start
docker-compose build
docker-compose up -d
# Method 1: Manual update
docker pull wantcat/trendradar:latest
docker-compose down
docker-compose up -d
# Method 2: Using docker-compose update
docker-compose pull
docker-compose up -d
# View running status
docker exec -it trend-radar python manage.py status
# Manually execute crawler once
docker exec -it trend-radar python manage.py run
# View real-time logs
docker exec -it trend-radar python manage.py logs
# Display current config
docker exec -it trend-radar python manage.py config
# Display output files
docker exec -it trend-radar python manage.py files
# View help info
docker exec -it trend-radar python manage.py help
# Restart container
docker restart trend-radar
# Stop container
docker stop trend-radar
# Remove container (keep data)
docker rm trend-radar
Generated reports and data are saved in ./output directory by default. Data persists even if container is restarted or removed.
# Check container status
docker inspect trend-radar
# View container logs
docker logs --tail 100 trend-radar
# Enter container for debugging
docker exec -it trend-radar /bin/bash
# Verify config files
docker exec -it trend-radar ls -la /app/config/
TrendRadar v3.0.0 added MCP (Model Context Protocol) based AI analysis feature, allowing natural language conversations with news data for deep analysis.
Critical: AI features require local news data support
AI analysis does not query real-time online data directly, but analyzes locally accumulated news data (stored in the output folder)
Built-in Test Data: The output directory includes news data from November 1-15, 2025 by default for quick feature testing
Query Limitations:
Getting Latest Data:
Cherry Studio provides GUI config interface, 5-minute quick deployment, complex parts are one-click install.
Illustrated Deployment Tutorial: Now updated to my WeChat Official Account (see FAQ & Support), reply "mcp" to get
Detailed Deployment Tutorial: README-Cherry-Studio.md
Deployment Mode Description:
Detailed Conversation Tutorial: README-MCP-FAQ.md
Question Effect:
💡 Tip: Actually not recommended to ask multiple questions at once. If your chosen AI model cannot even sequentially call as shown below, suggest switching models.
TrendRadar MCP service supports standard Model Context Protocol (MCP), can connect to various AI clients supporting MCP for smart analysis.
Note:
/path/to/TrendRadar with your actual project pathC:\\Users\\YourName\\TrendRadarEdit Claude Desktop's MCP config file:
Windows:
%APPDATA%\Claude\claude_desktop_config.json
Mac:
~/Library/Application Support/Claude/claude_desktop_config.json
Config Content:
{
"mcpServers": {
"trendradar": {
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
],
"env": {},
"disabled": false,
"alwaysAllow": []
}
}
}
Start HTTP Service:
# Windows
start-http.bat
# Mac/Linux
./start-http.sh
Configure Cursor:
Project Level Config (Recommended):
Create .cursor/mcp.json in project root:
{
"mcpServers": {
"trendradar": {
"url": "http://localhost:3333/mcp",
"description": "TrendRadar News Trending Aggregation Analysis"
}
}
}
Global Config:
Create ~/.cursor/mcp.json in user directory (same content)
Usage Steps:
Search today's "AI" related newsCreate .cursor/mcp.json:
{
"mcpServers": {
"trendradar": {
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
]
}
}
}
Add in Cline's MCP settings:
HTTP Mode:
{
"trendradar": {
"url": "http://localhost:3333/mcp",
"type": "streamableHttp",
"autoApprove": [],
"disabled": false
}
}
STDIO Mode (Recommended):
{
"trendradar": {
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
],
"type": "stdio",
"disabled": false
}
}
Edit ~/.continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
]
}
}
]
}
}
Usage Examples:
Analyze recent 7 days "Tesla" popularity trend Generate today's trending summary report Search "Bitcoin" related news and analyze sentiment
# 1. Start HTTP service
# Windows: start-http.bat
# Mac/Linux: ./start-http.sh
# 2. Add MCP server
claude mcp add --transport http trendradar http://localhost:3333/mcp
# 3. Verify connection (ensure service started)
claude mcp list
# Query news
claude "Search today's Zhihu trending news, top 10"
# Trend analysis
claude "Analyze 'artificial intelligence' topic popularity trend for the past week"
# Data comparison
claude "Compare Zhihu and Weibo platform attention on 'Bitcoin'"
MCP Inspector is the official debug tool for testing MCP connections:
Start TrendRadar HTTP Service:
# Windows
start-http.bat
# Mac/Linux
./start-http.sh
Start MCP Inspector:
npx @modelcontextprotocol/inspector
Connect in Browser:
http://localhost:3333/mcpAny client supporting Model Context Protocol can connect to TrendRadar:
Service Address: http://localhost:3333/mcp
Basic Config Template:
{
"name": "trendradar",
"url": "http://localhost:3333/mcp",
"type": "http",
"description": "News Trending Aggregation Analysis"
}
Basic Config Template:
{
"name": "trendradar",
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
],
"type": "stdio"
}
Notes:
/path/to/TrendRadar with actual project pathC:\\Users\\...If you want to support this project, you can search Tencent Charity on WeChat and donate to Education Support Programs as you wish
Thanks to those who participated in the one-yuan donation! You are listed in the Acknowledgments at the top. Your support gives more motivation to open source maintenance. Personal donation QR code has been removed.
| WeChat Official Account |
|---|
![]() |
302.AI is a pay-as-you-go enterprise-level AI resource platform Providing the latest and most comprehensive AI models and APIs on the market, plus various ready-to-use online AI applications
Tip: Cherry Studio has natively integrated 302.AI, you can see the complete model list after configuration.
Q: How long does $1 free credit last? A: Depends on usage frequency and model selection, can run multiple test sessions.
Q: What after free credit runs out? A: You can top up as needed, pay-as-you-go. Major AI model prices are now relatively affordable.
Tracking so many trending topics daily, writing reports, replying messages making your wrists tired?
Try「FlashSpeak」AI Voice Input - Speak instead of type, 4x faster ⚡
On-device Model • Lightning Fast • Absolute Privacy • Mac/Win Support
From reading trends to content output, double your efficiency 👇
Check Steps:
Confirm port 3333 is not occupied:
# Windows
netstat -ano | findstr :3333
# Mac/Linux
lsof -i :3333
Check if project dependencies installed:
# Re-run install script
# Windows: setup-windows.bat or setup-windows-en.bat
# Mac/Linux: ./setup-mac.sh
View detailed error logs:
uv run python -m mcp_server.server --transport http --port 3333
Try custom port:
uv run python -m mcp_server.server --transport http --port 33333
Solutions:
STDIO Mode:
which uv or where uv)HTTP Mode:
http://localhost:3333/mcp)General Checks:
Possible Reasons:
Data Does Not Exist:
Parameter Error:
YYYY-MM-DDzhihu, weibo, etc.Config Issues:
config/config.yaml existsconfig/frequency_words.txt exists4 Related Articles (Chinese):
AI Development:
📍 Chairman Mao's Footprint Map - Interactive dynamic display of complete trajectory 1893-1976. Welcome comrades to contribute data
Bilibili Comment Data Visualization Analysis Software
GPL-3.0 License