TrendRadar MCP Server
🪩 Sponsors
But hmm, if the source text was "## Sponsors" it's Latin already; no translation needed. Fine.
Now "### Bot" section.
Let's continue:
微信赞赏 | 支付宝赞赏 |
🤝 Доработка и использование
Если вы используете или заимствуете идеи и основной код этого проекта в своём проекте, будем очень рады, если вы укажете источник и приложите ссылку на этот репозиторий в README или документации.
Это поможет дальнейшему развитию проекта и сообщества. Спасибо за уважение и поддержку! ❤️
💬 Общение и обратная связь
GitHub Issues: подходит для конкретных технических вопросов. При обращении, пожалуйста, предоставьте полную информацию (скриншоты, журналы ошибок и т.д.) — это поможет быстрее найти решение.
Общение через публичный аккаунт: рекомендуется оставлять комментарии в соответствующих статьях. Если нужно задать вопрос через личные сообщения, лучший «ключ» — сначала поставить лайк/рекомендовать статью. Я чувствую эту благодарность в личных сообщениях (´▽`ʃ♡ƪ).
Общение в QQ-группе: подпишитесь на публичный аккаунт и ответьте «交流群», чтобы присоединиться. Независимо от того, новичок вы в ИИ или опытный разработчик, хотите ли вы задать технический вопрос или поделиться опытом — здесь вам рады. В группе приветствуется взаимопомощь и обмен идеями. При вступлении сначала прочитайте объявление группы; при вопросах описывайте проблему чётко и прикладывайте скриншоты. Участники помогут, когда у них будет время — их практический опыт часто быстрее и полнее, чем мой 🤝
Дружеский совет: Этот проект — открытый и бесплатный, а не коммерческий продукт. Относитесь к автору как к другу, а не как к службе поддержки — так общение будет эффективнее!
关注公众号 |
Related MCP server: TrendRadar
📝 Журнал обновлений
📌 Последние обновления: Журнал обновлений оригинального репозитория :
Примечание: рекомендуется просматривать 【Историю обновлений】, чтобы уточнить конкретные 【функциональные возможности】
2026/06/19 - v6.10.0
Пакетная обработка AI-перевода: при переводе большого количества заголовков запросы автоматически разбиваются на пакеты, чтобы избежать сбоев перевода из-за превышения лимита одного запроса
Рефакторинг модулей: разделены context.py и __main__.py, конвейер AI-фильтрации выделен в отдельный модуль filter_pipeline — обязанности стали яснее, обслуживание проще
Исправлено отображение меток источника в Feishu: исправлена проблема, когда метки источника и краткий обзор независимых источников AI в карточках Feishu не отображались из-за CommonMark
2026/02/09 - mcp-v4.0.0
🔥 Прямая отправка AI-сообщений во все каналы: готовый контент от AI одним нажатием отправляется в 9 каналов — Feishu, DingTalk, Telegram, email и другие. Markdown автоматически адаптируется под формат каждой платформы, не нужно беспокоиться о различиях в форматировании
Новое руководство по стратегии форматирования: добавлен инструмент
get_channel_format_guide, который сообщает AI, какие форматы поддерживает каждый канал и какие есть ограничения — сгенерированный контент выглядит лучшеУмная пакетная отправка: сверхдлинные сообщения автоматически разбиваются по байтовым лимитам каждого канала (Feishu 30KB, DingTalk 20KB и т.д.), конфигурация читается из config.yaml
Исправлено ошибочное определение каналов: ntfy больше не ошибочно определяется как «настроенный» из-за адреса по умолчанию
Оптимизация повторного использования кода: функции пакетной обработки напрямую используют основные модули trendradar, без дублирования
2026/06/02 - v6.9.0
Проверка безопасности доменов в топ-списках: добавлен параметр конфигурации
expected_domain, проверяющий легальность доменов в возвращаемых данных. При несоответствии данные автоматически отбрасываются с предупреждением — эффективная защита от перехвата ссылок или подмены данныхПользовательский API-адрес для горячих списков: поддержка самостоятельного развёртывания newsnow и настройки
api_urlдля использования собственного источника данных
2026/05/23 - v6.8.0
Полное улучшение HTML-отчётов: добавлено отображение метаданных отчёта (время генерации, источник данных, номер версии), автоматическая адаптация тёмного режима, улучшенное взаимодействие с вкладками, визуализация стрелок тренда — читать в браузере стало значительно удобнее
Многоисточниковый откат проверки версий: интерфейс проверки версий поддерживает автоматический откат между несколькими CDN-источниками (GitHub → jsDelivr → Cloudflare и др.), что обеспечивает стабильное получение уведомлений об обновлениях даже в сетях с ограниченным доступом
Переключатели областей отображения работают: HTML-отчёты и письма теперь корректно учитывают переключатели
display.regions.ai_analysisиdisplay.regions.standalone— при выключении они не отображаютсяИсправлена кнопка экспорта: исправлена проблема с исчезновением иконки выпадающего меню после нажатия кнопки экспорта
Исправлен экспорт в Markdown: исправлена ошибка экранирования переносов строк JS при экспорте HTML-отчёта в Markdown
2026/05/15 - v6.7.0
Экспорт в Markdown: в выпадающем меню экспорта отчёта добавлен формат Markdown — одним нажатием генерируется структурированный текст со ссылками, удобный для дальнейшей обработки LLM и обмена на разных платформах (#1121)
Дедупликация по RSS guid: в хранилище RSS добавлено поле guid, приоритет дедупликации изменён на guid > url — решена проблема повторного добавления одной и той же статьи из-за изменения URL
Защита от пустых заголовков: в парсере, слое рендеринга и обратном заполнении перевода добавлена логика резервного поведения для пустых заголовков, чтобы записи без заголовка также корректно отображались
Повышение качества перевода: в промпте для перевода требуется сохранять порядок нумерации, пустые результаты перевода больше не перезаписывают исходные заголовки
2026/03/28 - v6.6.0
Улучшение HTML-отчётов в браузере: при открытии отчёта в браузере автоматически переключается на широкоэкранный макет, группы ключевых слов и независимые секции поддерживают быстрое переключение вкладок, поле поиска фильтрует заголовки новостей в реальном времени. В почтовых клиентах по-прежнему отображается исходный узкий макет — без регрессий
Тёмный режим: переключение на тёмную тему одним нажатием, автоматическое запоминание предпочтений — удобно для чтения ночью
Копирование новостей одним нажатием: при наведении курсора на номер новости можно скопировать заголовок и ссылку — удобно для быстрого обмена
Оптимизация экспорта: экспорт полной страницы и экспорт фрагментов объединены в выпадающую кнопку экспорта, при создании скриншотов автоматически восстанавливается чистый макет
Система горячих клавиш: поддержка
W— переключение широкого экрана,D— тёмный режим,/— поиск,?— просмотр подсказок по горячим клавишамИндикатор прогресса чтения: вверху страницы в реальном времени отображается прогресс чтения
2026/03/12 - v6.5.0
Система интеллектуальной AI-фильтрации: больше не нужно вручную задавать ключевые слова! В файле
ai_interests.txtопишите свои интересы обычным языком (например, «хочу видеть новости об ИИ и возобновляемой энергетике»), и AI автоматически извлечёт теги и оценит каждую новость, отправляя только действительно релевантный контент. Если AI-фильтрация даст сбой, система автоматически переключится на сопоставление по ключевым словам — доставка не прервётсяРазные методы фильтрации и направления интересов для каждого временного интервала: каждый временной интервал в Timeline теперь может независимо настраивать метод фильтрации и тип просматриваемых новостей. Например: утром — быстрая фильтрация по «технологическим ключевым словам», вечером — глубокая фильтрация по «описанию интересов в области финансов и ИИ» — одна система, разные контенты в разное время
Область AI-анализа независима от доставки: диапазон данных для AI-анализа может отличаться от отправляемого контента. Например, отправка только новых сообщений (чтобы не беспокоить повторно), но AI анализирует все новости за день (для полной картины трендов). Каждый временный интервал также может иметь свой режим AI-анализа
Экономия токенов при AI-фильтрации: уже проанализированные новости не расходуют токены повторно; при изменении описания интересов AI автоматически оценивает масштаб изменений — небольшие правки обновляют только затронутые теги, большие изменения переклассифицируют всё заново
Многофайловая конфигурация и изоляция тегов: файлы пользовательских ключевых слов размещаются в
config/custom/keyword/, файлы AI-интересов — вconfig/custom/ai/. Теги из разных файлов независимы и не влияют друг на другаТочное управление AI-переводом: можно отдельно управлять переводом горячих списков, RSS и независимых областей отображения; области, которые не отображаются, автоматически пропускаются — токены не тратятся
Пакетная загрузка в удалённое хранилище: несколько операций записи накапливаются и отправляются в облако одним пакетом — уменьшение количества вызовов API
Ограничение количества отображаемых элементов для каждой группы ключевых слов/тегов: параметр
max_news_per_keywordконтролирует максимальное количество новостей в каждой группе, чтобы одна популярная тема не заполняла всю доставкуУмное обнаружение конфликтов временных интервалов: если два временных интервала пересекаются, система автоматически сообщает об ошибке и просит изменить конфигурацию — предотвращает непредвиденное поведение из-за конфликтов
Исправлены некоторые ошибки
2026/02/09 - v6.0.0
Breaking Change: обновление файла конфигурации (config.yaml 2.0.0), старые параметры
push_windowиanalysis_windowбольше не поддерживаются. Пожалуйста, перенесите конфигурацию по образцу нового config.yaml
Единая система планирования: добавлен
timeline.yaml, который одним набором конфигураций управляет «когда собирать / отправлять / анализировать с помощью AI»5 предустановленных шаблонов:
always_on(круглосуточно, по умолчанию),morning_evening(утро/вечер),office_hours(рабочее время),night_owl(ночная сова),custom(пользовательский); также можно добавлять свои шаблоны в разделеpresets:, если ключ не повторяется, а затем указать имя шаблона в config.yamlГибкая настройка временных интервалов: поддержка различий между рабочими днями и выходными, интервалов через полночь, дедупликации once для каждого периода
Визуальный редактор конфигурации:
Добавлена вкладка редактирования
timeline.yaml, рядом с config.yaml / frequency_words.txtВыбор карточек предустановленных режимов: клик — переключение, автоматическая синхронизация с
schedule.presetв config.yamlНедельная временная шкала: горизонтальные полосы 7 дней × 24 часа, цветом различаются статусы отправки/анализа/сбора
Интерактивные элементы управления: переключатели, выпадающие списки, выбор времени — изменения справа синхронизируются с YAML слева в реальном времени
Выпадающий выбор недельного сопоставления: динамическое заполнение на основе дневного плана, перетаскивание и клик для настройки расписания
Оптимизация стабильности AI-промптов (ai_analysis_prompt.txt v2.0.0):
Отдельное описание правил форматирования: переносы строк/теги/нумерация/запрещённые действия вынесены из JSON-значений в отдельный раздел
Упрощён JSON-шаблон: описания полей сокращены до одного предложения + ограничение по количеству символов — меньше путаницы в выводе AI
Удалён формат Markdown из system prompt, чтобы соответствовать инструкции «запрещён Markdown»
Все JSON-поля объявлены необязательными — отсутствие любого поля не вызывает ошибок, повышена отказоустойчивость
Новая сводка AI для независимых областей (
ai_analysis.include_standalone):Добавлен отдельный переключатель: при включении AI генерирует краткое резюме для каждого независимого источника
Разделение AI-анализа и отображения в доставке: не нужно включать отображение независимых областей в доставке — AI может независимо анализировать полные данные горячих списков
Поддержка платформ горячих списков и RSS-источников, включая данные о рейтинге/времени/траектории
Анализ траекторий связан с
include_rank_timeline: при включении использует данные траекторий для глубокого анализа трендов, при выключении — краткую оценку на основе рейтингаДобавлено JSON-поле
standalone_summaries(краткий обзор независимых источников), адаптировано для всех каналов доставки
2026/01/28 - v5.5.0
Как и с функцией mcp, этот маленький инструмент я тоже не буду вести в отдельном репозитории — он чисто фронтенд, так что всё будет вместе
Добавлен визуальный редактор конфигурации trendradar
2026/02/02 - mcp-v3.2.0
Новый инструмент read_article: чтение полного текста одной статьи через Jina AI Reader (в формате Markdown)
Новый инструмент read_articles_batch: пакетное чтение нескольких статей (до 5, с автоматическим ограничением скорости)
Рекомендуемый рабочий процесс:
search_news(query="ключевое слово", include_url=True)→read_article(url=...)для чтения полного текстаОбновление документации: в README-MCP-FAQ.md и README-MCP-FAQ-EN.md добавлены Q19-Q20 с пояснениями по чтению статей
2026/01/10 - mcp-v3.0.0~v3.1.5
Breaking Change: возвращаемые значения всех инструментов унифицированы в структуру
{success, summary, data, error}Асинхронная согласованность: все 21 инструментальные функции обёрнуты в
asyncio.to_thread()для синхронных вызововMCP Resources: добавлены 4 ресурса (platforms, rss-feeds, available-dates, keywords)
Улучшение RSS:
get_latest_rssподдерживает запросы за несколько дней (параметр days), дедупликация URL между датамиИсправление регулярных выражений:
get_trending_topicsподдерживает синтаксис/pattern/иdisplay_nameОптимизация кэша: добавлена функция
make_cache_key(), сортировка параметров + MD5-хэш для обеспечения согласованностиНовый инструмент check_version: поддержка одновременной проверки обновлений TrendRadar и MCP Server
2026/01/23 - v5.4.0
Добавлена независимая настройка режима AI-анализа: follow_report | daily | current | incremental
Добавлено управление временным окном AI-анализа, поддержка пользовательских интервалов и ограничения частоты в день
Добавлено управление версиями файлов конфигурации
Исправлены несколько ошибок
2026/01/19 - v5.3.0
Крупный рефакторинг: миграция AI-модуля на LiteLLM
Единый AI-интерфейс: использование LiteLLM вместо ручной реализации, поддержка 100+ AI-провайдеров
Упрощение конфигурации: удалено поле
provider, вместо него используется форматmodel: "provider/model_name"Новые функции: автоматические повторы (
num_retries), резервные модели (fallback_models)Изменения конфигурации:
ai.provider→ удалено (объединено с model)ai.base_url→ai.api_baseПеременная окружения
AI_PROVIDER→ удаленаПеременная окружения
AI_BASE_URL→AI_API_BASE
Примеры форматов моделей:
DeepSeek:
deepseek/deepseek-chatOpenAI:
openai/gpt-4oGemini:
gemini/gemini-2.5-flashAnthropic:
anthropic/claude-3-5-sonnet
2026/01/17 - v5.2.0
Основное описание см. в config.yaml
🌐 Функция AI-перевода
Многоязычный перевод: поддержка перевода содержимого доставки на любой язык
Пакетный перевод: умная пакетная обработка, уменьшение количества вызовов API
Пользовательские промпты: поддержка настройки стиля перевода
🔧 Оптимизация архитектуры конфигурации
Независимая конфигурация AI-моделей: анализ и перевод используют общую конфигурацию моделей
Единые переключатели областей: единое управление отображением областей в доставке
Пользовательская сортировка областей: настройка порядка отображения каждой области
✨ Улучшение AI-анализа
AI-анализ встроен в HTML: результаты анализа напрямую встраиваются в HTML-отчёт, используются в уведомлениях по почте
Богато стилизованные AI-блоки: карточный макет с градиентным синим фоном, чёткое разделение измерений анализа
Поддержка временной шкалы рейтинга: AI может получать точный рейтинг каждой новости в каждый момент сбора
Реорганизация блоков (7→4): объединены в «Основные тенденции», «Общественное мнение и споры», «Аномалии и слабые сигналы», «Рекомендации по стратегии»
🔧 Адаптация нескольких моделей
Передача общих параметров: поддержка передачи любых расширенных параметров в API
Адаптация Gemini: нативная поддержка параметров, встроенное смягчение политик безопасности
🐛 Исправление ошибок
Исправлены несколько известных проблем, повышена стабильность системы
2026/01/10 - v5.0.0
Небольшая история разработки: Отдаю дань уважения той модели от компании C, которая сопровождала меня более двух лет, но сразу после продления подписки показала
"This organization has been disabled"
✨ Рефакторинг «пяти основных блоков» содержимого доставки
В этом обновлении содержимое доставки было реорганизовано по областям. Теперь оно чётко разделено на пять основных блоков:
📊 Новости горячих списков: агрегированные горячие темы со всего интернета, отфильтрованные по вашим ключевым словам.
📰 RSS-подписки: содержимое ваших персонализированных источников, сгруппированное по ключевым словам.
🆕 Новое за этот раз: новые горячие темы, обнаруженные в реальном времени с момента последнего запуска (с пометкой 🆕).
📋 Независимая область отображения: полные горячие списки или RSS-источники указанных платформ, полностью без ограничений фильтрации по ключевым словам.
✨ Блок AI-анализа: глубокие инсайты от AI, включая обзор трендов, динамику популярности и чрезвычайно важный анализ эмоциональной окраски.
✨ Функция умной AI-доставки
Интеграция AI-анализа: использование больших языковых моделей для глубокого анализа содержимого доставки, автоматическая генерация обзора трендов, анализа популярности ключевых слов, межплатформенных связей, оценки потенциального влияния и т.д.
Анализ эмоциональной окраски: добавлено глубокое распознавание эмоций, точное улавливание позитивных/негативных, спорных или тревожных настроений в общественном мнении
Поддержка нескольких AI-провайдеров: поддержка DeepSeek (по умолчанию, оптимальное соотношение цены и качества), OpenAI, Google Gemini и любых совместимых с OpenAI интерфейсов
Два режима доставки:
only_analysis(только AI-анализ),both(оба)Пользовательские промпты: настройка роли и формата вывода AI-анализа через файл
config/ai_analysis_prompt.txtМногомерный анализ данных: AI может анализировать изменения рейтинга, продолжительность популярности, межплатформенные показатели, прогнозы трендов и т.д.
📋 Функция независимой области отображения
Полное отображение горячих списков: полные горячие списки указанных платформ отображаются отдельно, без влияния фильтрации по ключевым словам
Независимое отображение RSS: содержимое RSS-источников может отображаться полностью, подходит для источников с небольшим количеством контента
Гибкая конфигурация: поддержка настройки списка платформ, списка RSS-источников, максимального количества отображаемых элементов
📊 Рефакторинг опыта доставки
Улучшение вёрстки: переработаны и унифицированы статистические заголовки для всех каналов, усилена организация блоков — структура сообщений видна с первого взгляда
Упрощение конфигурации: оптимизирована логика настройки каналов уведомлений (например, Feishu) — проще начать
Стрелки трендов популярности: добавлены индикаторы 🔺(рост), 🔻(падение), ➖(без изменений) для наглядного отображения изменений популярности
Универсальный Webhook: поддержка пользовательских URL-адресов Webhook и JSON-шаблонов, лёгкая адаптация для Discord, Matrix, IFTTT и любых других платформ
🔧 Оптимизация конфигурации
Улучшение конфигурации частотных слов: добавлен синтаксис
[группа-алиас], поддержка комментариев#— конфигурация стала понятнее (спасибо @songge8 за предложение)Поддержка переменных окружения: конфигурация, связанная с AI-анализом, поддерживает переопределение через переменные окружения (
AI_API_KEY,AI_PROVIDERи т.д.)
💡 Подробное руководство по настройке см. в разделе Позвольте AI анализировать горячие темы
2026/01/02 - v4.7.0
Исправлено отображение RSS в HTML: исправлена проблема рендеринга из-за несоответствия формата данных RSS, теперь корректно отображается по группам ключевых слов
Новый синтаксис регулярных выражений: конфигурация ключевых слов поддерживает синтаксис
/pattern/, решающий проблему ложных совпадений английских подстрок (например,aiсовпадает сtraining) 📖 См. подробное описание синтаксисаНовый синтаксис отображаемых имён: использование
=> примечаниедля присвоения запоминающегося имени сложным регулярным выражениям — сообщения доставки становятся понятнее (например,/\bai\b/ => AI相关)Не умеете писать регулярные выражения? В README добавлено руководство по генерации регулярных выражений с помощью AI — расскажите ChatGPT/Gemini/DeepSeek, что вы хотите сопоставить, и AI напишет их за вас
2025/12/30 - mcp-v2.0.0
Изменение архитектуры: удалена поддержка TXT, унифицировано использование базы данных SQLite
Запросы RSS: добавлены
get_latest_rss,search_rss,get_rss_feeds_statusЕдиный поиск:
search_newsподдерживает параметрinclude_rssдля одновременного поиска по горячим спискам и RSS
2026/01/01 - v4.6.0
Исправлено отображение RSS в HTML: содержимое RSS объединено в HTML-страницу горячих списков, отображается по группам источников
Новая конфигурация display_mode: поддержка
keyword(группировка по ключевым словам) иplatform(группировка по платформам)
2025/12/30 - v4.5.0
Поддержка RSS-источников: добавлен сбор RSS/Atom, статистика по группам ключевых слов (в том же формате, что и горячие списки)
Рефакторинг структуры хранения: уплощённая структура каталогов
output/{type}/{date}.dbЕдиная конфигурация сортировки:
sort_by_position_firstвлияет и на горячие списки, и на RSSРефакторинг структуры конфигурации:
config.yamlреорганизован в 7 логических групп (app, report, notification, storage, platforms, rss, advanced) — пути конфигурации стали понятнее
2025/12/26 - mcp-v1.2.0
Обновление MCP-модуля — оптимизация набора инструментов, добавлена функция агрегированного сравнения, объединены избыточные инструменты:
Новый инструмент
aggregate_news— агрегация новостей с дедупликацией по платформамНовый инструмент
compare_periods— сравнительный анализ периодов (неделя к неделе/месяц к месяцу)Объединены
find_similar_news+search_related_news_history→find_related_newsУлучшен
get_trending_topics— добавлен режимauto_extractдля автоматического извлечения горячих темИсправлены несколько ошибок
Синхронно обновлена документация README-MCP-FAQ.md на китайском и английском (Q1-Q18)
2025/12/20 - v4.0.3
Добавлена функция нормализации URL, решающая проблему повторной доставки на таких платформах, как Weibo, из-за динамических параметров (например,
band_rank)Исправлена логика обнаружения инкрементального режима, корректное распознавание исторических заголовков
2025/12/17 - v4.0.1
StorageManager добавлены прокси-методы для записей доставки
S3-клиент переключён на virtual-hosted style для повышения совместимости (поддержка Tencent Cloud COS и других сервисов)
2025/12/13 - mcp-v1.1.0
Обновление MCP-модуля:
Адаптация к v4.0.0, также совместимость с данными v3.x
Новые инструменты синхронизации хранилища:
sync_from_remote,get_storage_status,list_available_dates
2025/12/13 - v4.0.0
🎉 Крупное обновление: полный рефакторинг хранилища и основной архитектуры
Поддержка нескольких бэкендов хранилища: внедрён новый модуль хранилища, поддерживающий локальный SQLite и удалённое облачное хранилище (S3-совместимый протокол, например Cloudflare R2), адаптированный для GitHub Actions, Docker и локальной среды.
Оптимизация структуры базы данных: рефакторинг структуры таблиц SQLite, повышение эффективности данных и возможностей запросов.
Модуляризация основного кода: логика основной программы разделена на несколько модулей пакета trendradar, значительно повышена поддерживаемость кода.
Расширенные функции: реализованы стандартизация формата дат, политика хранения данных, поддержка конфигурации часового пояса, оптимизация отображения времени, а также исправлена проблема персистентности данных удалённого хранилища, обеспечивающая точность слияния данных.
Очистка и совместимость: удалена большая часть исторического совместимого кода, унифицированы способы хранения и чтения данных.
2025/12/03 - v3.5.0
🎉 Улучшение основных функций
Поддержка нескольких аккаунтов для доставки
Все каналы доставки (Feishu, DingTalk, WeChat Work, Telegram, ntfy, Bark, Slack) поддерживают настройку нескольких аккаунтов
Разделение нескольких аккаунтов точкой с запятой
;, например:FEISHU_WEBHOOK_URL=url1;url2Автоматическая проверка согласованности количества парных конфигураций (например, token и chat_id для Telegram)
Конфигурация областей доставки
Через
display.region_orderнастраивается порядок отображения областей (в v5.2.0 заменяет старыйreverse_content_order)Через
display.regionsуправляется отображение областей (горячие списки, новые темы, RSS, независимые области, AI-анализ)
Глобальные фильтрующие ключевые слова
Добавлена метка области
[GLOBAL_FILTER], поддержка глобальной фильтрации нежелательного контентаСценарии применения: фильтрация рекламы, маркетинга, низкокачественного контента и т.д.
🐳 Оптимизация генерации HTML в Docker (двойной путь)
Исправление проблемы: решена проблема невозможности синхронизации
index.htmlс хост-машиной в среде DockerГенерация по двум путям: ежедневный сводный HTML генерируется в двух местах
index.html(корень проекта): для доступа через GitHub Pagesoutput/index.html: через Docker Volume, доступен напрямую с хост-машины
Совместимость: обеспечение корректного доступа к веб-версии отчёта в Docker, GitHub Actions и локальной среде
🐳 Поддержка Docker MCP-образа
Добавлен отдельный образ MCP-сервиса
wantcat/trendradar-mcpПоддержка развертывания функции AI-анализа через Docker, предоставление сервиса через HTTP-интерфейс (порт 3333)
Двухконтейнерная архитектура: сервис推送 новостей и MCP-сервис работают независимо, могут масштабироваться и перезапускаться по отдельности
Подробнее см. Docker-развертывание - MCP-сервис
🌐 Поддержка веб-сервера
Добавлен встроенный веб-сервер с поддержкой просмотра сгенерированных отчетов через браузер
Управление запуском/остановкой через команду
manage.py:docker exec -it trendradar python manage.py start_webserverАдрес доступа:
http://localhost:8080(порт настраивается)Функции безопасности: обслуживание статических файлов, ограничение каталогов, локальный доступ
Поддержка двух режимов: автоматический запуск и ручное управление
📖 Оптимизация документации
Добавлен раздел Как отображается推送-контент?: настройка стиля и содержимого推送
Добавлен раздел Когда мне推送ить?: настройка временных интервалов推送
Добавлен раздел Как часто запускать?: настройка частоты автоматического запуска
Добавлен раздел 推送 в несколько групп/устройств: одновременная отправка нескольким получателям
Оптимизированы разделы конфигурации: единообразно добавлено пояснение "Место настройки"
Упрощена инструкция быстрого старта: три основных файла一目了然
Оптимизирован раздел Docker-развертывание: добавлено описание образов, рекомендовано развертывание через git clone, реорганизованы способы развертывания
🔧 Инструкция по обновлению:
Пользователи GitHub Fork: обновите
main.py,config/config.yaml(добавлена поддержка推送 для нескольких аккаунтов, изменение существующей конфигурации не требуется)推送 для нескольких аккаунтов: новая функция, по умолчанию не включена, существующая конфигурация с одним аккаунтом не затрагивается
2025/11/26 - mcp-v1.0.3
Обновление MCP-модуля:
Добавлен инструмент разбора дат resolve_date_range, решающий проблему不一致ности вычисления дат AI-моделями
Поддержка разбора выражений дат на естественном языке (эта неделя, последние 7 дней, прошлый месяц и т.д.)
Общее количество инструментов увеличено с 13 до 14
2025/11/28 - v3.4.1
🔧 Оптимизация форматов
Улучшение推送 Bark
Bark теперь поддерживает рендеринг Markdown
Включен нативный формат Markdown: жирный шрифт, ссылки, списки, блоки кода и т.д.
Удалено преобразование в обычный текст, полностью используется нативная возможность рендеринга Bark
Точность формата Slack
Используется специальный формат mrkdwn для обработки содержимого по частям
Повышена точность оценки размера в байтах (предотвращение превышения лимита сообщений)
Оптимизирован формат ссылок:
<url|text>и синтаксис жирного шрифта:*text*
Повышение производительности
Преобразование формата выполняется в процессе разбиения на части, избегая повторной обработки
Точная оценка размера сообщения, снижение частоты ошибок отправки
🔧 Инструкция по обновлению:
Пользователи GitHub Fork: обновите
main.py,config.yaml
2025/11/25 - v3.4.0
🎉 Добавлена поддержка推送 Slack
Канал推送 для командной работы
Поддержка Slack Incoming Webhooks (популярный инструмент командной работы по всему миру)
Централизованное управление сообщениями, подходит для обмена горячими новостями в команде
Поддержка формата mrkdwn (жирный шрифт, ссылки и т.д.)
Несколько способов развертывания
GitHub Actions: настройка Secret
SLACK_WEBHOOK_URLDocker: переменная окружения
SLACK_WEBHOOK_URLЛокальный запуск: файл конфигурации
config/config.yaml
📖 Подробная инструкция по настройке: Быстрый старт -推送 Slack
Оптимизирован опыт установки MCP в один клик через setup-windows.bat и setup-windows-en.bat
🔧 Инструкция по обновлению:
Пользователи GitHub Fork: обновите
main.py,config/config.yaml,.github/workflows/crawler.yml
2025/11/24 - v3.3.0
🎉 Добавлена поддержка推送 Bark
Эксклюзивный канал推送 для iOS
Поддержка推送 Bark (на основе APNs, платформа iOS)
Бесплатно и с открытым исходным кодом, просто и эффективно, без рекламы
Поддержка как официального сервера, так и собственного сервера
Несколько способов развертывания
GitHub Actions: настройка Secret
BARK_URLDocker: переменная окружения
BARK_URLЛокальный запуск: файл конфигурации
config/config.yaml
📖 Подробная инструкция по настройке: Быстрый старт -推送 Bark
🐛 Исправление ошибок
Исправлена проблема, когда конфигурация
ntfy_server_urlвconfig.yamlне применялась (#345)
🔧 Инструкция по обновлению:
Пользователи GitHub Fork: обновите
main.py,config/config.yaml,.github/workflows/crawler.yml
2025/11/23 - v3.2.0
🎯 Добавлены функции расширенной настройки
Настройка приоритета сортировки ключевых слов
Поддержка двух стратегий сортировки: приоритет популярности vs приоритет порядка конфигурации
Удовлетворение различных сценариев использования: отслеживание горячих тем или персонализированное внимание
Точное управление количеством отображаемых элементов
Глобальная конфигурация: единое ограничение количества отображаемых элементов для всех ключевых слов
Индивидуальная конфигурация: использование синтаксиса
@数字для установки ограничений для конкретных ключевых словЭффективный контроль длины推送, выделение ключевого контента
📖 Подробная инструкция по настройке: Конфигурация ключевых слов - Расширенная конфигурация
🔧 Инструкция по обновлению:
Пользователи GitHub Fork: обновите
main.py,config/config.yaml
2025/11/18 - mcp-v1.0.2
Обновление MCP-модуля:
Оптимизирована ситуация, когда при запросе сегодняшних новостей могли ошибочно возвращаться данные за прошлые даты
2025/11/22 - v3.1.1
Исправлена проблема сбоя из-за аномальных данных: решена ошибка
'float' object has no attribute 'lower', с которой сталкивались некоторые пользователи в среде GitHub ActionsДобавлен двойной механизм защиты: фильтрация недопустимых заголовков (None, float, пустые строки) на этапе получения данных, а также проверка типов в местах вызова функций
Повышена стабильность системы, обеспечена нормальная работа даже при возврате аномальных форматов от источников данных
Инструкция по обновлению (пользователи GitHub Fork):
Обязательно обновить:
main.pyРекомендуется использовать обновление малой версии: скопировать и заменить указанные файлы
2025/11/20 - v3.1.0
Добавлена поддержка推送 в личный WeChat: приложение корпоративного WeChat может推送ить в личный WeChat, без установки приложения корпоративного WeChat
Поддержка двух форматов сообщений:
markdown(робот группы корпоративного WeChat) иtext(приложение личного WeChat)Добавлена переменная окружения
WEWORK_MSG_TYPE, поддержка различных способов развертывания: GitHub Actions, Docker, docker compose и др.Режим
textавтоматически удаляет синтаксис Markdown, обеспечивая推送 в виде обычного текстаПодробнее см. описание конфигурации «推送 в личный WeChat» в разделе быстрого старта
Инструкция по обновлению (пользователи GitHub Fork):
Обязательно обновить:
main.py,config/config.yamlОпционально обновить:
.github/workflows/crawler.yml(при развертывании через GitHub Actions)Рекомендуется использовать обновление малой версии: скопировать и заменить указанные файлы
2025/11/12 - v3.0.5
Исправлена логическая ошибка конфигурации порта SSL/TLS при отправке почты
Оптимизировано использование порта 465 (SSL) по умолчанию для почтовых провайдеров (QQ/163/126)
Добавлена поддержка переменных окружения Docker: основные параметры конфигурации (
enable_crawler,report_mode,push_windowи др.) можно переопределять через переменные окружения, решена проблема, когда изменения файла конфигурации не применялись у пользователей NAS (подробнее см. раздел 🐳 Docker-развертывание)
2025/10/26 - mcp-v1.0.1
Обновление MCP-модуля:
Исправлена ошибка передачи параметров даты в запросах
Унифицирован формат временных параметров для всех инструментов
2025/10/31 - v3.0.4
Решена проблема ошибок推送 Feishu из-за слишком длинного содержимого, реализована отправка по частям
2025/10/23 - v3.0.3
Расширена область отображения сообщений об ошибках ntfy
2025/10/21 - v3.0.2
Исправлена проблема кодировки при推送 ntfy
2025/10/20 - v3.0.0
Крупное обновление - запуск функции AI-анализа ✨
Основные функции:
Добавлен сервер AI-анализа на основе MCP (Model Context Protocol)
Поддержка 17 инструментов интеллектуального анализа: базовые запросы, интеллектуальный поиск, расширенный анализ, RSS-запросы, управление системой
Взаимодействие на естественном языке: запрос и анализ новостных данных через диалог
Поддержка нескольких клиентов: Claude Desktop, Cherry Studio, Cursor, Cline и др.
Возможности анализа:
Анализ трендов тем (отслеживание популярности, жизненный цикл, обнаружение всплесков, прогнозирование трендов)
Анализ данных (сравнение платформ, статистика активности, совместное появление ключевых слов)
Анализ тональности, поиск похожих новостей, генерация интеллектуальных сводок
Поиск исторических релевантных новостей, мультимодальный поиск
Примечание по обновлению:
Это независимая функция AI-анализа, не влияет на существующую функцию推送
Можно использовать по желанию, обновление существующего развертывания не требуется
2025/10/15 - v2.4.4
Содержание обновления:
Исправлена проблема кодировки при推送 ntfy + 1
Исправлена проблема определения временного окна推送
Примечание по обновлению:
Рекомендуется 【обновление малой версии】
2025/10/10 - v2.4.3
Благодарим nidaye996 за обнаруженные проблемы с удобством использования
Содержание обновления:
Переработан «режим тихого推送», переименован в «управление временным окном推送», повышена понятность функции
Уточнено, что временное окно推送 является опциональной дополнительной функцией, может использоваться с тремя режимами推送
Улучшены комментарии и описания в документации, функция стала более понятной
Примечание по обновлению:
Это только рефакторинг, обновление не обязательно
2025/10/8 - v2.4.2
Содержание обновления:
Исправлена проблема кодировки при推送 ntfy
Исправлена проблема отсутствия файла конфигурации
Оптимизирован эффект推送 ntfy
Добавлена функция экспорта изображений по частям для github page
Примечание по обновлению:
Рекомендуется 【крупное обновление версии】
2025/10/2 - v2.4.0
Добавлены уведомления推送 ntfy
Основные функции:
Поддержка публичного сервиса ntfy.sh и самостоятельно размещенных серверов
Сценарии использования:
Подходит для пользователей, заботящихся о конфиденциальности (поддержка самостоятельного размещения)
Кроссплатформенный推送 (iOS, Android, Desktop, Web)
Не требуется регистрация аккаунта (публичный сервер)
Открытый исходный код, бесплатно (лицензия MIT)
Примечание по обновлению:
Рекомендуется 【крупное обновление версии】
2025/09/26 - v2.3.2
Исправлена проблема пропущенной проверки конфигурации почтовых уведомлений (#88)
Описание исправления:
Решена проблема, когда даже при корректной настройке почтовых уведомлений система сообщала «не настроен ни один webhook»
2025/09/22 - v2.3.1
Добавлена функция推送 по электронной почте, поддержка отправки отчетов о горячих новостях на почту
Интеллектуальное распознавание SMTP: автоматическое распознавание конфигурации более 10 почтовых провайдеров, включая Gmail, QQ邮箱, Outlook, 网易邮箱 и др.
Красивый HTML-формат: содержимое письма использует тот же HTML-формат, что и веб-версия, с красивым оформлением и адаптацией для мобильных устройств
Поддержка массовой отправки: поддержка нескольких получателей, разделенных запятыми для одновременной отправки
Пользовательский SMTP: возможность настройки собственного SMTP-сервера и порта
Исправлена проблема сетевого подключения при сборке Docker
Инструкция по использованию:
Сценарии применения: подходит для пользователей, которым нужна архивация почты, обмен в команде, периодические отчеты
Поддерживаемые почтовые сервисы: Gmail, QQ邮箱, Outlook/Hotmail, 163/126邮箱, 新浪邮箱, 搜狐邮箱 и др.
Примечание по обновлению:
В этом обновлении много изменений, для обновления рекомендуется использовать 【крупное обновление версии】
2025/09/17 - v2.2.0
Добавлена функция сохранения новостных изображений в один клик, позволяющая легко делиться интересующими вас горячими темами
Инструкция по использованию:
Сценарии применения: после включения веб-версии по инструкции (GitHub Pages)
Способ использования: откройте веб-ссылку на телефоне или компьютере, нажмите кнопку «Сохранить как изображение» в верхней части страницы
Результат: система автоматически создаст красивое изображение из текущего новостного отчета, которое сохранится в галерею телефона или на рабочий стол компьютера
Удобство обмена: вы можете напрямую отправить это изображение друзьям, опубликовать в Moments или поделиться в рабочей группе, чтобы другие тоже увидели важную информацию, которую вы обнаружили
2025/09/13 - v2.1.2
Решена проблема сбоя推送 новостей из-за ограничения объема推送 DingTalk (использована отправка по частям)
2025/09/04 - v2.1.1
Исправлена проблема невозможности запуска docker на некоторых архитектурах
Официально опубликован официальный Docker-образ wantcat/trendradar с поддержкой нескольких архитектур
Оптимизирован процесс развертывания Docker, быстрый запуск без локальной сборки
2025/08/30 - v2.1.0
Основные улучшения:
Оптимизация логики推送: изменение с «推送 при каждом выполнении» на «управляемый推送 в пределах временного окна»
Управление временным окном: возможность установки диапазона времени推送, чтобы не беспокоить в нерабочее время
Выбор частоты推送: поддержка однократного или многократного推送 в пределах временного интервала
Примечание по обновлению:
Эта функция по умолчанию отключена, необходимо вручную включить управление временным окном推送 в config.yaml
Для обновления необходимо обновить оба файла: main.py и config.yaml
2025/08/27 - v2.0.4
Эта версия не является исправлением функций, а важным напоминанием
Пожалуйста, обязательно храните webhooks в безопасности, не публикуйте их, не публикуйте, не публикуйте
Если вы развернули этот проект на GitHub через fork, заполните webhooks в GitHub Secret, а не в config.yaml
Если вы уже раскрыли webhooks или заполнили их в config.yaml, рекомендуется удалить и создать заново
2025/08/06 - v2.0.3
Оптимизирован эффект веб-версии github page для удобства использования на мобильных устройствах
2025/07/28 - v2.0.2
Рефакторинг кода
Решена проблема, когда номер версии легко забыть изменить
2025/07/27 - v2.0.1
Исправленные проблемы:
Проблема сбоя выполнения из-за символов перевода строки CRLF в shell-скрипте docker
Логическая проблема, когда при пустом frequency_words.txt новости также отправлялись пустыми
После исправления, когда вы выбираете пустой frequency_words.txt, будут推送иться все новости, но из-за ограничений размера сообщений推送, пожалуйста, внесите следующие корректировки
Вариант 1: отключите мобильный推送, выберите только развертывание Github Pages (это вариант с наиболее полной информацией, все горячие темы всех платформ будут пересортированы по вашему пользовательскому алгоритму горячих тем)
Вариант 2: уменьшите количество платформ推送, отдайте приоритет корпоративному WeChat или Telegram, для этих двух推送 я реализовал функцию отправки по частям (поскольку отправка по частям влияет на опыт推送, и только эти две платформы дают лишь небольшой объем推送, пришлось сделать функцию отправки по частям, но по крайней мере гарантируется полнота получаемой информации)
Вариант 3: можно комбинировать с вариантом 2, выбор режима current или incremental позволит эффективно уменьшить объем推送 за один раз
2025/07/17 - v2.0.0
Крупный рефакторинг:
Рефакторинг управления конфигурацией: все конфигурации теперь управляются через файл
config/config.yaml(main.py я по-прежнему не разделял, чтобы вам было удобно копировать при обновлении)Обновление режимов работы: поддержка трех режимов -
daily(сводка за день),current(текущий рейтинг),incremental(инкрементальный мониторинг)Поддержка Docker: полное решение для развертывания Docker, поддержка контейнеризации
Описание файлов конфигурации:
config/config.yaml- основной файл конфигурации (настройки приложения, конфигурация краулера, конфигурация уведомлений, конфигурация платформ и т.д.)config/frequency_words.txt- конфигурация ключевых слов (настройка отслеживаемых слов)
2025/07/09 - v1.4.1
Новая функция: добавлен инкрементальный推送 (настройка FOCUS_NEW_ONLY в начале main.py), этот переключатель отслеживает только новые темы, а не постоянную популярность, уведомления отправляются только при появлении нового контента.
Исправленные проблемы: в некоторых случаях возникали случайные проблемы с форматированием из-за специальных символов в самих новостях.
2025/06/23 - v1.3.0
Сообщения推送 корпоративного WeChat и Telegram имеют ограничения по длине, поэтому я реализовал отправку сообщений по частям. Документация для разработчиков: 企业微信 и Telegram
2025/06/21 - v1.2.1
В старых версиях до этой версии требовалось копировать и заменять не только main.py, но и crawler.yml https://github.com/sansan0/TrendRadar/blob/master/.github/workflows/crawler.yml
2025/06/19 - v1.2.0
Благодарю claude research за систематизацию API различных платформ, что позволило мне быстро выполнить адаптацию платформ (хотя кода стало больше и он стал более избыточным~)
Поддержка каналов推送 telegram, корпоративный WeChat, DingTalk, поддержка многоканальной конфигурации и одновременного推送
2025/06/18 - v1.1.0
200 звезд⭐! Продолжаю радовать всех~ В последнее время, по моему «подстрекательству», многие люди ставили лайки, делились и рекомендовали меня в моем публичном аккаунте, я видел в бэкенде конкретные данные поддержки аккаунтов, многие стали старыми фанатами с ангельского раунда (я веду публичный аккаунт чуть больше месяца, хотя зарегистрирован он был 7-8 лет назад, ха-ха, сел в поезд рано, а отправился поздно), но поскольку вы не оставляли комментарии или личные сообщения, я не мог ответить каждому и поблагодарить за поддержку, поэтому благодарю всех здесь!
Важное обновление: добавлены веса, теперь вы видите самые горячие и самые обсуждаемые новости вверху
Обновлена документация по использованию, так как в последнее время добавлено много функций, а предыдущую документацию я написал лениво и просто (см. полную инструкцию по настройке ⚙️ frequency_words.txt ниже)
2025/06/16 - v1.0.0
Добавлено уведомление о новой версии проекта, по умолчанию включено, для отключения измените "FEISHU_SHOW_VERSION_UPDATE": True на False в main.py
2025/06/13+14
Удален код совместимости, у тех, кто форкнул ранее, при прямом копировании кода в день копирования будет отображаться аномалия (на следующий день восстановится)
Внизу feishu и html добавлено отображение новых новостей
2025/06/09
100 звезд⭐! Напишу небольшую функцию для всех В файл frequency_words.txt добавлена функция 【обязательные слова】, используйте знак +
Синтаксис обязательных слов:
Тан Сэн или Чжу Бацзе должны одновременно присутствовать в заголовке, чтобы новость была включена в推送
+唐僧
+猪八戒Приоритет фильтрующих слов выше:
Если в заголовке фильтрующее слово совпадает с «Тан Сэн читает сутры», то даже если в обязательных словах есть Тан Сэн, новость не будет отображаться
+唐僧
!唐僧念经2025/06/02
Веб-страница и сообщения Feishu поддерживают прямой переход к подробностям новости с телефона
Оптимизирован эффект отображения + 1
2025/05/26
Оптимизирован эффект отображения сообщений Feishu
✨ Основные функции
Агрегация горячих тем со всего интернета
知乎
抖音
bilibili 热搜
华尔街见闻
贴吧
百度热搜
财联社热门
澎湃新闻
凤凰网
今日头条
微博
По умолчанию отслеживаются 11 основных платформ, также можно добавить дополнительные платформы самостоятельно
💡 Подробная инструкция по настройке: Подробная конфигурация - Конфигурация платформ
Поддержка RSS-подписок (новая функция v4.5.0)
Поддержка抓取 RSS/Atom-подписок, группировка и статистика по ключевым словам (формат такой же, как у горячих рейтингов):
Единый формат: RSS и горячие рейтинги используют одинаковое сопоставление ключевых слов и формат отображения
Простая настройка: добавление RSS-источников напрямую в
config.yamlОбъединенный推送: горячие рейтинги и RSS объединяются в одно сообщение推送
Фильтрация по свежести: автоматическая фильтрация старых статей старше указанного количества дней, предотвращение повторного推送. Поддержка глобального значения по умолчанию и индивидуальной настройки для каждого источника
💡 RSS использует тот же
frequency_words.txtдля фильтрации по ключевым словам, что и горячие рейтинги
Визуальный редактор конфигурации
Предоставляет веб-интерфейс для графической настройки, без необходимости ручного редактирования YAML-файлов, все параметры конфигурации можно изменить и экспортировать через формы.
👉 Онлайн-демо: https://sansan0.github.io/TrendRadar/
Интеллектуальная стратегия推送
Три режима推送:
Режим | Сценарии применения | Особенности推送 |
Сводка за день (daily) | Руководители предприятий/обычные пользователи | Отправка всех соответствующих новостей за день по расписанию (включая ранее推送енные) |
Текущий рейтинг (current) | Самозанятые/создатели контента | Отправка новостей, соответствующих текущему рейтингу, по расписанию (постоянно находящиеся в рейтинге появляются каждый раз) |
Инкрементальный мониторинг (incremental) | Инвесторы/трейдеры | Отправка только нового контента, ноль повторов |
💡 Краткое руководство по выбору:
Не хотите видеть повторяющиеся новости → используйте
incremental(инкрементальный мониторинг)Хотите видеть полную тенденцию рейтинга → используйте
current(текущий рейтинг)Нужен ежедневный сводный отчет → используйте
daily(сводка за день)Подробное сравнение и инструкция по настройке: Подробная конфигурация - Подробное описание режимов推送
Дополнительные функции (опционально):
Функция | Описание | По умолчанию |
Система расписания | Почасовая организация с понедельника по воскресенье: для каждого дня назначаются разные временные интервалы, режимы推送 и стратегии AI-анализа. Для каждого временного интервала можно независимо настроить метод фильтрации (ключевые слова/AI) и направление интересов, что позволяет видеть разные типы новостей в разное время. Встроено 5 пресетов (always_on / morning_evening / office_hours / night_owl / custom), также возможна настройка. Поддержка различий между рабочими и выходными днями, интервалов через полночь, дедупликации per-period, обнаружения конфликтов интервалов (v6.0.0 + v6.5.0) | morning_evening |
Настройка порядка контента | Через | см. файл конфигурации |
Переключение режима отображения |
| keyword |
💡 Подробная инструкция по настройке: Как отображается推送-контент? и Когда мне推送ить?
Точная фильтрация контента
Установите персональные ключевые слова (например: AI, BYD, образовательная политика), чтобы推送ить только релевантные горячие темы и отфильтровывать нерелевантную информацию
💡 Инструкция по базовой настройке: Конфигурация ключевых слов - Базовый синтаксис
💡 Инструкция по расширенной настройке: Конфигурация ключевых слов - Расширенная конфигурация
💡 Также можно не выполнять фильтрацию и推送ить все горячие темы полностью (оставьте frequency_words.txt пустым)
Интеллектуальная фильтрация новостей с помощью AI (новая функция v6.5.0)
Опишите свои интересы на естественном языке, AI автоматически классифицирует новости, заменяя традиционное сопоставление по ключевым словам
Описание интересов на естественном языке: запишите в
ai_interests.txtсвои интересы повседневным языком — не нужно изучать синтаксис ключевых словДвухэтапная интеллектуальная обработка: AI сначала извлекает структурированные теги из описания интересов, затем массово классифицирует и оценивает новости по тегам
Контроль порога оценки: через
ai_filter.min_scoreможно точно управлять качеством push-уведомлений — отправляются только новости с высокой релевантностьюАвтоматический откат: при сбое AI-фильтрации автоматически выполняется откат к сопоставлению по ключевым словам, push не прерывается
Умное обновление тегов: при изменении интересов AI сам оценивает масштаб изменений и выбирает инкрементальную или полную переклассификацию
Гибкое переключение:
filter.methodподдерживает два режима —keyword(по умолчанию) иai; для Timeline можно задавать переопределение по временным периодамПерсонализация по периодам: в разные отрезки времени можно использовать разные файлы ключевых слов или AI-описание интересов. Например, утром — быстрая фильтрация по «техническому тезаурусу», вечером — глубокий AI-анализ по «финансовым интересам»
# config.yaml 快速启用示例
filter:
method: ai # keyword(默认)| ai
ai_filter:
min_score: 6 # 推送最低分数阈值(1-10)💡 AI-фильтрация использует общую конфигурацию моделей с AI-анализом и переводом — достаточно один раз указать
ai.api_key
Анализ трендов в реальном времени
Отслеживайте изменения популярности новостей в реальном времени: вы будете знать не только «что в тренде», но и «как развивается тема».
Отслеживание по временной шкале: фиксируется полный период от первого появления новости до последнего
Изменение популярности: статистика изменения позиций и частоты появления новостей в разные периоды времени
Обнаружение нового: мгновенно распознаёт новые горячие темы и сразу помечает их значком 🆕
Анализ устойчивости: различает разовые хайпы и глубокие новости, которые продолжают развиваться
Сравнение между платформами: показывает рейтинг одной и той же новости на разных платформах, выявляя разницу во внимании СМИ
💡 Описание формата push-уведомлений см. в Как выглядят мои сообщения
Персонализированный алгоритм горячих тем
Больше не нужно плясать под дудку алгоритмов разных платформ — TrendRadar пересобирает горячий поиск по всему интернету.
💡 Три пропорции можно настроить, подробнее в Конфигурация — Настройка весов горячих тем
Мультиканальные push-уведомления и несколько аккаунтов
Поддерживаются 企业微信 (+ схема доставки в WeChat), 飞书, 钉钉, Telegram, электронная почта, ntfy, Bark, Slack, универсальный Webhook (можно подключить Discord, IFTTT и любые другие платформы). Сообщения приходят прямо на телефон и на почту.
💡 Подробная инструкция по настройке — Push в несколько групп/устройств
AI-перевод на разные языки (новое в v5.2.0)
Переводит содержимое push-уведомлений на любой язык, устраняя языковой барьер. Читайте горячие темы внутри страны или зарубежные новости через RSS — всё легко на родном языке.
Перевод в один клик: достаточно указать
ai_translation.enabled: trueи целевой язык вconfig.yamlПоддержка многих языков: поддерживаются English, Korean, Japanese, French и любые другие языки
Умная пакетная обработка: автоматический пакетный перевод сокращает количество API-вызовов и экономит средства
Собственный стиль: настройте стиль перевода и терминологию через
ai_translation_prompt.txtОбщая конфигурация моделей: используются те же настройки моделей из раздела
ai, что и для AI-анализа
# config.yaml 快速启用示例
ai_translation:
enabled: true
language: "English" # 翻译目标语言💡 Перевод и AI-анализ используют общую конфигурацию моделей — достаточно один раз указать
ai.api_key, чтобы пользоваться обеими функциями
Источники RSS: ниже приведены подборки RSS-каналов на любой вкус
awesome-tech-rss — блоги и СМИ о технологиях, стартапах и программировании
awesome-rss-feeds — подборка RSS ведущих мировых новостных СМИ
⚠️ Некоторые зарубежные медиа могут содержать чувствительные темы; AI-модель может отказаться переводить. Рекомендуем отбирать источники по своим потребностям.
Расширения для просмотра HTML-отчёта в браузере (новое в v6.6.0)
При открытии push-уведомления с HTML-отчётом в браузере автоматически включаются расширенные возможности (на почтовые клиенты не влияет):
Широкоэкранный режим: на десктопе автоматически включается широкая разметка 1200px — максимально полно используется пространство экрана
Быстрое переключение вкладок: группы ключевых слов и отдельные секции поддерживают навигацию по вкладкам — никакого долгого прокручивания
Тёмная тема: переключается одним нажатием, выбор запоминается автоматически
Живой поиск: нажмите
/, чтобы вызвать поиск и мгновенно отфильтровать заголовки новостейКопирование в один клик: наведите на номер новости, чтобы скопировать заголовок и ссылку
Горячие клавиши:
W— широкий экран,D— тёмная тема,/— поиск,?— все горячие клавиши
💡 Все улучшения реализованы через прогрессивное улучшение: в почтовых клиентах по-прежнему отображается исходная вёрстка 600px, без регрессий.
Гибкая архитектура хранения (крупное обновление v4.0.0)
Поддержка нескольких бэкендов хранения:
Удалённое облачное хранилище: по умолчанию в среде GitHub Actions; поддержка S3-совместимых протоколов (R2/OSS/COS и др.). Данные хранятся в облаке и не засоряют репозиторий
Локальная база данных SQLite: по умолчанию в Docker/локальных средах; данные полностью под контролем
Автоматический выбор бэкенда: интеллектуальное переключение способа хранения в зависимости от среды выполнения
💡 Подробнее: Где хранятся данные?
Развёртывание на разных платформах
GitHub Actions: автоматический сбор по расписанию + удалённое облачное хранилище (требуется периодическое продление)
Docker: контейнеризация с поддержкой нескольких архитектур, локальное хранение данных
Локальный запуск: работает напрямую на Windows/Mac/Linux
AI-анализ и push-уведомления (новое в v5.0.0)
Глубокий анализ содержимого push-уведомлений с помощью больших языковых моделей и автоматическая генерация отчёта с инсайтами по горячим темам.
Интеллектуальный анализ: автоматический анализ трендов, популярности ключевых слов, связей между платформами и потенциального влияния
Много провайдеров: единый интерфейс на основе LiteLLM, поддержка 100+ AI-провайдеров (DeepSeek, OpenAI, Gemini, Anthropic, локальный Ollama и др.), а также автоматическое переключение на запасные модели
Независимый режим анализа: область анализа AI может отличаться от push — push отправляет только новые сообщения (чтобы не беспокоить), а AI может анализировать все новости за день (для полной картины трендов)
Гибкая отправка: можно выбрать только исходный контент, только AI-анализ или оба варианта
Собственные промпты: настройте угол анализа через
config/ai_analysis_prompt.txt
💡 Подробная инструкция: AI помогает мне анализировать горячие темы
Отдельные секции (новое в v5.0.0)
Полные рейтинги горячих тем для указанных платформ, не зависящие от фильтрации по ключевым словам.
Полный топ: полное отображение рейтинга указанных платформ — для тех, кто хочет видеть весь список
Отдельный RSS: содержимое RSS-источников отображается полностью, без ограничений по ключевым словам
Глубокий AI-анализ: можно отдельно включить AI-анализ трендов по полному рейтингу, не показывая его в push
Гибкая настройка: выбор платформ, RSS-источников и максимального количества записей
💡 Подробная инструкция: Как отображается содержимое push? — Отдельные секции
Интеллектуальный AI-анализ (новое в v3.0.0)
Диалоговая система анализа на базе протокола MCP (Model Context Protocol), позволяющая глубоко исследовать новостные данные на естественном языке.
💡 Совет: для работы AI нужны локальные новостные данные
В проект встроены тестовые данные — можно сразу попробовать
Рекомендуется развернуть и запустить проект самостоятельно для более актуальных данных
Подробнее см. AI-интеллектуальный анализ
Веб-развёртывание
После запуска в корневой папке создаётся index.html — это полноценная страница новостного отчёта.
Способ развёртывания: нажмите Use this template, чтобы создать репозиторий; его можно развернуть на статических хостингах, например Cloudflare Pages или GitHub Pages.
💡 Подсказка: включите GitHub Pages, чтобы получить онлайн-адрес: откройте Settings → Pages в репозитории. Предпросмотр
⚠️ Прежняя функция автоматического хранения в GitHub Actions отключена (из-за этого решения нагрузка на серверы GitHub была слишком высокой и влияла на стабильность платформы).
☁️ Автоматическое развёртывание на Cloudflare Pages (необязательно · быстрее из Китая)
GitHub Pages из Китая открывается медленно, а Cloudflare Pages работает быстрее. После настройки каждый запуск GitHub Actions будет автоматически отправлять свежий index.html на Cloudflare Pages — никаких ручных действий не требуется.
Необходимые условия: вы уже выполнили развёртывание через GitHub Actions и можете нормально генерировать веб-отчёт.
① Создайте проект Cloudflare Pages
Войдите в Cloudflare Dashboard → Workers & Pages → Create → Pages → выберите Upload assets (прямая загрузка), укажите имя проекта (например, trendradar, запомните его), загрузите любой файл для первичного создания (в дальнейшем Actions автоматически заменит его).
② Получите API Token и Account ID
API Token: аватар в правом верхнем углу → My Profile → API Tokens → Create Token → Create Custom Token, выберите разрешения
Account→Cloudflare Pages→Edit. После создания скопируйте Token (показывается только один раз).Account ID: находится в правой боковой панели страницы Workers & Pages (или в правом нижнем углу страницы Overview любого домена).
③ Добавьте 3 Secrets в репозиторий GitHub
Перейдите в Settings → Secrets and variables → Actions → New repository secret и добавьте по очереди:
Name (имя) | Secret (значение) |
| API Token, созданный на предыдущем шаге |
| ваш Cloudflare Account ID |
| имя проекта Cloudflare Pages (например, |
После настройки следующий запуск GitHub Actions автоматически выполнит развёртывание. Адрес: https://<项目名>.pages.dev.
💡 Примечание: если отсутствует хотя бы один из трёх Secrets, развёртывание Cloudflare автоматически пропускается — это не влияет на другие функции, например на push новостей. Чтобы привязать собственный домен, настройте его в Custom domains проекта Pages.
Меньше зависимости от приложений
Переход от «заложника алгоритмических рекомендаций» к «самостоятельному получению нужной информации».
Кому подходит: инвесторам, контент-мейкерам, PR-специалистам компаний, обычным пользователям, следящим за событиями.
Типичные сценарии: мониторинг биржевых инвестиций, отслеживание репутации бренда, слежение за отраслевыми новостями, получение полезной информации.
Веб-страница (отправка на почту) | Push в 飞书 | Push с AI-анализом |
|
|
|
🚀 Быстрый старт
Напоминание: сначала рекомендуется посмотреть последнюю официальную документацию, чтобы убедиться, что шаги настройки актуальны.
Выберите подходящий способ развёртывания
Ⓐ Вариант 1: Docker (рекомендуется 🔥)
Особенности: стабильнее, чем GitHub Actions; данные хранятся локально (не нужна настройка облачного хранилища)
Для кого: у вас есть свой сервер, NAS или постоянно включённый компьютер
Важно: прочитайте и поймите базовую настройку ниже, затем перейдите к инструкции по Docker для развёртывания.
Ⓑ Вариант 2: GitHub Actions (этот раздел ⬇️)
Особенности: без своего сервера; данные хранятся в удалённом облачном хранилище (рекомендуемая конфигурация)
Для кого: пользователи без сервера, использующие бесплатные ресурсы GitHub
Важно: требуется настроить облачное хранилище для полного опыта и регулярно продлевать активность
Ⓒ Вариант 3: локальное развёртывание (uv)
Особенности: запуск прямо на своей машине без Docker; подходит для разработки, отладки или пользователей без Docker
Для кого: пользователи Windows / Mac / Linux (Python предустанавливать не нужно — uv всё сделает сам)
Шаги:
1. Установите uv (если уже установлен, можно пропустить; Python предустанавливать не нужно)
# macOS / Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (PowerShell) powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"2. Клонируйте и запустите
git clone https://github.com/sansan0/TrendRadar.git cd TrendRadar uv sync # 自动安装 Python 和项目依赖 uv run python -m trendradar💡 Подсказка:
uv сам управляет версией Python, устанавливать его вручную не нужно
Пользователи Windows также могут дважды щёлкнуть
setup-windows.batдля установки зависимостейПользователи Mac могут использовать
bash setup-mac.shПеред запуском отредактируйте
config/config.yaml, указав каналы push и другие настройки, — см. базовую настройку ниже
1️⃣ Шаг 1: Получите код проекта
Нажмите зелёную кнопку [Use this template] в правом верхнем углу страницы репозитория → выберите «Create a new repository».
⚠️ Напоминание:
Все упоминания «Fork» в документации можно понимать как «Use this template»
Использование Fork может вызвать сбои в работе; подробнее см. Issue #606
2️⃣ Шаг 2: Настройте GitHub Secrets
В созданном из шаблона репозитории перейдите в Settings > Secrets and variables > Actions > New repository secret.
📌 Важные замечания (пожалуйста, прочитайте внимательно):
Одному Name соответствует один Secret: для каждого параметра нажимайте кнопку «New repository secret» и заполняйте пару «Name» и «Secret»
То, что значение не видно после сохранения, — нормально: из соображений безопасности при повторном редактировании виден только Name (имя), но не содержимое Secret (значение)
Запрещено придумывать свои имена: Name (имя) Secret должно строго соответствовать перечисленным ниже именам (например,
WEWORK_WEBHOOK_URL,FEISHU_WEBHOOK_URLи т.д.). Нельзя произвольно менять или создавать новые имена, иначе система их не распознаетМожно настроить сразу несколько платформ: система отправит уведомления на все настроенные платформы
Пример настройки:
Как показано выше, каждая строка — один параметр:
Name (имя): используйте фиксированные имена из раскрывающегося списка ниже (например,
WEWORK_WEBHOOK_URL)Secret (значение): укажите реальные данные, полученные на соответствующей платформе (например, адрес Webhook, Token и т.п.)
Конфигурация GitHub Secret (⚠️ Name должно строго совпадать):
Name (имя):
WEWORK_WEBHOOK_URL(скопируйте и вставьте это имя, не вводите вручную, чтобы не ошибиться)Secret (значение): адрес Webhook вашего бота 企业微信
Шаги настройки бота:
Настройка на телефоне:
Откройте приложение 企业微信 → войдите в нужную внутреннюю группу
Нажмите кнопку «…» в правом верхнем углу → выберите «Push-уведомления»
Нажмите «Добавить» → в поле имени введите «TrendRadar»
Скопируйте адрес Webhook, нажмите «Сохранить» и вставьте скопированное значение в GitHub Secret выше
На компьютере процесс аналогичен
Так как этот способ основан на плагин-механизме 企业微信, push-сообщения имеют формат простого текста (без markdown), но доставляются напрямую в личный WeChat — устанавливать приложение 企业微信 не нужно.
Конфигурация GitHub Secret (⚠️ Name должно строго совпадать):
Name (имя):
WEWORK_WEBHOOK_URL(скопируйте и вставьте это имя, не вводите вручную)Secret (значение): адрес Webhook вашего приложения 企业微信
Name (имя):
WEWORK_MSG_TYPE(скопируйте и вставьте это имя, не вводите вручную)Secret (значение):
text
Шаги настройки:
Выполните настройку Webhook бота 企业微信, описанную выше
Добавьте Secret
WEWORK_MSG_TYPE, установите значениеtextСледуя картинке ниже, привяжите личный WeChat
После настройки приложение 企业微信 на телефоне можно удалить
Примечания:
Используется тот же адрес Webhook, что и у бота 企业微信
Разница в формате сообщения:
text— обычный текст,markdown— расширенное форматирование (по умолчанию)В формате обычного текста автоматически удаляется весь markdown-синтаксис (жирный шрифт, ссылки и т.д.)
Внимание: прежний «飞书机器人助手 (BotBuilder)» будет отключён 30 июня 2026 года. Используйте способ групповой пользовательский бот ниже. Существующие webhook-адреса BotBuilder перестанут работать — их нужно настроить заново.
Если включён AI-анализ, push в 飞书 иногда (примерно в 5% случаев) задерживается на несколько минут (предположительно из-за проверки соответствия AI-контента на платформе).
Конфигурация GitHub Secret (⚠️ Name должно строго совпадать):
Name (имя):
FEISHU_WEBHOOK_URL(скопируйте и вставьте это имя, не вводите вручную)Secret (значение): адрес Webhook вашего пользовательского бота 飞书 (формат:
https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxx)
Шаги настройки:
Зайдите в нужную группу, в правом верхнем углу нажмите кнопку 更多 (Ещё), затем 设置 (Настройки).

В панели 设置 (Настройки) справа нажмите 群机器人 (Бот группы).

В интерфейсе 群机器人 (Бот группы) нажмите 添加机器人 (Добавить бота).
В диалоге 添加机器人 (Добавить бота) найдите и нажмите 自定义机器人 (Пользовательский бот).

Задайте аватар, имя (например, «TrendRadar 热点监控») и описание пользовательского бота, нажмите 添加 (Добавить).

Скопируйте webhook-адрес пользовательского бота и нажмите 完成 (Готово).
⚠️ Сохраняйте этот webhook-адрес в надёжном месте и не публикуйте его на GitHub, в блогах и других общедоступных сайтах — иначе после утечки адрес могут использовать для рассылки спама.

Вставьте скопированный Webhook-адрес в GitHub Secret
FEISHU_WEBHOOK_URL.
💡 После настройки вы можете нажать на изображение бота справа от названия группы, чтобы открыть страницу пользовательского бота и управлять конфигурацией.
📖 Официальная документация: Руководство по пользовательскому боту
Конфигурация GitHub Secret (⚠️ Name должно строго совпадать):
Name (имя):
DINGTALK_WEBHOOK_URL(скопируйте и вставьте это имя, не вводите вручную)Secret (значение): адрес Webhook вашего бота 钉钉
Шаги настройки бота:
Создание бота (только в ПК-версии):
Откройте ПК-клиент 钉钉 и войдите в нужную группу
Нажмите значок настроек группы (⚙️) → прокрутите вниз, найдите «Бот» и откройте
Выберите «Добавить бота» → «Пользовательский»
Настройка бота:
Задайте имя бота
Настройки безопасности:
Пользовательское ключевое слово: укажите «热点»
Завершение настройки:
Отметьте соглашение с условиями обслуживания → нажмите «Готово»
Скопируйте полученный Webhook URL
Вставьте URL в GitHub Secret
DINGTALK_WEBHOOK_URL
Примечание: в мобильной версии можно только получать сообщения; создать нового бота нельзя.
Конфигурация GitHub Secret (⚠️ Name должно строго совпадать):
Name (имя):
TELEGRAM_BOT_TOKEN(скопируйте и вставьте это имя, не вводите вручную)Secret (значение): ваш Telegram Bot Token
Name (имя):
TELEGRAM_CHAT_ID(скопируйте и вставьте это имя, не вводите вручную)Secret (значение): ваш Telegram Chat ID
Примечание: для Telegram нужно настроить два Secret. Нажмите кнопку «New repository secret» два раза, чтобы добавить их по отдельности.
Шаги настройки бота:
Создание бота:
В Telegram найдите
@BotFather(обратите внимание на регистр, наличие синей галочки и примерно 37849827 monthly users — это официальный аккаунт; остерегайтесь подделок)Отправьте команду
/newbot, чтобы создать нового ботаЗадайте имя бота (должно заканчиваться на «bot»; имена часто заняты, так что придётся придумывать разные варианты)
Получите Bot Token (пример формата:
123456789:AAHfiqksKZ8WmR2zSjiQ7_v4TMAKdiHm9T0)
Получите Chat ID:
Способ 1: через официальный API
Сначала отправьте сообщение своему боту
Перейдите по ссылке:
https://api.telegram.org/bot<你的Bot Token>/getUpdatesВ полученном JSON найдите число в
"chat":{"id":数字}
Способ 2: через сторонний инструмент
Найдите
@userinfobotи отправьте/startПолученный User ID используйте как Chat ID
Настройка на GitHub:
TELEGRAM_BOT_TOKEN: укажите Bot Token из шага 1TELEGRAM_CHAT_ID: укажите Chat ID из шага 2
Обратите внимание: чтобы предотвратить злоупотребление рассылкой, в текущей версии все получатели видят адреса электронной почты друг друга
Если у вас нет опыта настройки отправки почты таким образом, не рекомендуется пробовать
⚠️ Важная зависимость конфигурации: для push по почте требуется файл HTML-отчёта. Убедитесь, что в
config/config.yamlпараметрstorage.formats.htmlустановлен вtrue:storage: formats: sqlite: true txt: false html: true # 必须启用,否则邮件推送会失败Если установлено
false, при отправке появится ошибка:错误:HTML文件不存在或未提供: None
Конфигурация GitHub Secret (⚠️ Name должно строго совпадать):
Name (имя):
EMAIL_FROM(скопируйте и вставьте это имя, не вводите вручную)Secret (значение): адрес электронной почты отправителя
Name (имя):
EMAIL_PASSWORD(скопируйте и вставьте это имя, не вводите вручную)Secret (значение): пароль почты или код авторизации
Name (имя):
EMAIL_TO(скопируйте и вставьте это имя, не вводите вручную)Secret (значение): адрес электронной почты получателя (для нескольких получателей разделите адреса запятыми; можно указать тот же адрес, что и в EMAIL_FROM, чтобы отправить самому себе)
Name (имя):
EMAIL_SMTP_SERVER(необязательный параметр, скопируйте и вставьте это имя)Secret (значение): адрес SMTP-сервера (можно оставить пустым, система определит автоматически)
Name (имя):
EMAIL_SMTP_PORT(необязательный параметр, скопируйте и вставьте это имя)Secret (значение): порт SMTP (можно оставить пустым, система определит автоматически)
Примечание: для push по почте нужно указать как минимум 3 обязательных Secret (EMAIL_FROM, EMAIL_PASSWORD, EMAIL_TO); последние два являются необязательными.
Поддерживаемые почтовые сервисы (SMTP-конфигурация определяется автоматически):
Поставщик почты | Домен | SMTP-сервер | Порт | Шифрование |
Gmail | gmail.com | smtp.gmail.com | 587 | TLS |
QQ Почта | 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 Почта | 163.com | smtp.163.com | 465 | SSL |
126 Почта | 126.com | smtp.126.com | 465 | SSL |
Sina Почта | sina.com | smtp.sina.com | 465 | SSL |
Sohu Почта | sohu.com | smtp.sohu.com | 465 | SSL |
Tianyi Почта | 189.cn | smtp.189.cn | 465 | SSL |
Alibaba Cloud Почта | aliyun.com | smtp.aliyun.com | 465 | TLS |
Yandex Почта | yandex.com | smtp.yandex.com | 465 | TLS |
iCloud Почта | icloud.com | smtp.mail.me.com | 587 | SSL |
Автоматическое определение: при использовании указанных выше почтовых сервисов нет необходимости вручную настраивать
EMAIL_SMTP_SERVERиEMAIL_SMTP_PORT— система определит их автоматически.Обратная связь:
Если вы успешно протестировали работу с другим почтовым сервисом, сообщите об этом, открыв Issues, и я добавлю его в список поддержки
Если указанная выше конфигурация почты неверна или не работает, также откройте Issues с обратной связью, чтобы помочь улучшить проект
Особая благодарность:
Спасибо @DYZYD за добавление конфигурации Tianyi Почты (189.cn) и проведение теста отправки/получения (#291)
Спасибо @longzhenren за добавление конфигурации Alibaba Cloud Почты (aliyun.com) и проведение теста (#344)
Спасибо @ACANX за добавление конфигурации Yandex Почты (yandex.com) и проведение теста (#663)
Спасибо @Sleepy-Tianhao за добавление конфигурации iCloud Почты (icloud.com) и проведение теста (#728)
Настройка распространённых почтовых сервисов:
QQ Почта:
Войдите в веб-версию QQ Почты → Настройки → Аккаунт
Включите службу POP3/SMTP
Сгенерируйте код авторизации (16-значный буквенный)
В
EMAIL_PASSWORDукажите код авторизации, а не пароль QQ
Gmail:
Включите двухэтапную проверку
Сгенерируйте пароль приложения
В
EMAIL_PASSWORDукажите пароль приложения
163/126 Почта:
Войдите в веб-версию → Настройки → POP3/SMTP/IMAP
Включите службу SMTP
Установите код авторизации клиента
В
EMAIL_PASSWORDукажите код авторизации
Расширенная настройка: Если автоматическое определение не сработало, можно настроить SMTP вручную:
EMAIL_SMTP_SERVER: например, smtp.gmail.comEMAIL_SMTP_PORT: например, 587 (TLS) или 465 (SSL)
Если несколько получателей (обратите внимание: разделяются запятыми на английском):
EMAIL_TO="user1@example.com,user2@example.com,user3@example.com"
Два способа использования:
Способ 1: Бесплатное использование (рекомендуется новичкам) 🆓
Особенности:
✅ Не требуется регистрация аккаунта, можно использовать сразу
✅ 250 сообщений в день (достаточно для 90% пользователей)
✅ Название Topic — это и есть «пароль» (нужно выбрать название, которое сложно угадать)
⚠️ Сообщения не шифруются, не подходят для конфиденциальной информации, но подходят для неконфиденциальной информации этого проекта
Быстрый старт:
Скачайте приложение ntfy:
Android: Google Play / F-Droid
iOS: App Store
Десктоп: перейдите на ntfy.sh
Подпишитесь на тему (выберите название, которое сложно угадать):
建议格式:trendradar-{你的名字缩写}-{随机数字} 不能使用中文 ✅ 好例子:trendradar-zs-8492 ❌ 坏例子:news、alerts(太容易被猜到)Настройте GitHub Secret (⚠️ Имя (Name) должно строго совпадать):
Name (Имя):
NTFY_TOPIC(скопируйте и вставьте это имя, не вводите вручную)Secret (Значение): укажите название темы, на которую вы подписались
Name (Имя):
NTFY_SERVER_URL(необязательная настройка, скопируйте и вставьте это имя)Secret (Значение): оставьте пустым (по умолчанию используется ntfy.sh)
Name (Имя):
NTFY_TOKEN(необязательная настройка, скопируйте и вставьте это имя)Secret (Значение): оставьте пустым
Пояснение: для ntfy необходимо настроить как минимум 1 обязательный Secret (NTFY_TOPIC), остальные два — необязательные
Тест:
curl -d "测试消息" ntfy.sh/你的主题名称
Способ 2: Самостоятельный хостинг (полный контроль над конфиденциальностью) 🔒
Для кого: у кого есть сервер, кто стремится к полной конфиденциальности, обладает техническими навыками
Преимущества:
✅ Полностью открытый исходный код (Apache 2.0 + GPLv2)
✅ Полный контроль над данными
✅ Без каких-либо ограничений
✅ Нулевая стоимость
Развёртывание одной командой через Docker:
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Настройка TrendRadar:
NTFY_SERVER_URL: https://ntfy.yourdomain.com
NTFY_TOPIC: trendradar-alerts # 自托管可用简单名称
NTFY_TOKEN: tk_your_token # 可选:启用访问控制Подписка в приложении:
Нажмите «Use another server»
Введите адрес вашего сервера
Введите название темы
(Необязательно) введите учётные данные для входа
Часто задаваемые вопросы:
250 сообщений в день достаточно для большинства пользователей. При сборе данных каждые 30 минут это около 48 push-уведомлений в день — вполне достаточно.
Если вы выберете случайное, достаточно длинное название (например, trendradar-zs-8492-news), перебор практически невозможен:
У ntfy строгие ограничения скорости (1 запрос в секунду)
64 символа на выбор (A-Z, a-z, 0-9, _, -)
10-значная случайная строка имеет 64^10 возможных комбинаций (потребуются годы для взлома)
Рекомендации по выбору:
Тип пользователя | Рекомендуемый способ | Причина |
Обычный пользователь | Способ 1 (бесплатный) | Просто и быстро, достаточно |
Технический пользователь | Способ 2 (самостоятельный хостинг) | Полный контроль, без ограничений |
Пользователь с высокой частотой | Способ 3 (платный) | Посмотрите на официальном сайте сами |
Полезные ссылки:
Настройка GitHub Secret (⚠️ Имя (Name) должно строго совпадать):
Name (Имя):
BARK_URL(скопируйте и вставьте это имя, не вводите вручную)Secret (Значение): URL вашего Bark push-уведомления
О Bark:
Bark — это бесплатный инструмент push-уведомлений с открытым исходным кодом для платформы iOS, отличающийся простотой, скоростью и отсутствием рекламы.
Способы использования:
Способ 1: Использование официального сервера (рекомендуется новичкам) 🆓
Скачайте приложение Bark:
iOS: App Store
Получите push-URL:
Откройте приложение Bark
Скопируйте push-URL, отображаемый на главной странице (формат:
https://api.day.app/your_device_key)Настройте URL в GitHub Secrets в поле
BARK_URL
Способ 2: Собственный сервер (полный контроль над конфиденциальностью) 🔒
Для кого: у кого есть сервер, кто стремится к полной конфиденциальности, обладает техническими навыками
Развёртывание одной командой через Docker:
docker run -d \
--name bark-server \
-p 8080:8080 \
finab/bark-serverНастройка TrendRadar:
BARK_URL: http://your-server-ip:8080/your_device_keyПримечания:
✅ Bark использует push-уведомления APNs, максимальный размер одного сообщения — 4 КБ
✅ Поддерживается автоматическая отправка по частям, не нужно беспокоиться о слишком длинных сообщениях
✅ Формат push-уведомлений — обычный текст (синтаксис Markdown автоматически удаляется)
⚠️ Поддерживается только платформа iOS
Полезные ссылки:
Настройка GitHub Secret (⚠️ Имя (Name) должно строго совпадать):
Name (Имя):
SLACK_WEBHOOK_URL(скопируйте и вставьте это имя, не вводите вручную)Secret (Значение): URL вашего Slack Incoming Webhook
О Slack:
Slack — это инструмент для командной работы. Incoming Webhooks позволяет отправлять сообщения в каналы Slack.
Шаги настройки:
Шаг 1: Создание приложения Slack
Перейдите на страницу Slack API:
Откройте https://api.slack.com/apps?new_app=1
Если вы не вошли в систему, сначала войдите в своё рабочее пространство Slack
Выберите способ создания:
Нажмите «From scratch» (создать с нуля)
Заполните информацию о приложении:
App Name: укажите название приложения (например,
TrendRadarилиМониторинг горячих новостей)Workspace: выберите своё рабочее пространство из выпадающего списка
Нажмите кнопку «Create App»
Шаг 2: Включение Incoming Webhooks
Перейдите к Incoming Webhooks:
В левом меню найдите и нажмите «Incoming Webhooks»
Включите функцию:
Найдите переключатель «Activate Incoming Webhooks»
Переключите его с
OFFнаONСтраница автоматически обновится и отобразит новые параметры конфигурации
Шаг 3: Создание URL Webhook
Добавьте новый Webhook:
Прокрутите страницу вниз
Нажмите кнопку «Add New Webhook to Workspace»
Выберите целевой канал:
Система отобразит страницу авторизации
Выберите канал для получения сообщений из выпадающего списка (например,
#горячие_новости)⚠️ Чтобы выбрать приватный канал, сначала необходимо вступить в него
Авторизуйте приложение:
Нажмите кнопку «Allow» для завершения авторизации
Система автоматически вернёт вас на страницу конфигурации
Шаг 4: Скопируйте и сохраните URL Webhook
Просмотрите сгенерированный URL:
В области «Webhook URLs for Your Workspace»
Вы увидите только что созданный URL Webhook
Формат:
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Скопируйте URL:
Нажмите кнопку «Copy» справа от URL
Или вручную выделите и скопируйте URL
Настройте в TrendRadar:
GitHub Actions: добавьте URL в GitHub Secrets в поле
SLACK_WEBHOOK_URLЛокальное тестирование: укажите URL в поле
slack_webhook_urlфайлаconfig/config.yamlРазвёртывание через Docker: добавьте URL в переменную
SLACK_WEBHOOK_URLфайлаdocker/.env
Примечания:
✅ Поддерживается формат Markdown (автоматически преобразуется в Slack mrkdwn)
✅ Поддерживается автоматическая отправка по частям (по 4 КБ за раз)
✅ Подходит для командной работы, централизованное управление сообщениями
⚠️ URL Webhook содержит секретный ключ, никогда не публикуйте его
Предпросмотр формата сообщения:
*[第 1/2 批次]*
📊 *热点词汇统计*
🔥 *[1/3] AI ChatGPT* : 2 条
1. [百度热搜] 🆕 ChatGPT-5正式发布 *[1]* - 09时15分 (1次)
2. [今日头条] AI芯片概念股暴涨 *[3]* - [08时30分 ~ 10时45分] (3次)Полезные ссылки:
Настройка GitHub Secret (⚠️ Имя (Name) должно строго совпадать):
Name (Имя):
GENERIC_WEBHOOK_URL(скопируйте и вставьте это имя, не вводите вручную)Secret (Значение): URL вашего Webhook
Name (Имя):
GENERIC_WEBHOOK_TEMPLATE(необязательная настройка, скопируйте и вставьте это имя)Secret (Значение): строка JSON-шаблона, поддерживаются плейсхолдеры
{title}и{content}
Об универсальных Webhook:
Универсальные Webhook поддерживают любые платформы, принимающие HTTP POST-запросы, включая, но не ограничиваясь:
Discord: отправка в канал через Webhook
Matrix: отправка через Webhook-мост
IFTTT: запуск автоматизированных процессов
Собственные сервисы: любые пользовательские сервисы, поддерживающие Webhook
Примеры конфигурации:
Настройка Discord
Получите URL Webhook:
Перейдите в настройки сервера Discord → Интеграции → Webhooks
Создайте новый Webhook, скопируйте URL
Настройте шаблон:
{"content": "{content}"}Настройка GitHub Secret:
GENERIC_WEBHOOK_URL: URL Webhook DiscordGENERIC_WEBHOOK_TEMPLATE:{"content": "{content}"}
Пользовательский шаблон
Шаблон поддерживает два плейсхолдера:
{title}— заголовок сообщения{content}— содержимое сообщения
Пример шаблона:
# 默认格式(留空时使用)
{"title": "{title}", "content": "{content}"}
# Discord 格式
{"content": "{content}"}
# 自定义格式
{"text": "{content}", "username": "TrendRadar"}Примечания:
✅ Поддерживается формат Markdown (совместим с форматом WeCom)
✅ Поддерживается автоматическая отправка по частям
✅ Поддерживается настройка нескольких аккаунтов (разделяются символом
;)⚠️ Шаблон должен быть в корректном формате JSON
⚠️ Разные платформы предъявляют разные требования к формату сообщений, обратитесь к документации целевой платформы
3️⃣ Шаг 3: Ручное тестирование push-уведомлений о новостях
⚠️ Напоминание:
После выполнения шагов 1–2 немедленно проведите тест! После успешного теста при необходимости настройте конфигурацию (шаг 4)
Зайдите в свой собственный проект, а не в этот проект!
Как найти свою страницу Actions:
Способ 1: откройте главную страницу вашего форкнутого проекта и нажмите вкладку Actions вверху
Способ 2: перейдите напрямую по адресу
https://github.com/ваше_имя_пользователя/TrendRadar/actions
Пример для сравнения:
❌ Проект автора:
https://github.com/sansan0/TrendRadar/actions✅ Ваш проект:
https://github.com/ваше_имя_пользователя/TrendRadar/actions
Шаги тестирования:
Перейдите на страницу Actions вашего проекта
Найдите «Get Hot News» (должно быть именно это название), нажмите на него, затем нажмите кнопку «Run workflow» справа для запуска
Если вы не видите эту надпись, решите проблему согласно #109
Примерно через 3 минуты сообщение будет отправлено на настроенную вами платформу
⚠️ Напоминание:
Не запускайте ручное тестирование слишком часто, чтобы не сработали ограничения GitHub Actions
После нажатия Run workflow необходимо обновить страницу браузера, чтобы увидеть новую запись о запуске
4️⃣ Шаг 4: Пояснения к конфигурации (необязательно)
Конфигурация по умолчанию уже работает корректно. Если требуется индивидуальная настройка, достаточно разобраться со следующими файлами:
Файл | Назначение |
| Основной файл конфигурации: режим push-уведомлений, временное окно, список платформ, веса горячих тем и т.д. |
| Файл ключевых слов: укажите интересующие вас слова для фильтрации содержимого push-уведомлений |
| Шаблон AI-подсказки: настройка роли и аналитических параметров AI-аналитика |
| Частота выполнения: контроль периодичности запуска (⚠️ изменять с осторожностью) |
👉 Подробное руководство по настройке: Подробное описание конфигурации
5️⃣ Шаг 5: Удалённое облачное хранилище и настройка регистрации
Важное изменение в v4.0.0: введён механизм «детекции активности» — GitHub Actions требует периодической регистрации для продолжения работы.
Период работы: срок действия — 7 дней, после окончания обратного отсчёта сервис автоматически приостанавливается.
Способ продления: вручную запустите workflow «Check In» на странице Actions, чтобы сбросить 7-дневный срок действия.
Путь действий:
Actions→Check In→Run workflowКонцепция дизайна:
Если вы забыли зарегистрироваться за 7 дней, возможно, эта информация не является для вас критически важной. Своевременная пауза поможет вам отвлечься от информационного потока и дать мозгу передышку.
GitHub Actions — это ценный общедоступный вычислительный ресурс. Введение механизма регистрации направлено на предотвращение неэффективного простоя вычислительных мощностей и обеспечение распределения ресурсов действительно активным и нуждающимся пользователям. Благодарим за понимание и поддержку.
О настройке удалённого облачного хранилища (выберите в зависимости от способа развёртывания):
Пользователи GitHub Actions:
Текущее состояние: Actions при каждом запуске использует новое окружение, файлы не сохраняются. Если не настроить облачное хранилище, проект будет работать в облегчённом режиме (без инкрементальных push-уведомлений, без отслеживания истории).
Рекомендация: настройте удалённое облачное хранилище для получения полного опыта.
Пользователи Docker / локального развёртывания:
Текущее состояние: данные по умолчанию сохраняются на локальном жёстком диске.
Рекомендация: облачное хранилище необязательно, может использоваться как резервная копия на другом сервере.
⚠️ Предварительные условия (важно):
Согласно правилам платформы Cloudflare, для активации R2 необходимо привязать платёжный метод.
Цель: только для проверки личности (Verify Only), списания средств не происходит.
Оплата: поддерживаются карты с двумя валютами или PayPal для Китая.
Использование: бесплатного лимита R2 (10 ГБ хранилища/месяц) достаточно для повседневной работы этого проекта, о платной версии можно не беспокоиться.
Настройка GitHub Secret (необходимо добавить 4 пункта):
Name (Имя) | Описание Secret (Значения) |
| Название корзины (например, |
| Идентификатор ключа доступа (Access Key ID) |
| Секретный ключ доступа (Secret Access Key) |
| Конечная точка S3 API (например, для R2: |
Необязательная настройка:
Name (Имя) | Описание Secret (Значения) |
| Регион (по умолчанию |
💡 Дополнительные варианты настройки хранилища: см. Где хранятся данные?
Подробные шаги (получение учётных данных):
Перейдите в обзор R2:
Войдите в Cloudflare Dashboard.
В левой боковой панели найдите и нажмите
R2 объектное хранилище.
Создайте корзину:
Нажмите
ОбзорНажмите
Создать корзину(Create bucket) в правом верхнем углу.Введите название (например,
trendradar-data), нажмитеСоздать корзину.
Создайте API-токен:
Вернитесь на страницу Обзор.
В правом нижнем углу нажмите
Account Details, найдите и нажмитеManage(Manage R2 API Tokens).Также вы увидите
S3 API:https://<account-id>.r2.cloudflarestorage.com(это и есть S3_ENDPOINT_URL)Нажмите
Создать токен Account API.⚠️ Ключевые настройки:
Имя токена: укажите произвольное имя (например,
github-action-write).Права доступа: выберите
Администратор: чтение и запись.Указание корзины: для безопасности рекомендуется выбрать
Только для указанной корзиныи выбрать вашу корзину (например,trendradar-data).
Нажмите
Создать API-токен, немедленно скопируйте отображаемыеAccess Key IDиSecret Access Key(отображаются только один раз!).
6️⃣ Шаг 6: Включение AI-аналитики в push-уведомлениях
Это ключевая функция v5.0.0 — AI поможет вам обобщать и анализировать новости, рекомендуем попробовать.
Способ настройки:
Добавьте в GitHub Secrets (или .env / config.yaml):
AI_API_KEY: ваш API-ключ (поддерживаются DeepSeek, OpenAI и др.)AI_PROVIDER: название провайдера (например,deepseek,openai)
Всё, сложное развёртывание не требуется — при следующем push-уведомлении вы увидите интеллектуальный аналитический отчёт.
7️⃣ Шаг 7: 🎉 Развёртывание успешно!
Поздравляем! Теперь вы можете наслаждаться эффективным информационным потоком TrendRadar.
💬 Присоединяйтесь к сообществу: Подпишитесь на официальный аккаунт «硅基茶水间», делитесь своим опытом использования и продвинутыми приёмами.
8️⃣ Шаг восьмой: Продвинутый уровень: выберите своего AI-ассистента
TrendRadar предлагает два способа использования ИИ, удовлетворяющих разные потребности:
Характеристика | ✨ AI-анализ и рассылка | 🧠 AI-интеллектуальный анализ |
Режим | Пассивное получение (ежедневный дайджест) | Активный диалог (глубокое исследование) |
Сценарий | «Что сегодня важного?» | «Проанализируй изменения в ИИ-индустрии за неделю» |
Развёртывание | Минимальное (достаточно ввести Key) | Продвинутое (требуется локальный запуск/Docker) |
Клиент | Телефон | Компьютер |
👉 Вывод: Сначала используйте AI-анализ и рассылку для повседневных нужд; если вы аналитик данных или вам нужно глубокое исследование, попробуйте AI-интеллектуальный анализ.
⚙️ Подробная настройка
📖 Напоминание: В этом разделе приведены подробные инструкции по настройке. Рекомендуется сначала выполнить базовую настройку из Быстрый старт, а затем при необходимости вернуться к подробным параметрам.
1. Какие платформы я хочу отслеживать?
Место настройки: раздел platforms в config/config.yaml
Данные об источниках новостей в этом проекте получены из newsnow. Вы можете перейти на сайт, нажать [Ещё], и посмотреть, есть ли нужная вам платформа.
Конкретные добавления можно посмотреть в исходном коде проекта. В соответствии с именами файлов измените конфигурацию platforms в файле config/config.yaml:
platforms:
enabled: true # 是否启用热榜平台抓取
sources:
- id: "toutiao"
name: "今日头条"
- id: "baidu"
name: "百度热搜"
- id: "wallstreetcn-hot"
name: "华尔街见闻"
# 添加更多平台...💡 Быстрый способ: Если вы не умеете читать исходный код, можно скопировать готовую сводку конфигураций платформ
⚠️ Внимание: Чем больше платформ, тем не всегда лучше. Рекомендуется выбрать 10-15 ключевых платформ. Слишком большое количество платформ приведёт к информационной перегрузке и снизит удобство использования.
2. Что меня интересует?
В файле frequency_words.txt сообщите боту, что вы хотите видеть, и он будет следить за этим. Поддерживаются обычные слова, обязательные слова, слова-фильтры и другие возможности.
Тип синтаксиса | Символ | Назначение | Пример | Логика сопоставления |
Обычное слово | нет | Базовое сопоставление |
| Достаточно любого из них |
Обязательное слово |
| Ограничение области |
| Должно содержать одновременно |
Слово-фильтр |
| Исключение помех |
| Исключается при наличии |
Ограничение количества |
| Управление количеством отображаемых |
| Максимум 10 новостей (новое в v3.2.0) |
Глобальный фильтр |
| Глобальное исключение указанного содержимого | см. пример ниже | Фильтруется в любом случае (новое в v3.5.0) |
Регулярное выражение |
| Точное сопоставление с шаблоном |
| Сопоставление с помощью регулярного выражения (новое в v4.7.0) |
Отображаемое имя |
| Пользовательский отображаемый текст |
| Отображение имени в рассылке и HTML (новое в v4.7.0) |
2.1 Базовый синтаксис
Место настройки: config/frequency_words.txt
1. Обычные ключевые слова - базовое сопоставление
华为
OPPO
苹果Назначение: Новость будет захвачена, если заголовок содержит любое одно из этих слов
2. Обязательные слова +слово — ограничение диапазона
华为
OPPO
+手机Назначение: Новость будет захвачена только если она содержит одновременно обычное слово и обязательное слово
3. Слова-фильтры !слово — исключение помех
苹果
华为
!水果
!价格Назначение: Новости, содержащие слова-фильтры, будут исключены напрямую, даже если они содержат ключевые слова
4. Ограничение количества @число — управление количеством отображаемых (новое в v3.2.0)
特斯拉
马斯克
@5Назначение: Ограничение максимального количества отображаемых новостей для этой группы ключевых слов
Приоритет настройки: @число > глобальная конфигурация > без ограничений
5. Глобальный фильтр [GLOBAL_FILTER] — глобальное исключение указанного содержимого (новое в v3.5.0)
[GLOBAL_FILTER]
广告
推广
营销
震惊
标题党
[WORD_GROUPS]
科技
AI
华为
鸿蒙
!车Назначение: Фильтрует новости, содержащие указанные слова, в любом случае, имеет наивысший приоритет
Сценарии использования:
Фильтрация низкокачественного контента: сенсации, кликбейт, разоблачения и т.д.
Фильтрация маркетингового контента: реклама, продвижение, спонсорство и т.д.
Фильтрация конкретных тем: развлечения, сплетни (по необходимости)
Приоритет фильтрации: Глобальный фильтр > Фильтр внутри группы (!) > Сопоставление группы
Описание областей:
[GLOBAL_FILTER]: Область глобального фильтра. Слова, включённые в неё, фильтруются в любом случае.[WORD_GROUPS]: Область групп слов, сохраняет существующий синтаксис (!,+,@).Если не использовать маркеры областей, по умолчанию всё обрабатывается как группы слов (обратная совместимость).
Примеры сопоставления:
[GLOBAL_FILTER]
广告
[WORD_GROUPS]
科技
AI❌ «Реклама: выпуск новейшего технологического продукта» ← содержит глобальное слово-фильтр «реклама», отклонено напрямую
✅ «Технологическая компания выпускает новый ИИ-продукт» ← не содержит глобальных слов-фильтров, сопоставлено с группой «технологии»
✅ «Прорыв в области ИИ привлёк внимание» ← не содержит глобальных слов-фильтров, сопоставлено с «ИИ» в группе «технологии»
Примечания:
Глобальные слова-фильтры следует использовать осторожно, чтобы избежать чрезмерной фильтрации и пропуска ценного контента.
Рекомендуется ограничить количество глобальных слов-фильтров до 5-15.
Для фильтрации конкретных групп слов предпочтительно использовать слова-фильтры внутри группы (префикс
!).
6. Регулярные выражения /pattern/ — точное сопоставление с шаблоном (новое в v4.7.0)
Обычные ключевые слова используют сопоставление подстрок, что удобно в китайской среде, но в английской среде может привести к ложным совпадениям. Например, ai будет сопоставлено с ai в training.
Использование синтаксиса регулярных выражений /pattern/ позволяет добиться точного сопоставления:
/(?<![a-z])ai(?![a-z])/
人工智能Назначение: Сопоставление с помощью регулярных выражений, поддерживается весь синтаксис Python-регулярных выражений
Часто используемые шаблоны регулярных выражений:
Потребность | Написание регулярного выражения | Пояснение |
Граница английского слова |
| Сопоставление отдельного слова, например |
Не буква до и после |
| Более свободная граница, подходит для смешанных китайско-английских сценариев |
Сопоставление с начала |
| Сопоставление только заголовков, начинающихся с «breaking» |
Сопоставление с конца |
| Сопоставление только заголовков, заканчивающихся на «发布» |
Выбор одного из нескольких |
| Сопоставление любого из них (обратите внимание на экранирование |
Примеры сопоставления:
# 配置
/(?<![a-z])ai(?![a-z])/
人工智能✅ «AI is the future» ← сопоставление отдельного «AI»
✅ «你好ai这里» ← с китайскими символами до и после, сопоставление «ai»
✅ «人工智能发展迅速» ← сопоставление «人工智能»
❌ «Resistance training is important» ← «ai» в «training» не сопоставляется
❌ «The maid cleaned the room» ← «ai» в «maid» не сопоставляется
Комбинированное использование:
# 正则 + 普通词 + 过滤词
/\bai\b/
人工智能
机器学习
!广告Примечания:
Регулярные выражения автоматически включают сопоставление без учёта регистра (
re.IGNORECASE)Поддерживается JavaScript-стиль записи
/pattern/i(флаги игнорируются, так как по умолчанию уже включено игнорирование регистра)Неверный синтаксис регулярного выражения обрабатывается как обычное слово
Регулярные выражения можно использовать для обычных слов, обязательных слов (
+), слов-фильтров (!)
💡 Не умеете писать регулярные выражения? Пусть ИИ сгенерирует их за вас!
Если вы не знакомы с регулярными выражениями, вы можете попросить ChatGPT / Gemini / DeepSeek сгенерировать их. Просто скажите ИИ:
Мне нужно Python-регулярное выражение для сопоставления английского слова «ai», но не «ai» в «training». Пожалуйста, дайте просто регулярное выражение в формате
/pattern/, без дополнительных объяснений.
ИИ даст вам что-то вроде: /(?<![a-zA-Z])ai(?![a-zA-Z])/
7. Отображаемое имя => 备注 — пользовательский отображаемый текст (новое в v4.7.0)
Регулярные выражения могут быть не очень удобны при отображении в push-сообщениях и HTML-страницах. Используйте синтаксис => 备注 для установки отображаемого имени:
/(?<![a-zA-Z])ai(?![a-zA-Z])/ => AI 相关
人工智能Назначение: В push-сообщениях и HTML-страницах отображается «AI 相关» вместо сложного регулярного выражения
Синтаксический формат:
# 正则 + 显示名称
/pattern/ => 显示名称
/pattern/i => 显示名称 # 支持 flags 写法(flags 被忽略)
/pattern/=>显示名称 # => 两边空格可选
# 普通词 + 显示名称
deepseek => DeepSeek 动态Примеры сопоставления:
# 配置
/(?<![a-zA-Z])ai(?![a-zA-Z])/ => AI 相关
人工智能Исходная конфигурация | Отображение в push/HTML |
|
|
|
|
Примечания:
Отображаемое имя нужно писать только на первом слове группы.
Если несколько слов в группе имеют отображаемые имена, используется первое.
Если отображаемое имя не задано, автоматически используется объединение всех слов в группе.
🔗 Функция групп слов — важная роль разделения пустыми строками
Основное правило: разделяйте разные группы слов пустыми строками, каждая группа считается независимо
Пример конфигурации:
iPhone
华为
OPPO
+发布
A股
上证
深证
+涨跌
!预测
世界杯
欧洲杯
亚洲杯
+比赛Пояснение групп и эффект сопоставления:
Группа 1 — Новые категории телефонов:
Ключевые слова: iPhone、华为、OPPO
Обязательное слово: 发布
Эффект: должно содержать название бренда телефона и одновременно «发布»
Примеры сопоставления:
✅ «iPhone 15正式发布售价公布» ← есть «iPhone» + «发布»
✅ «华为Mate60系列发布会直播» ← есть «华为» + «发布»
✅ «OPPO Find X7发布时间确定» ← есть «OPPO» + «发布»
❌ «iPhone销量创新高» ← есть «iPhone», но нет «发布»
Группа 2 - Фондовый рынок:
Ключевые слова: A股、上证、深证
Обязательное слово: 涨跌
Слово-фильтр: 预测
Эффект: следить за реальной ситуацией на фондовом рынке, исключая прогнозный контент
Примеры сопоставления:
✅ «A股今日大幅涨跌分析» ← есть «A股» + «涨跌»
✅ «上证指数涨跌幅创新高» ← есть «上证» + «涨跌»
❌ «专家预测A股涨跌趋势» ← есть «A股» + «涨跌», но содержит «预测»
Группа 3 - Футбольные турниры:
Ключевые слова: 世界杯、欧洲杯、亚洲杯
Обязательное слово: 比赛
Эффект: следить только за новостями о матчах
📝 Советы по настройке
1. От широкого к строгому
# 第一步:先用宽泛关键词测试
人工智能
AI
ChatGPT
# 第二步:发现误匹配后,加入必须词限定
人工智能
AI
ChatGPT
+技术
# 第三步:发现干扰内容后,加入过滤词
人工智能
AI
ChatGPT
+技术
!广告
!培训2. Избегайте чрезмерной сложности
❌ Не рекомендуется: одна группа содержит слишком много слов
华为
OPPO
苹果
三星
vivo
一加
魅族
+手机
+发布
+销量
!假货
!维修
!二手✅ Рекомендуется: разбейте на несколько точных групп
华为
OPPO
+新品
苹果
三星
+发布
手机
销量
+市场2.2 Расширенная конфигурация (новое в v3.2.0)
Приоритет сортировки ключевых слов
Место настройки: config/config.yaml
report:
sort_by_position_first: false # 排序优先级配置Значение конфигурации | Правило сортировки | Сценарий применения |
| Количество горячих ↓ → Позиция в конфигурации ↑ | Следить за трендом популярности |
| Позиция в конфигурации ↑ → Количество горячих ↓ | Следить за личным приоритетом |
Пример: Порядок конфигурации A, B, C, количество горячих 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 # 每个关键词最多显示10条(0=不限制)Переменные окружения Docker:
SORT_BY_POSITION_FIRST=true
MAX_NEWS_PER_KEYWORD=10Комплексный пример:
# config.yaml
report:
sort_by_position_first: true # 按配置顺序优先
max_news_per_keyword: 10 # 全局默认每个关键词最多10条# frequency_words.txt
特斯拉
马斯克
@20 # 重点关注,显示20条(覆盖全局配置)
华为 # 使用全局配置,显示10条
比亚迪
@5 # 限制5条Конечный эффект: Отображение в порядке конфигурации: 特斯拉(20) → 华为(10) → 比亚迪(5)
3. Какой режим рассылки выбрать?
Место настройки: report.mode в config/config.yaml
report:
mode: "daily" # 可选: "daily" | "incremental" | "current"Таблица подробного сравнения
Режим | Целевая аудитория | Время рассылки | Отображаемое содержимое | Типичный сценарий использования |
Дневная сводка | 📋 Руководители/обычные пользователи | По расписанию (по умолчанию каждый час) | Все сопоставленные новости за день+ Область новых новостей | Пример: Просмотр всех важных новостей сегодня в 18:00Особенность: Полный тренд за день, не пропустите ни одного горячего событияНапоминание: Будут включены ранее отправленные новости |
Текущий рейтинг | 📰 Блогеры/создатели контента | По расписанию (по умолчанию каждый час) | Новости, сопоставленные с текущим рейтингом+ Область новых новостей | Пример: Отслеживание «какие темы сейчас самые горячие» каждый часОсобенность: В реальном времени видно изменение рейтинга популярностиНапоминание: Постоянно находящиеся в рейтинге новости будут появляться каждый раз |
Инкрементальный мониторинг | 📈 Инвесторы/трейдеры | Только при появлении новых | Новые новости, сопоставленные с частотными словами | Пример: Мониторинг «特斯拉», уведомление только при новых сообщенияхОсобенность: Ноль повторов, только впервые появившиеся новостиПодходит: Высокочастотный мониторинг, избегание информационного шума |
Пример фактического эффекта рассылки
Предположим, вы отслеживаете ключевое слово «苹果», выполнение каждый час:
Время | daily режим | current режим | incremental режим |
10:00 | Новость A, Новость B | Новость A, Новость B | Новость A, Новость B |
11:00 | Новость A, Новость B, Новость C | Новость B, Новость C, Новость D | Только Новость C |
12:00 | Новость A, Новость B, Новость C | Новость C, Новость D, Новость E | Только Новость D, Новость E |
Пояснение:
daily: Накопительное отображение всех новостей за день (A, B, C сохраняются)current: Отображение новостей текущего рейтинга (изменение рейтинга, новость D попала в рейтинг, новость A выпала)incremental: Отправка только новых новостей (избегание повторных помех)
Часто задаваемые вопросы
💡 Столкнулись с этой проблемой? 👉 «Выполняется каждый час, новости, выведенные при первом выполнении, появятся снова при следующем выполнении»
Причина: Возможно, вы выбрали режим
daily(дневная сводка) илиcurrent(текущий рейтинг)Решение: Переключитесь на режим
incremental(инкрементальный мониторинг), который отправляет только новый контент
⚠️ Важное примечание для инкрементального режима
Пользователи, выбравшие режим
incremental(инкрементальный мониторинг), обратите внимание:📌 Инкрементальный режим отправляет только при появлении новых сопоставленных новостей
Если вы долго не получаете рассылок, это может быть потому, что:
В текущий период нет новых горячих событий, соответствующих вашим ключевым словам
Конфигурация ключевых слов слишком строгая или слишком широкая
Количество отслеживаемых платформ невелико
Решения:
Решение 1: 👉 Оптимизация конфигурации ключевых слов — настройте точность ключевых слов, добавьте или измените слова для мониторинга
Решение 2: Переключение режима рассылки — используйте режим
currentилиdailyдля регулярного получения рассылокРешение 3: 👉 Добавление платформ мониторинга — добавьте больше новостных платформ, расширьте источники информации
4. Настройка алгоритма горячих тем
Место настройки: раздел advanced.weight в config/config.yaml
advanced:
weight:
rank: 0.6 # 排名权重
frequency: 0.3 # 频次权重
hotness: 0.1 # 热度权重Текущая конфигурация по умолчанию является сбалансированной
Два ключевых сценария
Сценарий «следить за реальным временем»:
advanced:
weight:
rank: 0.8 # 主要看排名
frequency: 0.1 # 不太在乎持续性
hotness: 0.1Целевая аудитория: Блогеры, маркетологи, пользователи, желающие быстро узнать самые горячие темы
Сценарий «следить за глубокими темами»:
advanced:
weight:
rank: 0.4 # 适度看排名
frequency: 0.5 # 重视当天内的持续热度
hotness: 0.1Целевая аудитория: Инвесторы, исследователи, журналисты, пользователи, нуждающиеся в глубоком анализе трендов
Метод настройки
Сумма трёх чисел должна быть равна 1.0
Что важнее, то и увеличивайте: если важен рейтинг, увеличьте
rank; если важна устойчивость, увеличьтеfrequencyРекомендуется изменять только на 0.1-0.2 за раз, наблюдайте за эффектом
Основная идея: пользователи, стремящиеся к скорости и актуальности, увеличивают вес рейтинга; пользователи, стремящиеся к глубине и стабильности, увеличивают вес частоты.
5. Как выглядят мои сообщения?
Пример рассылки
📊 Статистика горячих слов
🔥 [1/3] AI ChatGPT : 2 новости
[百度热搜] 🆕 ChatGPT-5正式发布 [1] - 09时15分 (1 раз)
[今日头条] AI芯片概念股暴涨 [3] - [08时30分 ~ 10时45分] (3 раза)
━━━━━━━━━━━━━━━━━━━
📈 [2/3] 比亚迪 特斯拉: 2 новости
[微博] 🆕 比亚迪月销量破纪录 [2] - 10时20分 (1 раз)
[抖音] 特斯拉降价促销 [4] - [07时45分 ~ 09时15分] (2 раза)
━━━━━━━━━━━━━━━━━━━
📌 [3/3] A股 股市: 1 новость
[华尔街见闻] A股午盘点评分析 [5] - [11时30分 ~ 12时00分] (2 раза)
🆕 Новые горячие новости в этом раунде (всего 2)
百度热搜 (1 новость):
ChatGPT-5正式发布 [1]
微博 (1 новость):
比亚迪月销量破纪录 [2]
Время обновления: 2025-01-15 12:30:15
Пояснение формата сообщений
Элемент формата | Пример | Значение | Пояснение |
🔥📈📌 | 🔥 [1/3] AI ChatGPT | Уровень популярности | 🔥высокая (≥10) 📈средняя (5-9) 📌обычная (<5) |
[номер/всего] | [1/3] | Позиция сортировки | Ранг текущей группы среди всех сопоставленных групп |
Частотная группа | AI ChatGPT | Группа ключевых слов | Группа из конфигурационного файла, заголовок должен содержать одно из слов |
: N новостей | : 2 новости | Количество совпадений | Общее количество новостей, сопоставленных с этой группой |
[Название платформы] | [百度热搜] | Источник | Название платформы, к которой относится новость |
🆕 | 🆕 ChatGPT-5正式发布 | Маркер нового | Впервые появившаяся горячая тема в этом раунде |
[число] | [1] | Высокий рейтинг | Горячая тема с рейтингом ≤ порога, выделена жирным красным |
[число] | [7] | Обычный рейтинг | Горячая тема с рейтингом > порога, обычное отображение |
- время | - 09时15分 | Первое время | Время первого обнаружения новости |
[время~время] | [08时30分 ~ 10时45分] | Длительность | Диапазон времени от первого появления до последнего |
(N раз) | (3 раза) | Частота появления | Общее количество появлений за период мониторинга |
Область новых | 🆕 Новые горячие новости | Сводка новых тем | Отдельное отображение новых горячих тем, появившихся в этом раунде |
6. Развёртывание Docker
Описание образов:
TrendRadar предоставляет два независимых Docker-образа, которые можно выбрать для развёртывания:
Имя образа | Назначение | Пояснение |
| Служба рассылки новостей | Периодический сбор новостей, отправка уведомлений (обязательно) |
| Служба ИИ-анализа | Поддержка протокола MCP, диалоговый ИИ-анализ (необязательно) |
💡 Рекомендация:
Нужна только функция рассылки: разверните только образ
wantcat/trendradarНужна функция ИИ-анализа: разверните оба образа
Способ 1: Использование docker compose (рекомендуется)
Создайте каталог проекта и конфигурацию:
# 克隆项目到本地 git clone https://github.com/sansan0/TrendRadar.git cd TrendRadar💡 Пояснение: Ключевая структура каталогов для Docker-развёртывания выглядит следующим образом:
当前目录/
├── config/
│ ├── config.yaml # 核心功能配置(必需)
│ ├── frequency_words.txt # 关键词配置(必需)
│ ├── timeline.yaml # 时间线配置
│ ├── ai_analysis_prompt.txt # AI 分析提示词(可选)
│ ├── ai_translation_prompt.txt # AI 翻译提示词(可选)
│ ├── ai_interests.txt # AI 兴趣过滤配置(可选)
│ ├── ai_filter/ # AI 过滤相关提示词
│ │ ├── prompt.txt
│ │ ├── extract_prompt.txt
│ │ └── update_tags_prompt.txt
│ └── custom/ # 用户自定义配置(可选)
│ ├── ai/ # 自定义 AI 提示词
│ └── keyword/ # 自定义关键词文件
└── docker/
├── .env # 敏感信息 + Docker 特有配置
└── docker-compose.yml # Docker Compose 编排文件Описание файлов конфигурации:
Принцип разделения конфигурации (оптимизация v4.6.0):
Файл
Назначение
Частота изменения
Описание
config/config.yamlОсновная конфигурация функций
Низкая
Режим отчёта, настройки push-уведомлений, формат хранения, окно push-уведомлений, переключатель AI-анализа, включение платформ и другие глобальные параметры поведения
config/frequency_words.txtКонфигурация ключевых слов
Высокая
Задайте интересующие вас горячие темы, поддерживается расширенный синтаксис: группы, регулярные выражения, псевдонимы
config/timeline.yamlКонфигурация временной шкалы
Низкая
Управляет отображением и правилами фильтрации временной шкалы новостей
config/ai_analysis_prompt.txtПромпт для AI-анализа
Средняя
Настройка роли и формата вывода AI-анализа (v5.0.0+)
config/ai_translation_prompt.txtПромпт для AI-перевода
Низкая
Шаблон промпта для AI-перевода
config/ai_interests.txtФильтр интересов AI
Средняя
Определяет правила автоматической фильтрации новостей AI на основе интересов
config/ai_filter/Промпты для AI-фильтрации
Низкая
Внутренние промпты модуля AI-фильтрации (обычно не требуют изменения)
config/custom/Пользовательские расширения
По мере необходимости
custom/ai/для пользовательских AI-промптов,custom/keyword/для пользовательских файлов ключевых словdocker/.envКонфиденциальная информация + конфигурация Docker
Низкая
Webhook URL, API-ключи, ключи S3, запланированные задачи и т.д., не отслеживается git
💡 Ключевые моменты разделения:
Поведение функций → измените
config.yaml(например, включение/выключение платформы, настройка режима push-уведомлений)Отслеживаемый контент → измените
frequency_words.txt(например, добавьте новые ключевые слова)Стиль вывода AI → измените
ai_analysis_prompt.txtилиai_translation_prompt.txtКлючи и учётные данные → измените
docker/.env(API-ключи, URL Webhook и т.д. — единое место для конфиденциальной информации)Персонализированные расширения → используйте каталог
config/custom/, чтобы избежать перезаписи при обновлении
💡 Применение изменений конфигурации: После изменения
config.yamlвыполнитеdocker compose up -dдля перезапуска контейнера.⚙️ Механизм переопределения переменных окружения (v3.0.5+)
Переменные окружения в файле
.envпереопределяют соответствующие настройки вconfig.yaml:Переменная окружения
Соответствующая конфигурация
Пример значения
Описание
WEBSERVER_PORT-
8080Порт веб-сервера
FEISHU_WEBHOOK_URLnotification.channels.feishu.webhook_urlhttps://...Webhook Feishu (несколько аккаунтов разделяются
;)AI_ANALYSIS_ENABLEDai_analysis.enabledtrue/falseВключить ли AI-анализ (новое в v5.0.0)
AI_API_KEYai.api_keysk-xxx...API-ключ AI (общий для ai_analysis и ai_translation)
AI_PROVIDERai.providerdeepseek/openai/geminiПоставщик AI
S3_*storage.remote.*-
Конфигурация удалённого хранилища (5 параметров)
Приоритет конфигурации: переменные окружения > config.yaml
Как использовать:
Измените файл
.env, заполните необходимые настройкиИли добавьте их непосредственно в разделе "Переменные окружения" в интерфейсе управления Docker на NAS/Synology
Перезапустите контейнер для применения:
docker compose up -d
Запуск сервиса:
Вариант A: Запуск всех сервисов (push-уведомления + AI-анализ)
# 拉取最新镜像 docker compose pull # 启动所有服务(trendradar + trendradar-mcp) docker compose up -dВариант B: Запуск только сервиса push-уведомлений
# 只启动 trendradar(定时抓取和推送) docker compose pull trendradar docker compose up -d trendradarВариант C: Запуск только MCP AI-анализ сервиса
# 只启动 trendradar-mcp(提供 AI 分析接口) docker compose pull trendradar-mcp docker compose up -d trendradar-mcp💡 Подсказка:
Большинству пользователей достаточно запустить
trendradarдля получения push-уведомленийЗапуск
trendradar-mcpтребуется только при использовании ChatGPT/Gemini для AI-диалогового анализаОба сервиса независимы и могут гибко комбинироваться по мере необходимости
Проверка статуса работы:
# 查看新闻推送服务日志 docker logs -f trendradar # 查看 MCP AI 分析服务日志 docker logs -f trendradar-mcp # 查看所有容器状态 docker ps | grep trendradar # 停止特定服务 docker compose stop trendradar # 停止推送服务 docker compose stop trendradar-mcp # 停止 MCP 服务
Способ 2: Локальная сборка (для разработчиков)
Если вам нужно изменить код или создать собственный образ:
# 克隆项目
git clone https://github.com/sansan0/TrendRadar.git
cd TrendRadar
# 修改配置文件
vim config/config.yaml
vim config/frequency_words.txt
# 使用构建版本的 docker compose
cd docker
cp docker-compose-build.yml docker-compose.ymlСборка и запуск сервиса:
# 选项 A:构建并启动所有服务
docker compose build
docker compose up -d
# 选项 B:仅构建并启动新闻推送服务
docker compose build trendradar
docker compose up -d trendradar
# 选项 C:仅构建并启动 MCP AI 分析服务
docker compose build trendradar-mcp
docker compose up -d trendradar-mcp💡 Пояснение параметров архитектуры:
По умолчанию собирается образ архитектуры
amd64(подходит для большинства серверов x86_64)Для сборки образа архитектуры
arm64(Apple Silicon, Raspberry Pi и т.д.) установите переменную окружения:export DOCKER_ARCH=arm64 docker compose build
Обновление образа
# 方式一:手动更新(爬虫 + MCP 镜像)
docker pull wantcat/trendradar:latest
docker pull wantcat/trendradar-mcp:latest
docker compose down
docker compose up -d
# 方式二:使用 docker compose 更新
docker compose pull
docker compose up -dДоступные образы:
Имя образа | Использование | Описание |
| Сервис push-уведомлений | Периодический сбор новостей, отправка уведомлений |
| MCP-сервис | Функция AI-анализа (опционально) |
Команды управления сервисом
# 查看运行状态
docker exec -it trendradar python manage.py status
# 手动执行一次爬虫
docker exec -it trendradar python manage.py run
# 查看实时日志
docker exec -it trendradar python manage.py logs
# 显示当前配置
docker exec -it trendradar python manage.py config
# 显示输出文件
docker exec -it trendradar python manage.py files
# Web 服务器管理(用于浏览器访问生成的报告)
docker exec -it trendradar python manage.py start_webserver # 启动 Web 服务器
docker exec -it trendradar python manage.py stop_webserver # 停止 Web 服务器
docker exec -it trendradar python manage.py webserver_status # 查看 Web 服务器状态
# 查看帮助信息
docker exec -it trendradar python manage.py help
# 重启容器
docker restart trendradar
# 停止容器
docker stop trendradar
# 删除容器(保留数据)
docker rm trendradar💡 Описание веб-сервера:
Автоматически запускается в режиме cron, доступ через браузер по адресу
http://localhost:8080для просмотра последних отчётовНавигация по каталогам для просмотра исторических отчётов (например:
http://localhost:8080/2025-xx-xx/)Порт можно настроить параметром
WEBSERVER_PORTв файле.envРучная остановка:
docker exec -it trendradar python manage.py stop_webserverРучной запуск:
docker exec -it trendradar python manage.py start_webserverСовет по безопасности: предоставляет доступ только к статическим файлам, ограничен каталогом output, привязан только к локальному доступу
Постоянное хранение данных
Сгенерированные отчёты и данные по умолчанию сохраняются в каталоге ./output, данные сохраняются даже после перезапуска или удаления контейнера.
📊 Пути доступа к веб-отчётам:
Сгенерированный HTML-отчёт за текущий день сохраняется в двух местах:
Расположение файла | Способ доступа | Сценарий использования |
| Прямой доступ с хоста | Docker-развертывание (через монтирование Volume, виден на хосте) |
| Доступ из корня | GitHub Pages (корень репозитория, Pages автоматически распознаёт) |
| Доступ к историческим отчётам | Все окружения (архив по датам) |
Пример локального доступа:
# 方式 1:通过 Web 服务器访问(推荐,Docker 环境)
# 1. 启动 Web 服务器
docker exec -it trendradar python manage.py start_webserver
# 2. 在浏览器访问
http://localhost:8080 # 访问最新报告(默认 index.html)
http://localhost:8080/html/2025-xx-xx/ # 访问指定日期的报告
# 方式 2:直接打开文件(本地环境)
open ./output/index.html # macOS
start ./output/index.html # Windows
xdg-open ./output/index.html # Linux
# 方式 3:访问历史归档
open ./output/html/2025-xx-xx/当日汇总.htmlПочему два файла index.html?
output/index.html: монтируется через Docker Volume на хост, можно открыть локальноindex.html: отправляется в репозиторий через GitHub Actions, автоматически развертывается GitHub Pages
💡 Подсказка: Оба файла идентичны по содержанию, можно использовать любой.
Поиск и устранение неисправностей
# 检查容器状态
docker inspect trendradar
# 查看容器日志
docker logs --tail 100 trendradar
# 进入容器调试
docker exec -it trendradar /bin/bash
# 验证配置文件
docker exec -it trendradar ls -la /app/config/Развертывание MCP-сервиса (функция AI-анализа)
Если вам нужна функция AI-анализа, вы можете развернуть отдельный контейнер MCP-сервиса.
Описание архитектуры:
flowchart TB
subgraph trendradar["trendradar"]
A1[定时抓取新闻]
A2[推送通知]
end
subgraph trendradar-mcp["trendradar-mcp"]
B1[127.0.0.1:3333]
B2[AI 分析接口]
end
subgraph shared["共享卷"]
C1["config/ (ro)"]
C2["output/ (ro)"]
end
trendradar --> shared
trendradar-mcp --> sharedБыстрый запуск:
Если вы уже развернули сервис, следуя Способ 1: Использование docker compose, просто запустите MCP-сервис:
cd TrendRadar/docker
docker compose up -d trendradar-mcp
# 查看运行状态
docker ps | grep trendradar-mcpОтдельный запуск MCP-сервиса (без docker compose):
# Linux/Mac
docker run -d --name trendradar-mcp \
-p 127.0.0.1:3333:3333 \
-v $(pwd)/config:/app/config:ro \
-v $(pwd)/output:/app/output:ro \
-e TZ=Asia/Shanghai \
wantcat/trendradar-mcp:latest
# Windows PowerShell
docker run -d --name trendradar-mcp `
-p 127.0.0.1:3333:3333 `
-v ${PWD}/config:/app/config:ro `
-v ${PWD}/output:/app/output:ro `
-e TZ=Asia/Shanghai `
wantcat/trendradar-mcp:latest⚠️ Внимание: При отдельном запуске убедитесь, что в текущем каталоге есть папки
config/иoutput/, и они содержат файлы конфигурации и данные новостей.
Проверка сервиса:
# 检查 MCP 服务健康状态
curl http://127.0.0.1:3333/mcp
# 查看 MCP 服务日志
docker logs -f trendradar-mcpНастройка в AI-клиенте:
После запуска MCP-сервиса настройте его в зависимости от клиента:
Cherry Studio (рекомендуется, настройка через GUI):
Настройки → MCP-серверы → Добавить
Тип:
streamableHttpURL:
http://127.0.0.1:3333/mcp
Claude Desktop / Cline (настройка через JSON):
{
"mcpServers": {
"trendradar": {
"url": "http://127.0.0.1:3333/mcp",
"type": "streamableHttp"
}
}
}💡 Совет: MCP-сервис прослушивает только локальный порт (127.0.0.1) для обеспечения безопасности. Для удалённого доступа настройте обратный прокси и аутентификацию самостоятельно.
7. Как отображается содержимое push-уведомлений?
Место настройки: разделы report и display в config/config.yaml
report:
mode: "daily" # 推送模式
display_mode: "keyword" # 显示模式(v4.6.0 新增)
rank_threshold: 5 # 排名高亮阈值
sort_by_position_first: false # 排序优先级
max_news_per_keyword: 0 # 每个关键词最大显示数量
display:
region_order: # 区域显示顺序(v5.2.0 新增)
- new_items # 新增热点区域
- hotlist # 热榜区域
- rss # RSS 订阅区域
- standalone # 独立展示区
- ai_analysis # AI 分析区域Описание общих параметров настройки
Что я хочу изменить | Какой параметр изменить | Значение по умолчанию | Описание |
Режим push-уведомлений |
|
| Определяет время и содержимое push-уведомлений, подробнее см. Подробное описание режимов push-уведомлений |
Способ группировки |
|
|
|
Выделение важного |
|
| Новости, входящие в топ-5, будут отображаться жирным шрифтом, чтобы сразу видеть самые горячие |
Правило сортировки |
|
|
|
Ограничение количества |
|
| Сколько новостей максимум показывать по каждому ключевому слову? |
Порядок отображения |
| см. выше | Изменение порядка списка управляет позицией отображения каждого раздела |
Сравнение способов группировки (display_mode)
Вы хотите видеть "какие новости по этой теме" или "какие новости на этой платформе"?
Режим | Способ группировки | Префикс заголовка | Сценарий использования |
| Агрегация по ключевым словам |
| Меня интересует "AI", хочу видеть новости об AI на всех платформах |
| Агрегация по платформам |
| Меня интересует "微博", хочу видеть новости по моим ключевым словам на 微博 |
Порядок отображения разделов (region_order)
Изменяя порядок списка display.region_order, можно управлять позицией отображения каждого раздела в push-сообщении.
Порядок по умолчанию: Новые горячие темы → Горячие списки → RSS → Отдельная область отображения → AI-анализ
Пример настройки: Хотите, чтобы AI-анализ был первым?
display:
region_order:
- ai_analysis # 移到第一行
- new_items
- hotlist
- rss
- standaloneВнимание: Раздел отображается только при выполнении двух условий:
Он присутствует в списке
region_orderСоответствующий переключатель в
display.regionsустановлен вtrue
Переключатели разделов (regions)
Управление отображением разделов в push-уведомлениях через display.regions:
display:
regions:
hotlist: true # 热榜区域(关键词匹配的热点新闻)
new_items: false # 新增热点区域(含热榜新增 + RSS 新增)
rss: true # RSS 订阅区域(关键词匹配的 RSS 内容)
standalone: false # 独立展示区(完整热榜/RSS,不受关键词过滤)
ai_analysis: true # AI 分析区域Раздел | Ключ конфигурации | Значение по умолчанию | Описание |
Горячие списки |
|
| Агрегация горячих новостей по ключевым словам |
Новые горячие темы |
|
| Новые горячие темы за этот период (включая новые в горячих списках + новые в RSS). Примечание: маркер 🆕 в разделе горячих списков не зависит от этого переключателя |
RSS |
|
| Содержимое RSS-подписок, отфильтрованное по ключевым словам. После отключения RSS-анализ пропускается, но RSS в отдельной области отображения не затрагивается |
Отдельная область отображения |
|
| Полное отображение содержимого указанных платформ/RSS, без фильтрации по ключевым словам |
AI-анализ |
|
| Сводка горячих тем, сгенерированная AI |
Приоритет сортировки (sort_by_position_first)
Предположим, вы настроили ключевые слова: 1. Tesla, 2. BYD. Фактическая популярность: BYD (10 новостей), Tesla (3 новости).
Значение конфигурации | Результат сортировки | Ваше мнение |
| BYD (10 новостей) → Tesla (3 новости) | "Кто горячее, тот и первый" |
| Tesla (3 новости) → BYD (10 новостей) | "Мой порядок настройки — это приоритет, независимо от популярности" |
Отдельная область отображения (standalone)
Сценарий: Некоторые платформы (например, 知乎热榜, HackerNews), я хочу просмотреть полностью, независимо от того, соответствуют ли они моим ключевым словам.
display:
regions:
standalone: true # 推送中展示独立展示区(关闭不影响 AI 分析)
standalone:
platforms: ["zhihu", "weibo"] # 这些平台的热榜给我完整显示
rss_feeds: ["hacker-news"] # 这些RSS源的内容给我完整显示
max_items: 20 # 最多显示多少条💡 Независимое управление отображением push-уведомлений и AI-анализом:
regions.standaloneуправляет только отображением отдельной области в push-уведомлениях. Даже если отображение в push-уведомлениях отключено, AI всё равно будет анализировать полные данные этих платформ, если в конфигурации AI включеноinclude_standalone: true. Подходит для пользователей, которые хотят, чтобы AI проводил глубокий анализ, но не хотят слишком длинных push-сообщений.
8. Когда мне приходят push-уведомления?
Место настройки: раздел schedule в config/config.yaml + config/timeline.yaml
Быстрый старт
Просто выберите один из предустановленных шаблонов в config.yaml, редактировать timeline.yaml не нужно:
schedule:
enabled: true
preset: "morning_evening" # 改这里就行Доступные предустановленные шаблоны
Имя шаблона | Описание | Поведение push-уведомлений |
| Инкрементально в течение дня + вечерняя сводка (рекомендуется) | Push при новых событиях в течение дня + вечерняя сводка за день с 19:00 до 21:00 |
| Круглосуточный мониторинг | Push при новых событиях в течение дня, без разделения на временные периоды |
| Рабочее время | Три периода в рабочие дни (утренний обзор → дневные горячие темы → вечерняя сводка), в выходные — свободные push-уведомления |
| Ночная сова | Дневной обзор + ночная сводка за весь день (с 22:00 до 01:00, пересекает полночь) |
| Полностью настраиваемый | Редактирование раздела |
Полная настройка
Если ни один из предустановленных шаблонов не подходит, вы можете отредактировать раздел custom внизу config/timeline.yaml, свободно определяя временные периоды, дневные планы и недельные сопоставления. Подробнее см. комментарии в файле timeline.yaml.
Важные примечания
⚠️ Внимание, пользователи, обновляющиеся со старых версий:
В v6.0.0 удалены старые конфигурации
notification.push_windowиai_analysis.analysis_windowИспользуйте новую систему планирования
schedule+timeline.yamlСтарый "ежедневный push-уведомление" можно заменить шаблоном
morning_eveningСтарый "push-уведомление в рабочее время" можно заменить шаблоном
office_hours
⚠️ Внимание, пользователи GitHub Actions:
Время выполнения GitHub Actions нестабильно, возможна погрешность ±15 минут
Рекомендуется оставлять запас по времени не менее 2 часов
Для точных запланированных push-уведомлений рекомендуется использовать Docker-развертывание на личном сервере
9. Как часто выполняется?
Место настройки: раздел schedule в .github/workflows/crawler.yml
on:
schedule:
- cron: "0 * * * *" # 每小时运行一次Как изменить частоту запуска?
GitHub Actions использует формат времени "Cron". Не нужно глубоко разбираться, просто скопируйте нужный код и замените.
Место настройки: раздел schedule в файле .github/workflows/crawler.yml
Я хочу... | Скопируйте эту строку кода | Описание |
Каждый час |
| Конфигурация по умолчанию, запуск в 0-ю минуту |
Каждые 30 минут |
| Запуск каждые 30 минут |
Каждый день в 8:00 |
| ⚠️ Указано |
Каждые полчаса в рабочее время |
| Соответствует времени по Москве 3:00 - 17:00 |
Три раза в день |
| Соответствует времени по Москве 3:00, 9:00, 15:00 |
⚠️ Два важных предупреждения
Разница во времени: Серверы GitHub находятся за границей и используют время UTC.
Простая арифметика: желаемое время по Москве минус 3 часа = время, которое нужно указать.
Пример: чтобы запуск был в 20:00 по Москве, в настройках нужно указать 17:00
Не слишком часто: Рекомендуемый интервал — не менее 30 минут.
Бесплатные ресурсы GitHub ограничены, слишком частый запуск может привести к ограничению аккаунта.
К тому же запуск Actions сам по себе имеет задержку в несколько минут, точный контроль не имеет смысла.
Пошаговая инструкция по изменению
В вашем репозитории GitHub найдите файл
.github/workflows/crawler.ymlНажмите кнопку ✏️ (Edit) в правом верхнем углу
Найдите строку
cron: "..."и замените содержимое кавычек на "код" из таблицы вышеНажмите зелёную кнопку Commit changes в правом верхнем углу для сохранения
10. Отправка в несколько групп/устройств
⚠️ Безопасность прежде всего
Не пишите пароли/токены прямо в
config.yaml! Если вы загрузите файл с паролями на GitHub, его увидит весь мир.Правильный подход:
Пользователи GitHub Actions: добавьте в Settings -> Secrets
Пользователи Docker: запишите в файл
.env(этот файл не будет загружен)
Как отправлять в несколько мест одновременно?
Очень просто: разделите несколько адресов точкой с запятой ;.
Пример: Предположим, у вас есть две группы Feishu, и вы хотите получать push-уведомления в обе:
Адрес группы 1:
https://.../webhook/aaaАдрес группы 2:
https://.../webhook/bbb
При настройке укажите:
https://.../webhook/aaa;https://.../webhook/bbb
Платформы с поддержкой нескольких аккаунтов
平台 | 配置方法 | 注意事项 |
飞书/钉钉/企微 | 用 | 最简单,直接串起来就行 |
Bark (iOS) | 用 | 推送到多台 iPhone |
Telegram | Token 和 ChatID 都要用 | ⚠️ 注意顺序要对应:Token1 对应 ChatID1Token2 对应 ChatID2 |
ntfy | Topic 和 Token 都要用 | 如果某个Topic不需要Token,留空即可: |
常用配置示例 (GitHub Secrets / .env)
# 飞书发给 3 个群
FEISHU_WEBHOOK_URL=https://hook1...;https://hook2...;https://hook3...
# 钉钉发给 2 个群
DINGTALK_WEBHOOK_URL=https://oapi...;https://oapi...
# Telegram 发给 2 个人 (注意一一对应)
TELEGRAM_BOT_TOKEN=tokenA;tokenB
TELEGRAM_CHAT_ID=userA;userB提示:为了防止滥用,默认限制每个平台最多推送到 3 个账号。如果需要更多,可以修改
MAX_ACCOUNTS_PER_CHANNEL配置。
11. 数据保存在哪里?
数据会存在哪里?
系统会自动帮你选择最合适的地方,你通常不需要操心:
你的运行环境 | 数据存在哪 | 说明 |
Docker / 本地运行 | 本地硬盘 | 存在项目目录下的 |
GitHub Actions | 云端存储 | 因为 GitHub Actions 运行完就会销毁环境,所以必须配置云存储(例如 Cloudflare R2)。 |
怎么配置云存储?(GitHub Actions 用户必看)
如果你是用 GitHub Actions 运行,你需要一个"云端硬盘"来存数据。例如使用 Cloudflare R2(因为有免费额度)。
在 GitHub Secrets 里添加这 5 个变量:
变量名 | 填什么 |
|
|
| 你的存储桶名字 |
| 你的 Access Key |
| 你的 Secret Key |
| 你的 R2 接口地址 |
💡 详细教程:怎么申请 R2?请看 快速开始 - 远程存储配置
数据会保存多久?
默认情况下,我们不会自动删除你的数据。但如果你觉得数据太多占空间,可以设置"自动清理"。
配置位置:config/config.yaml
storage:
local:
retention_days: 30 # 本地数据只保留 30 天 (0 表示永久)
remote:
retention_days: 30 # 云端数据只保留 30 天推送时间不对?(时区设置)
如果你身在海外,或者发现推送时间跟你的本地时间对不上,可以修改时区。
配置位置:config/config.yaml
app:
timezone: "Asia/Shanghai" # 默认是中国时间比如你在美国洛杉矶,改成:
America/Los_Angeles比如你在英国伦敦,改成:
Europe/London
12. 让 AI 帮我分析热点
AI 能帮我做什么?
开启这个功能后,AI 会像一个专业的分析师,在推送每一批新闻时:
自动阅读:阅读所有匹配到的热点新闻
深度思考:分析原本孤立的新闻之间的关联
撰写报告:在推送消息的末尾,附上一份简短深刻的"洞察报告"
包含内容:热点趋势总结、舆论风向判断、跨平台关联分析、潜在影响评估等。
怎么开启 AI 分析?
最简单的方法是通过环境变量配置(推荐 GitHub Secrets 或 .env)。
必需的配置项:
变量名 | 填什么 | 说明 |
|
| 开启开关 |
|
| 你的 API Key |
|
| 模型标识(格式: |
支持的 AI 提供商(基于 LiteLLM,支持 100+ 提供商):
提供商 | AI_MODEL 填什么 | 说明 |
DeepSeek (推荐) |
| 性价比极高,适合高频分析 |
OpenAI |
| GPT-4o 系列 |
Google Gemini |
| Gemini 系列 |
自定义 API | 任意格式 | 配合 |
💡 新特性:现已基于 LiteLLM 统一接口,支持 100+ AI 提供商,配置更简单、错误处理更完善。
可选配置项:
变量名 | 默认值 | 说明 |
| (自动) | 自定义 API 地址(如 OneAPI、本地模型) |
|
| 采样温度(0-2,越高越随机) |
|
| 最大生成 token 数 |
|
| 请求超时时间(秒) |
|
| 失败重试次数 |
进阶玩法:AI 翻译
如果你关注了国外的 RSS 源(比如 Hacker News),AI 可以帮你把内容翻译成中文推送。
配置位置:config/config.yaml
ai_translation:
enabled: true # 开启翻译
language: "Chinese" # 翻译成什么语言 (Chinese, English, Japanese...)进阶玩法:自定义 AI "人设"
觉得 AI 说话太官方?你可以修改它的提示词,让它变成你喜欢的风格(比如"毒舌评论员"、"资深投资顾问")。
修改文件:
config/ai_analysis_prompt.txt修改方法:直接用记事本打开编辑,告诉 AI 你想要什么样的分析风格。
✨ AI 智能分析
TrendRadar v3.0.0 新增了基于 MCP (Model Context Protocol) 的 AI 分析功能,让你可以通过自然语言与新闻数据对话,进行深度分析。
⚠️ 使用前必读
重要提示:AI 功能需要本地新闻数据支持
AI 分析功能不是直接查询网络实时数据,而是分析你本地已积累的新闻数据(存储在 output 文件夹中)
使用说明:
项目自带测试数据:
output目录默认包含 2025-12-21~2025-12-27 一周的热榜新闻数据,可用于快速体验 AI 功能查询限制:
✅ 只能查询已有日期范围内的数据(12月21-27日,共7天)
❌ 无法查询实时新闻或未来日期
获取最新数据:
测试数据仅供快速体验,建议自行部署项目获取实时数据
按照 快速开始 部署运行项目
等待至少 1 天积累新闻数据后,即可查询最新热点
1. 快速部署
Cherry Studio 提供 GUI 配置界面,5 分钟快速部署,复杂的部分是一键安装的。
图文部署教程:现已更新到我的公众号,回复 "mcp" 即可
详细部署教程:README-Cherry-Studio.md
部署模式说明:
STDIO 模式(推荐):一次配置后续无需重复配置,图文部署教程中仅以此模式的配置为例。
HTTP 模式(备选):如果 STDIO 模式配置遇到问题,可使用 HTTP 模式。此模式的配置方式与 STDIO 基本一致,但复制粘贴的内容就一行,不易出错。唯一需要注意的是每次使用前都需要手动启动一下服务。详细请参考 README-Cherry-Studio.md 底部的 HTTP 模式说明。
2. 学习与 AI 对话的姿势
详细对话教程:README-MCP-FAQ.md
💡 提示:实际不建议一次性问多个问题。如果你选择的 AI 模型连下图的按顺序调用都无法做到,建议换一个。
🔌 MCP 客户端
TrendRadar MCP 服务支持标准的 Model Context Protocol (MCP) 协议,可以接入各种支持 MCP 的 AI 客户端进行智能分析。
支持的客户端
注意事项:
将
/path/to/TrendRadar替换为你的项目实际路径Windows 路径使用双反斜杠:
C:\\Users\\YourName\\TrendRadar保存后记得重启
方式一:HTTP 模式
启动 HTTP 服务:
# Windows start-http.bat # Mac/Linux ./start-http.sh配置 Cursor:
项目级配置(推荐): 在项目根目录创建
.cursor/mcp.json:{ "mcpServers": { "trendradar": { "url": "http://localhost:3333/mcp", "description": "TrendRadar 新闻热点聚合分析" } } }全局配置: 在用户目录创建
~/.cursor/mcp.json(同样内容)使用步骤:
保存配置文件后重启 Cursor
在聊天界面的 "Available Tools" 中查看已连接的工具
开始使用:
搜索今天的"AI"相关新闻
方式二:STDIO 模式(推荐)
创建 .cursor/mcp.json:
{
"mcpServers": {
"trendradar": {
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
]
}
}
}Cline 配置
在 Cline 的 MCP 设置中添加:
HTTP 模式:
{
"trendradar": {
"url": "http://localhost:3333/mcp",
"type": "streamableHttp",
"autoApprove": [],
"disabled": false
}
}STDIO 模式(推荐):
{
"trendradar": {
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
],
"type": "stdio",
"disabled": false
}
}Continue 配置
编辑 ~/.continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
]
}
}
]
}
}使用示例:
分析最近7天"特斯拉"的热度变化趋势
生成今天的热点摘要报告
搜索"比特币"相关新闻并分析情感倾向MCP Inspector 是官方调试工具,用于测试 MCP 连接:
使用步骤
启动 TrendRadar HTTP 服务:
# Windows start-http.bat # Mac/Linux ./start-http.sh启动 MCP Inspector:
npx @modelcontextprotocol/inspector在浏览器中连接:
访问:
http://localhost:3333/mcp测试 "Ping Server" 功能验证连接
检查 "List Tools" 是否返回 17 个工具:
基础查询:get_latest_news, get_news_by_date, get_trending_topics
智能检索:search_news, find_related_news
高级分析:analyze_topic_trend, analyze_data_insights, analyze_sentiment, aggregate_news, compare_periods, generate_summary_report
RSS 查询:get_latest_rss, search_rss, get_rss_feeds_status
系统管理:get_current_config, get_system_status, resolve_date_range
任何支持 Model Context Protocol 的客户端都可以连接 TrendRadar:
HTTP 模式
服务地址:http://localhost:3333/mcp
基本配置模板:
{
"name": "trendradar",
"url": "http://localhost:3333/mcp",
"type": "http",
"description": "新闻热点聚合分析"
}STDIO 模式(推荐)
基本配置模板:
{
"name": "trendradar",
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
],
"type": "stdio"
}注意事项:
替换
/path/to/TrendRadar为实际项目路径Windows 路径使用反斜杠转义:
C:\\Users\\...确保已完成项目依赖安装(运行过 setup 脚本)
常见问题
检查步骤:
确认端口 3333 未被占用:
# Windows netstat -ano | findstr :3333 # Mac/Linux lsof -i :3333检查项目依赖是否安装:
# 重新运行安装脚本 # Windows: setup-windows.bat 或者 setup-windows-en.bat # Mac/Linux: ./setup-mac.sh查看详细错误日志:
uv run python -m mcp_server.server --transport http --port 3333尝试自定义端口:
uv run python -m mcp_server.server --transport http --port 33333
解决方案:
STDIO 模式:
确认 UV 路径正确(运行
which uv或where uv)确认项目路径正确且无中文字符
查看客户端错误日志
HTTP 模式:
确认服务已启动(访问
http://localhost:3333/mcp)检查防火墙设置
尝试使用 127.0.0.1 替代 localhost
通用检查:
重启客户端应用
查看 MCP 服务日志
使用 MCP Inspector 测试连接
可能原因:
数据不存在:
确认已运行过爬虫(有 output 目录数据)
检查查询日期范围是否有数据
查看 output 目录的可用日期
参数错误:
检查日期格式:
YYYY-MM-DD确认平台 ID 正确:
zhihu,weibo等查看工具文档中的参数说明
配置问题:
确认
config/config.yaml存在确认
config/frequency_words.txt存在检查配置文件格式是否正确
📚 项目相关
4 篇文章:
AI 开发:
如果你有小众需求,完全可以基于我的项目自行开发,零编程基础的也可以试试
我所有的开源项目或多或少都使用了自己写的AI辅助软件来提升开发效率,这款工具已开源
核心功能:迅速筛选项目代码喂给AI,你只需要补充个人需求即可
其余项目
📍 毛主席足迹地图 - 交互式动态展示1893-1976年完整轨迹。欢迎诸位同志贡献数据
哔哩哔哩(bilibili)评论区数据可视化分析软件
📄 许可证
GPL-3.0 License
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceA real-time hotspot monitoring and news aggregation assistant that provides AI-powered analysis of trending topics across multiple platforms via the Model Context Protocol. It enables users to track news and receive automated notifications through various services like Telegram, WeChat, and Slack.14GPL 3.0
- AlicenseAqualityNot gradedmaintenanceAn AI-powered news and trend aggregator that tracks real-time hot topics and RSS feeds with personalized filtering and summaries. It enables users to monitor global trends and receive automated reports across multiple platforms including WeChat, Telegram, and Slack.27
- AlicenseAqualityDmaintenanceAn aggregator for real-time hot topics and news from major social and financial platforms like Zhihu, Bilibili, and Wall Street News. It features an MCP server that allows AI models to fetch and analyze trending information for automated insights.17GPL 3.0
- AlicenseCqualityDmaintenanceAggregates hot trending data from 55+ platforms (e.g., Bilibili, Weibo, Zhihu) via MCP, enabling AI assistants to fetch real-time popular content.561261MIT
Related MCP Connectors
Cross-platform social media intelligence. Trend volume and growth signals. Free key at trendsmcp.ai
Trending topics, cross-platform sentiment, viral content, community pulse & brand mentions.
News sentiment scores over time, with growth for any topic. Free key at trendsmcp.ai
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/17191004/TrendRadar'
If you have feedback or need assistance with the MCP directory API, please join our Discord server


