Skip to main content
Glama

Горячий помощник, разворачиваемый за 30 секунд — попрощайтесь с бесполезным скроллингом, смотрите только те новости, которые вам действительно интересны

🌐 Официальный сайт · 📖 Официальная документация

GitHub Stars GitHub Forks License Version MCP Docker Pulls Docker Pulls RSS AI翻译 MCP Support AI分析推送 AI智能筛选

企业微信通知 个人微信通知 Telegram通知 dingtalk通知 飞书通知 邮件通知 ntfy通知 Bark通知 Slack通知 通用Webhook

GitHub Actions GitHub Pages Docker 本地部署 Cloudflare Pages

中文 | English

Цель этого проекта — лёгкость и простота развёртывания

📑 Быстрая навигация

💡 Нажмите на ссылку ниже, чтобы быстро перейти к соответствующему разделу. Для развёртывания рекомендуется начать с «Быстрого старта», а для детальной настройки — см. «Подробная конфигурация»

  • Спасибо всем, кто поставил star проекту. fork — то, что вы хотите, star — то, что хочу я. Получить и то, и другое 😍 — лучшая поддержка духа открытого кода

Благодарность ранним сторонникам

💡 Особое примечание:

  1. О списке: в таблице ниже зафиксированы сторонники на начальном этапе проекта (ангельский раунд). Из-за трудоёмкости ручного подсчёта на раннем этапе возможны пропуски или неполные записи. Если кого-то пропустили — это не намеренно, просим снисхождения.

  2. Планы на будущее: чтобы вернуть ограниченные усилия к коду и итерациям функций, с сегодняшнего дня этот список больше не ведётся вручную.

Независимо от того, есть ли ваше имя в списке, каждая ваша поддержка — это фундамент, на котором TrendRadar смог дойти до сегодняшнего дня. 🙏

Поддержка инфраструктуры

Спасибо GitHub за бесплатную инфраструктуру — это главная предпосылка, благодаря которой проект можно развернуть в один клик через fork.

Поддержка данных

Этот проект использует API проекта newsnow для получения данных с нескольких платформ. Особая благодарность автору за предоставленный сервис.

После связи автор сообщил, что беспокоиться о нагрузке на сервер не нужно, но это основано на его доброте и доверии. Просим всех:

  • Перейдите в проект newsnow и поставьте star в знак поддержки

  • При развёртывании через Docker, пожалуйста, разумно контролируйте частоту отправки, не истощайте ресурсы

Помощь в продвижении

Спасибо следующим платформам и лицам за рекомендации (в хронологическом порядке)

Поддержка зрителей

Спасибо друзьям, оказавшим финансовую поддержку. Ваша щедрость превратилась в закуски и напитки рядом с клавиатурой, сопровождая каждую итерацию проекта.

О возвращении «лайка за один юань»: С выходом версии v5.0.0 проект вступил в новый этап. Чтобы покрыть растущие расходы на API и потребление кофеина, канал «лайк за один юань» снова открыт. Каждое ваше участие превратится в Token и движущую силу в мире кода. 🚀 Перейти к поддержке

点赞人

金额

日期

备注

D*5

1.8 * 3

2025.11.24

*

1

2025.11.17

*

10

2025.11.17

R*w

10

2025.11.17

Крутой агент, брат

J*o

1

2025.11.17

Спасибо за открытый код, желаю успехов в делах

*

8.88

2025.11.16

Хороший проект, изучаю

*

1

2025.11.15

*

1.99

2025.11.15

*

8.8

2025.11.14

Спасибо за открытый код, отличный проект, поддерживаю

M*e

10

2025.11.14

Открытый код — нелёгкий труд, спасибо за работу

**

1

2025.11.14

*

88

2025.11.13

Отличный проект, спасибо за открытый код

*W

6

2025.11.13

*

1

2025.11.13

*.

1

2025.11.13

Thanks for your TrendRadar

s*y

1

2025.11.13

**

10

2025.11.13

Отличный проект, жаль, что не встретил раньше, спасибо за открытый код!

*

9.9

2025.11.13

TrendRadar супер, угощаю автора кофе~

h*p

5

2025.11.12

Поддерживаю китайские силы открытого кода, вперёд!

c*r

6

2025.11.12

a*n

5

2025.11.12

*c

1

2025.11.12

Спасибо за открытый код и обмен

*

1

2025.11.11

*

1

2025.11.10

*

10

2025.11.09

*

5

2025.11.08

*

8.80

2025.11.07

Разработка — нелёгкий труд, поддерживаю.

Q*Q

6.66

2025.11.07

Спасибо за открытый код!

C*e

1

2025.11.05

Peter Fan

20

2025.10.29

M*n

1

2025.10.27

Спасибо за открытый код

*

8.88

2025.10.23

Я новичок, несколько дней пытаюсь разобраться, но пока не получилось, прошу совета

Eason

1

2025.10.22

Ещё не разобрался, но вы делаете доброе дело

P*n

1

2025.10.20

*

1

2025.10.19

*

1

2025.10.18

*

1

2025.10.17

*😀

10

2025.10.16

Лайк

**

10

2025.10.16

*

10

2025.10.16

*

5

2025.10.14

TrendRadar

J*d

1

2025.10.14

Спасибо за ваш инструмент, очень интересно...

*H

1

2025.10.14

*O

10

2025.10.13

*

1

2025.10.13

P*g

6

2025.10.13

Ocean

20

2025.10.12

...Это просто потрясающе!!! Даже новичок может сразу использовать...

**

5.2

2025.10.2

github-yzyf1312: Да здравствует открытый код

*椿

3

2025.9.23

Вперёд, очень хорошо

*🍍

10

2025.9.21

E*f

1

2025.9.20

*

1

2025.9.20

z*u

2

2025.9.19

**

5

2025.9.17

*

1

2025.9.15

T*T

2

2025.9.15

Лайк

*

10

2025.9.10

*X

1.11

2025.9.3

*

20

2025.8.31

Спасибо от старого Туна

*

1

2025.8.30

2*D

88

2025.8.13 下午

2*D

1

2025.8.13 上午

S*o

1

2025.8.05

Поддерживаю

*

10

2025.8.04

x*x

2

2025.8.03

trendRadar — хороший проект, лайк

*

1

2025.8.01

*

5

2025.8.01

*

0.1

2025.7.30

**

10

2025.7.29

Поддерживаю

Related MCP server: TrendRadar

🪄 Спонсор

Всё в одном месте: собственная модель Doubao от ByteDance и полные версии популярных открытых SOTA-моделей, полностью покрывающие мультимодальные возможности: текст, визуальное понимание (VLM), генерацию изображений и другое. Популярные модели Seed-2.1, Seedream 5.0, GLM-5.2, DeepSeek и другие — всё в одном месте. Не только эффективное программирование, но и сложные длительные агентные задачи.

❤️ Нравится? Поддержите

Если TrendRadar когда-либо принёс вам пользу, вдохните в него энергию, чтобы он продолжал развиваться

Сумма произвольная, даже 1 юань — это поддержка открытого кода. Приветствуются комментарии при поддержке (´▽`ʃ♡ƪ)

微信赞赏 (WeChat Donate)

支付宝赞赏 (Alipay Donate)

🤝 Вторичная разработка и использование

Если вы используете или заимствуете идеи и основной код этого проекта в своём проекте, очень приветствуется указание источника в README или документации со ссылкой на этот репозиторий.

Это поможет поддержанию проекта и развитию сообщества. Спасибо за ваше уважение и поддержку! ❤️

💬 Общение и обратная связь

  • GitHub Issues: подходит для конкретных технических вопросов. При обращении, пожалуйста, предоставляйте полную информацию (скриншоты, логи ошибок и т.д.) — это поможет быстрее найти решение.

  • Общение через официальный аккаунт: рекомендуется общаться в комментариях под соответствующими статьями. Если нужно задать вопрос через бэкенд, сначала поставьте лайк/рекомендацию статье — это лучший «ключ» к двери, я чувствую эту доброту в бэкенде (´▽`ʃ♡ƪ).

  • Общение в QQ-группе: подпишитесь на официальный аккаунт и ответьте «交流群» (группа общения), чтобы присоединиться. Независимо от того, новичок вы в AI или опытный разработчик, хотите ли вы задать технический вопрос или поделиться опытом — здесь вам рады. В группе основной упор на взаимопомощь и обмен идеями; при вступлении, пожалуйста, сначала прочитайте объявление группы; при вопросах описывайте проблему чётко и прикрепляйте скриншоты — участники помогут, когда будут свободны, их практический опыт часто быстрее и полнее моего 🤝

Дружеский совет: Этот проект — открытый исходный код для обмена, а не коммерческий продукт. Относитесь к автору как к другу, а не как к службе поддержки — так общение будет эффективнее!

Подписка на официальный аккаунт

📝 Журнал обновлений

📌 Последние обновления: Журнал обновлений оригинального репозитория :

  • Подсказка: рекомендуется просматривать 【Историю обновлений】, чтобы уточнить конкретные 【функциональные возможности】

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 для проверки версии: интерфейс проверки версии поддерживает автоматический откат между несколькими CDN-источниками GitHub → jsDelivr → Cloudflare и другими, что обеспечивает стабильное получение уведомлений об обновлениях даже в китайских сетях

  • Применение переключателей областей отображения: HTML-отчёты и email теперь корректно учитывают переключатели 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 автоматически извлечёт теги и оценит каждую новость, отправляя только действительно релевантный вам контент. Если AI-фильтрация даст сбой, автоматически произойдёт откат к сопоставлению по ключевым словам — рассылка не прервётся

  • Разные способы фильтрации и направления интересов для каждого временного интервала: каждый временной интервал в Timeline теперь может независимо настраивать способ фильтрации и тип просматриваемых новостей. Например: утром — быстрая фильтрация по «технологическим ключевым словам», вечером — глубокая фильтрация по «описанию интересов в финансовом AI» — одна система, разные интервалы — разный контент

  • Область 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

  • Гибкая настройка временных интервалов: поддержка различий между рабочими днями и выходными, интервалов через полночь, дедупликации per-period once

  • Визуальный редактор конфигурации:

    • Добавлена вкладка редактирования timeline.yaml, рядом с config.yaml / frequency_words.txt

    • Выбор карточек шаблонов: переключение одним кликом, автоматическая синхронизация с schedule.preset в config.yaml

    • Недельное представление временной шкалы: горизонтальные полосы 7 дней × 24 часа, цветом различаются статусы отправки/анализа/сбора

    • Интерактивные элементы управления: переключатели, выпадающие списки, выбор времени; изменения справа синхронизируются с YAML слева в реальном времени

    • Выпадающий выбор недельного сопоставления: динамическое заполнение на основе дневного плана, перетаскивание и клики для завершения настройки расписания

  • Оптимизация стабильности AI-промпта (ai_analysis_prompt.txt v2.0.0):

    • Отдельное описание спецификации формата: правила переносов строк/тегов/нумерации/запретов вынесены из JSON value в отдельный раздел

    • Упрощён JSON-шаблон: описания полей сокращены до одного предложения + ограничение по количеству символов, уменьшена путаница в формате вывода AI

    • Убран Markdown-формат из system prompt, согласовано с инструкцией «запрет Markdown»

    • Все JSON-поля объявлены необязательными; отсутствие любого поля не вызывает ошибку — повышена отказоустойчивость

  • Новое: сводный AI-анализ отдельных секций отображения (ai_analysis.include_standalone):

    • Добавлен отдельный переключатель: при включении AI генерирует краткую сводку для каждого standalone-источника

    • Развязка 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_urlai.api_base

    • Переменная окружения AI_PROVIDER → удалена

    • Переменная окружения AI_BASE_URLAI_API_BASE

  • Примеры форматов моделей:

    • DeepSeek: deepseek/deepseek-chat

    • OpenAI: openai/gpt-4o

    • Gemini: gemini/gemini-2.5-flash

    • Anthropic: anthropic/claude-3-5-sonnet

2026/01/17 - v5.2.0

В основном см. описание в config.yaml

🌐 Функция AI-перевода

  • Многоязычный перевод: поддержка перевода содержимого рассылки на любой язык

  • Пакетный перевод: умная пакетная обработка, уменьшение количества вызовов API

  • Пользовательские промпты: поддержка настройки стиля перевода

🔧 Оптимизация архитектуры конфигурации

  • Независимая конфигурация AI-модели: анализ и перевод используют общую конфигурацию модели

  • Унификация переключателей областей: единое управление отображением областей рассылки

  • Пользовательская сортировка областей: поддержка настройки порядка отображения областей

✨ Улучшение AI-анализа

  • Встраивание AI-анализа в HTML: результаты анализа напрямую встраиваются в HTML-отчёт, используются в email-уведомлениях

  • Богато стилизованный AI-блок: карточная раскладка с градиентным синим фоном, чёткое разделение измерений анализа

  • Поддержка временной шкалы рейтинга: AI может получать точный рейтинг каждой новости в каждый момент сбора

  • Реорганизация секций (7→4): объединено в «Основная динамика горячих тем», «Общественное мнение и споры», «Аномалии и слабые сигналы», «Рекомендации по стратегии анализа»

🔧 Адаптация нескольких моделей

  • Прозрачная передача общих параметров: поддержка передачи любых расширенных параметров в API

  • Адаптация Gemini: нативная поддержка параметров, встроенное смягчение политик безопасности

🐛 Исправление ошибок

  • Исправлены некоторые известные проблемы, повышена стабильность системы

2026/01/10 - v5.0.0

Забавный эпизод разработки: Отдаю дань уважения той модели от компании C, которая сопровождала меня более двух лет, но сразу после продления подписки показала "This organization has been disabled"

✨ Рефакторинг «пяти основных секций» содержимого рассылки

В этом обновлении проведена секционная реструктуризация сообщений рассылки. Теперь содержимое рассылки чётко разделено на пять основных секций:

  1. 📊 Горячие новости: агрегированные горячие темы со всей сети, отфильтрованные по вашим ключевым словам.

  2. 📰 RSS-подписки: содержимое ваших персонализированных источников подписки, с группировкой по ключевым словам.

  3. 🆕 Новое за этот раз: новые горячие темы, обнаруженные в реальном времени с момента последнего запуска (с пометкой 🆕).

  4. 📋 Отдельная секция отображения: полный горячий список указанной платформы или RSS-источника, полностью не ограничен фильтрацией по ключевым словам.

  5. ✨ Секция 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_historyfind_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

🎉 Улучшение основных функций

  1. Поддержка рассылки на несколько аккаунтов

    • Все каналы рассылки (Feishu, DingTalk, WeCom, Telegram, ntfy, Bark, Slack) поддерживают настройку нескольких аккаунтов

    • Используйте точку с запятой ; для разделения нескольких аккаунтов, например: FEISHU_WEBHOOK_URL=url1;url2

    • Автоматическая проверка согласованности количества парных конфигураций (например, token и chat_id для Telegram)

  2. Конфигурация областей рассылки

    • Через display.region_order настраивается порядок отображения областей (в v5.2.0 заменяет прежний reverse_content_order)

    • Через display.regions управляется отображение каждой области (горячие списки, новые горячие темы, RSS, отдельная секция отображения, AI-анализ)

  3. Глобальные фильтрующие ключевые слова

    • Добавлена метка области [GLOBAL_FILTER], поддерживающая глобальную фильтрацию нежелательного контента

    • Сценарии применения: фильтрация рекламы, маркетинга, низкокачественного контента и т.д.

🐳 Оптимизация генерации HTML по двум путям в Docker

  • Исправление проблемы: решена проблема невозможности синхронизации index.html на хост-машину в среде Docker

  • Генерация по двум путям: ежедневный сводный HTML генерируется в двух местах

    • index.html (корень проекта): для доступа через GitHub Pages

    • output/index.html: монтируется через Docker Volume, доступен напрямую с хост-машины

  • Совместимость: обеспечен нормальный доступ к веб-версии отчёта в средах Docker, GitHub Actions и локального запуска

🐳 Поддержка Docker-образа MCP

  • 新增独立的 MCP 服务镜像 wantcat/trendradar-mcp

  • 支持 Docker 部署 AI 分析功能,通过 HTTP 接口(端口 3333)提供服务

  • 双容器架构:新闻推送服务与 MCP 服务独立运行,可分别扩展和重启

  • 详见 Docker 部署 - MCP 服务

🌐 支持 Web 服务器

  • 新增内置 Web 服务器,支持通过浏览器访问生成的报告

  • 通过 manage.py 命令控制启动/停止:docker exec -it trendradar python manage.py start_webserver

  • 访问地址:http://localhost:8080(端口可配置)

  • 安全特性:静态文件服务、目录限制、本地访问

  • 支持自动启动和手动控制两种模式

📖 文档优化

🔧 升级说明

  • GitHub Fork 用户:更新 main.pyconfig/config.yaml(新增多账号推送支持,无需修改现有配置)

  • 多账号推送:新功能,默认不启用,现有单账号配置不受影响

2025/11/26 - mcp-v1.0.3

MCP 模块更新:

  • 新增日期解析工具 resolve_date_range,解决 AI 模型计算日期不一致的问题

  • 支持自然语言日期表达式解析(本周、最近7天、上月等)

  • 工具总数从 13 个增加到 14 个

2025/11/28 - v3.4.1

🔧 格式优化

  1. Bark 推送增强

    • Bark 现支持 Markdown 渲染

    • 启用原生 Markdown 格式:粗体、链接、列表、代码块等

    • 移除纯文本转换,充分利用 Bark 原生渲染能力

  2. Slack 格式精准化

    • 使用专用 mrkdwn 格式处理分批内容

    • 提升字节大小估算准确性(避免消息超限)

    • 优化链接格式:<url|text> 和加粗语法:*text*

  3. 性能提升

    • 格式转换在分批过程中完成,避免二次处理

    • 准确估算消息大小,减少发送失败率

🔧 升级说明

  • GitHub Fork 用户:更新 main.pyconfig.yaml

2025/11/25 - v3.4.0

🎉 新增 Slack 推送支持

  1. 团队协作推送渠道

    • 支持 Slack Incoming Webhooks(全球流行的团队协作工具)

    • 消息集中管理,适合团队共享热点资讯

    • 支持 mrkdwn 格式(粗体、链接等)

  2. 多种部署方式

    • GitHub Actions:配置 SLACK_WEBHOOK_URL Secret

    • Docker:环境变量 SLACK_WEBHOOK_URL

    • 本地运行:config/config.yaml 配置文件

📖 详细配置教程快速开始 - Slack 推送

  • 优化 setup-windows.bat 和 setup-windows-en.bat 一键安装 MCP 的体验

🔧 升级说明

  • GitHub Fork 用户:更新 main.pyconfig/config.yaml.github/workflows/crawler.yml

2025/11/24 - v3.3.0

🎉 新增 Bark 推送支持

  1. iOS 专属推送渠道

    • 支持 Bark 推送(基于 APNs,iOS 平台)

    • 免费开源,简洁高效,无广告干扰

    • 支持官方服务器和自建服务器两种方式

  2. 多种部署方式

    • GitHub Actions:配置 BARK_URL Secret

    • Docker:环境变量 BARK_URL

    • 本地运行:config/config.yaml 配置文件

📖 详细配置教程快速开始 - Bark 推送

🐛 Bug 修复

  • 修复 config.yamlntfy_server_url 配置不生效的问题 (#345)

🔧 升级说明

  • GitHub Fork 用户:更新 main.pyconfig/config.yaml.github/workflows/crawler.yml

2025/11/23 - v3.2.0

🎯 新增高级定制功能

  1. 关键词排序优先级配置

    • 支持两种排序策略:热度优先 vs 配置顺序优先

    • 满足不同使用场景:热点追踪 or 个性化关注

  2. 显示数量精准控制

    • 全局配置:统一限制所有关键词显示数量

    • 单独配置:使用 @数字 语法为特定关键词设置限制

    • 有效控制推送长度,突出重点内容

📖 详细配置教程关键词配置 - 高级配置

🔧 升级说明

  • GitHub Fork 用户:更新 main.pyconfig/config.yaml

2025/11/18 - mcp-v1.0.2

MCP 模块更新:

  • 优化查询今日新闻却可能错误返回过去日期的情况

2025/11/22 - v3.1.1

  • 修复数据异常导致的崩溃问题:解决部分用户在 GitHub Actions 环境中遇到的 'float' object has no attribute 'lower' 错误

  • 新增双重防护机制:在数据获取阶段过滤无效标题(None、float、空字符串),同时在函数调用处添加类型检查

  • 提升系统稳定性,确保在数据源返回异常格式时仍能正常运行

升级说明(GitHub Fork 用户):

  • 必须更新:main.py

  • 建议使用小版本升级方式:复制替换上述文件

2025/11/20 - v3.1.0

  • 新增个人微信推送支持:企业微信应用可推送到个人微信,无需安装企业微信 APP

  • 支持两种消息格式:markdown(企业微信群机器人)和 text(个人微信应用)

  • 新增 WEWORK_MSG_TYPE 环境变量配置,支持 GitHub Actions、Docker、docker compose 等多种部署方式

  • text 模式自动清除 Markdown 语法,提供纯文本推送效果

  • 详见快速开始中的「个人微信推送」配置说明

升级说明(GitHub Fork 用户):

  • 必须更新:main.pyconfig/config.yaml

  • 可选更新:.github/workflows/crawler.yml(如使用 GitHub Actions 部署)

  • 建议使用小版本升级方式:复制替换上述文件

2025/11/12 - v3.0.5

  • 修复邮件发送 SSL/TLS 端口配置逻辑错误

  • 优化邮箱服务商(QQ/163/126)默认使用 465 端口(SSL)

  • 新增 Docker 环境变量支持:核心配置项(enable_crawlerreport_modepush_window 等)支持通过环境变量覆盖,解决 NAS 用户修改配置文件不生效的问题(详见 🐳 Docker 部署 章节)

2025/10/26 - mcp-v1.0.1

MCP 模块更新:

  • 修复日期查询参数传递错误

  • 统一所有工具的时间参数格式

2025/10/31 - v3.0.4

  • 解决飞书因推送内容过长而产生的错误,实现了分批推送

2025/10/23 - v3.0.3

  • 扩大 ntfy 错误信息显示范围

2025/10/21 - v3.0.2

  • 修复 ntfy 推送编码问题

2025/10/20 - v3.0.0

重大更新 - AI 分析功能上线

  • 核心功能

    • 新增基于 MCP (Model Context Protocol) 的 AI 分析服务器

    • 支持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 识别:自动识别 Gmail、QQ邮箱、Outlook、网易邮箱等 10+ 种邮箱服务商配置

  • HTML 精美格式:邮件内容采用与网页版相同的 HTML 格式,排版精美,移动端适配

  • 批量发送支持:支持多个收件人,用逗号分隔即可同时发送给多人

  • 自定义 SMTP:可自定义 SMTP 服务器和端口

  • 修复Docker构建网络连接问题

使用说明

  • 适用场景:适合需要邮件归档、团队分享、定时报告的用户

  • 支持邮箱:Gmail、QQ邮箱、Outlook/Hotmail、163/126邮箱、新浪邮箱、搜狐邮箱等

更新提示

  • 此次更新的内容比较多,如果想升级,建议采用【大版本升级】

2025/09/17 - v2.2.0

  • 新增一键保存新闻图片功能,让你轻松分享关注的热点

使用说明

  • 适用场景:当你按照教程开启了网页版功能后(GitHub Pages)

  • 使用方法:用手机或电脑打开该网页链接,点击页面顶部的"保存为图片"按钮

  • 实际效果:系统会自动将当前的新闻报告制作成一张精美图片,保存到你的手机相册或电脑桌面

  • 分享便利:你可以直接把这张图片发给朋友、发到朋友圈,或分享到工作群,让别人也能看到你发现的重要资讯

2025/09/13 - v2.1.2

  • 解决钉钉的推送容量限制导致的新闻推送失败问题(采用分批推送)

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,不要公开,不要公开,不要公开

  • 如果你以 fork 的方式将本项目部署在 GitHub 上,请将 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

修复问题:

  1. docker 的 shell 脚本的换行符为 CRLF 导致的执行异常问题

  2. frequency_words.txt 为空时,导致新闻发送也为空的逻辑问题

  • 修复后,当你选择 frequency_words.txt 为空时,将推送所有新闻,但受限于消息推送大小限制,请做如下调整

    • 方案一:关闭手机推送,只选择 Github Pages 布置(这是能获得最完整信息的方案,将把所有平台的热点按照你自定义的热搜算法进行重新排序)

    • 方案二:减少推送平台,优先选择企业微信Telegram,这两个推送我做了分批推送功能(因为分批推送影响推送体验,且只有这两个平台只给一点点推送容量,所以才不得已做了分批推送功能,但至少能保证获得的信息完整)

    • 方案三:可与方案二结合,模式选择 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

功能新增:增加增量推送(在 main.py 头部配置 FOCUS_NEW_ONLY),该开关只关心新话题而非持续热度,只在有新内容时才发通知。

修复问题: 某些情况下,由于新闻本身含有特殊符号导致的偶发性排版异常。

2025/06/23 - v1.3.0

企业微信 和 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 ,让我快速完成各平台适配(虽然代码更多冗余了~

  1. 支持 telegram ,企业微信,钉钉推送渠道, 支持多渠道配置和同时推送

2025/06/18 - v1.1.0

200 star⭐ 了, 继续给大伙儿助兴~近期,在我的"怂恿"下,挺多人在我公众号点赞分享推荐助力了我,我都在后台看见了具体账号的鼓励数据,很多都成了天使轮老粉(我玩公众号才一个多月,虽然注册是七八年前的事了哈哈,属于上车早,发车晚),但因为你们没有留言或私信我,所以我也无法一一回应并感谢支持,在此一并谢谢!

  1. 重要的更新,加了权重,你现在看到的新闻都是最热点最有关注度的出现在最上面

  2. 更新文档使用,因为近期更新了很多功能,而且之前的使用文档我偷懒写的简单(见下面的 ⚙️ frequency_words.txt 配置完整教程)

2025/06/16 - v1.0.0

  1. 增加了一个项目新版本更新提示,默认打开,如要关掉,可以在 main.py 中把 "FEISHU_SHOW_VERSION_UPDATE": True 中的 True 改成 False 即可

2025/06/13+14

  1. 去掉了兼容代码,之前 fork 的同学,直接复制代码会在当天显示异常(第二天会恢复正常)

  2. feishu 和 html 底部增加一个新增新闻显示

2025/06/09

100 star⭐ 了,写个小功能给大伙儿助助兴 frequency_words.txt 文件增加了一个【必须词】功能,使用 + 号

  1. 必须词语法如下:
    唐僧或者猪八戒必须在标题里同时出现,才会收录到推送新闻中

+唐僧
+猪八戒
  1. 过滤词的优先级更高:
    如果标题中过滤词匹配到唐僧念经,那么即使必须词里有唐僧,也不显示

+唐僧
!唐僧念经

2025/06/02

  1. 网页飞书消息支持手机直接跳转详情新闻

  2. 优化显示效果 + 1

2025/05/26

  1. 飞书消息显示效果优化

✨ 核心功能

全网热点聚合

  • 知乎

  • 抖音

  • bilibili 热搜

  • 华尔街见闻

  • 贴吧

  • 百度热搜

  • 财联社热门

  • 澎湃新闻

  • 凤凰网

  • 今日头条

  • 微博

默认监控 11 个主流平台,也可自行增加额外的平台

💡 详细配置教程见 配置详解 - 平台配置

RSS 订阅源支持(v4.5.0 新增)

支持 RSS/Atom 订阅源抓取,按关键词分组统计(与热榜格式一致):

  • 统一格式:RSS 与热榜使用相同的关键词匹配和显示格式

  • 简单配置:直接在 config.yaml 中添加 RSS 源

  • 合并推送:热榜和 RSS 合并为一条消息推送

  • 新鲜度过滤:自动过滤超过指定天数的旧文章,避免重复推送。支持全局默认天数和单源独立设置

💡 RSS 使用与热榜相同的 frequency_words.txt 进行关键词过滤

可视化配置编辑器

提供基于 Web 的图形化配置界面,无需手动编辑 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

内容顺序配置

通过 display.region_order 调整各区域(热榜、新增热点、RSS、独立展示区、AI 分析)的显示顺序;通过 display.regions 控制各区域是否显示(v5.2.0)

见配置文件

显示模式切换

keyword=按关键词分组,platform=按平台分组(v4.6.0 新增)

keyword

💡 详细配置教程见 推送内容怎么显示?什么时候给我推送?

精准内容筛选

设置个人关键词(如:AI、比亚迪、教育政策),只推送相关热点,过滤无关信息

💡 基础配置教程关键词配置 - 基础语法

💡 高级配置教程关键词配置 - 高级配置

💡 也可以不做筛选,完整推送所有热点(将 frequency_words.txt 留空)

AI 智能筛选新闻(v6.5.0 新增)

用自然语言描述你的兴趣,AI 自动分类新闻,替代传统关键词匹配

  • Описание интересов на естественном языке: в ai_interests.txt запишите интересующие вас направления повседневным языком, без необходимости изучать синтаксис ключевых слов

  • Двухэтапная интеллектуальная обработка: ИИ сначала извлекает структурированные теги из описания интересов, затем пакетно классифицирует и оценивает новости по тегам

  • Управление порогом оценки: с помощью ai_filter.min_score точно контролируйте качество推送,推送 только новости с высокой релевантностью

  • Автоматический откат: при сбое ИИ-фильтрации автоматически выполняется откат к сопоставлению по ключевым словам, обеспечивая бесперебойную推送

  • Интеллектуальное обновление тегов: при изменении интересов ИИ автоматически оценивает масштаб изменений и решает, выполнять инкрементальную или полную переклассификацию

  • Гибкое переключение: filter.method поддерживает два режима — keyword (по умолчанию) и ai, Timeline может переопределять по временным интервалам

  • Персонализация по времени: в разные временные интервалы можно использовать разные файлы ключевых слов или описания интересов для ИИ. Например, утром использовать «технологический словарь» для быстрой фильтрации, а вечером — «финансовые интересы» для глубокой ИИ-фильтрации

# config.yaml 快速启用示例
filter:
  method: ai          # keyword(默认)| ai
ai_filter:
  min_score: 6         # 推送最低分数阈值(1-10)

💡 ИИ-фильтрация и ИИ-анализ/перевод используют общую конфигурацию модели, достаточно один раз настроить ai.api_key

Анализ трендов горячих тем

Отслеживание изменений популярности новостей в реальном времени, чтобы вы знали не только «что в тренде», но и «как развивается тренд»

  • Отслеживание по временной шкале: запись полного временного интервала от первого появления каждой новости до последнего

  • Изменение популярности: статистика изменения рейтинга и частоты появления новостей в разные периоды времени

  • Обнаружение новых тем: выявление новых горячих тем в реальном времени, мгновенное уведомление с пометкой 🆕

  • Анализ устойчивости: различие между разовыми горячими темами и глубокими новостями, которые продолжают развиваться

  • Сравнение между платформами: рейтинг одной и той же новости на разных платформах, чтобы увидеть различия во внимании СМИ

💡 Описание формата推送 см. в Описание формата сообщений

Персонализированный алгоритм горячих тем

Больше не нужно следовать за алгоритмами разных платформ — TrendRadar заново систематизирует горячие темы по всему интернету

💡 Три соотношения можно настраивать, подробнее см. Подробная конфигурация — Настройка весов горячих тем

Многоканальная推送 на несколько аккаунтов

Поддержка WeChat Work (+ схема推送 в личный WeChat), Feishu, DingTalk, Telegram, Email, ntfy, Bark, Slack, универсальный Webhook (можно подключить Discord, IFTTT и любые другие платформы) — сообщения доставляются прямо на телефон и почту

💡 Подробные инструкции по настройке см. в 推送 на несколько групп/устройств

ИИ-перевод на несколько языков (новое в v5.2.0)

Перевод推送-контента на любой язык, устраняя языковые барьеры — будь то чтение внутренних горячих тем или подписка на зарубежные новости через RSS, всё доступно на родном языке

  • Перевод в один клик: установите ai_translation.enabled: true и целевой язык в config.yaml

  • Поддержка нескольких языков: поддерживаются English, Korean, Japanese, French и любые другие языки

  • Интеллектуальная пакетная обработка: автоматическая пакетная обработка перевода, сокращение количества вызовов API и экономия средств

  • Настраиваемый стиль: настройте стиль перевода и терминологию через ai_translation_prompt.txt

  • Общая конфигурация модели: использует общие настройки модели из секции ai с функцией ИИ-анализа

# config.yaml 快速启用示例
ai_translation:
  enabled: true
  language: "English"  # 翻译目标语言

💡 Функция перевода и функция ИИ-анализа используют общую конфигурацию модели — достаточно один раз настроить ai.api_key, чтобы использовать обе функции

Справочник по RSS-источникам: ниже приведены подборки RSS-каналов, которые можно использовать по мере необходимости

  • awesome-tech-rss — блоги и СМИ о технологиях, стартапах и программировании

  • awesome-rss-feeds — подборка RSS-каналов ведущих мировых новостных СМИ

⚠️ Некоторые зарубежные материалы могут затрагивать чувствительные темы, и ИИ-модель может отказаться переводить их. Рекомендуется отбирать источники в соответствии с реальными потребностями

Расширение браузера для HTML-отчётов (новое в v6.6.0)

При открытии推送 HTML-отчёта в браузере автоматически активируется расширенный режим (почтовые клиенты не затрагиваются):

  • Широкоэкранный режим: на десктопе автоматически переключается на макет шириной 1200px, максимально используя пространство экрана

  • Быстрое переключение вкладок: группы ключевых слов и отдельные секции поддерживают навигацию по вкладкам, избавляя от прокрутки длинных страниц

  • Тёмный режим: переключение на тёмную тему в один клик, автоматическое запоминание предпочтений

  • Поиск в реальном времени: нажмите / для вызова строки поиска, мгновенная фильтрация заголовков новостей

  • Копирование в один клик: наведите курсор на номер новости, чтобы скопировать заголовок и ссылку

  • Горячие клавиши: W — широкий экран, D — тёмный режим, / — поиск, ? — просмотр всех горячих клавиш

💡 Все расширенные функции основаны на прогрессивном улучшении — почтовые клиенты по-прежнему отображают исходный макет 600px, без регрессий

Гибкая архитектура хранения (крупное обновление v4.0.0)

Поддержка нескольких бэкендов хранения:

  • Удалённое облачное хранилище: по умолчанию в среде GitHub Actions, поддержка протокола, совместимого с S3 (R2/OSS/COS и т.д.), данные хранятся в облаке, не загрязняя репозиторий

  • Локальная база данных SQLite: по умолчанию в Docker/локальной среде, полный контроль над данными

  • Автоматический выбор бэкенда: интеллектуальное переключение способа хранения в зависимости от среды выполнения

💡 Подробное описание см. в Где хранятся данные?

Развёртывание на нескольких платформах

  • GitHub Actions: автоматический сбор по расписанию + удалённое облачное хранилище (требуется периодическое продление)

  • Docker: поддержка многоплатформенных контейнеров, локальное хранение данных

  • Локальный запуск: запуск напрямую на Windows/Mac/Linux

ИИ-анализ и推送 (новое в v5.0.0)

Использование больших ИИ-моделей для глубокого анализа推送-контента, автоматическая генерация отчётов об анализе горячих тем

  • Интеллектуальный анализ: автоматический анализ трендов горячих тем, популярности ключевых слов, межплатформенных связей, потенциального влияния

  • Несколько провайдеров: на основе единого интерфейса LiteLLM, поддержка 100+ ИИ-провайдеров (DeepSeek, OpenAI, Gemini, Anthropic, локальный Ollama и т.д.), а также автоматическое переключение на резервные модели

  • Независимый режим анализа: область анализа ИИ может отличаться от推送 —推送 отправляет только новые сообщения (чтобы не беспокоить), но ИИ может анализировать все новости за день (для полной картины трендов)

  • Гибкая推送: можно выбрать только исходный контент, только ИИ-анализ или оба варианта

  • Настраиваемые промпты: настройка угла анализа через config/ai_analysis_prompt.txt

💡 Подробные инструкции по настройке см. в Позвольте ИИ анализировать горячие темы

Отдельная область отображения (новое в v5.0.0)

Полное отображение горячих рейтингов для указанных платформ, не зависящее от фильтрации по ключевым словам

  • Полный рейтинг: полное отображение горячих рейтингов указанных платформ, подходит для пользователей, желающих видеть полный рейтинг

  • Отдельное отображение RSS: контент RSS-источников может отображаться полностью, без ограничений по ключевым словам

  • Глубокий ИИ-анализ: можно независимо включить ИИ-анализ трендов полного рейтинга, без необходимости отображать его в推送

  • Гибкая настройка: поддержка настройки отображаемых платформ, RSS-источников, максимального количества записей

💡 Подробные инструкции по настройке см. в Как отображается推送-контент? — Отдельная область отображения

ИИ-интеллектуальный анализ (новое в v3.0.0)

Система диалогового анализа на основе протокола MCP (Model Context Protocol), позволяющая глубоко анализировать новостные данные на естественном языке

💡 Совет по использованию: для ИИ-функций требуются локальные новостные данные

  • Проект включает тестовые данные, можно сразу опробовать функции

  • Рекомендуется самостоятельно развернуть и запустить проект для получения более актуальных данных

Подробнее см. ИИ-интеллектуальный анализ

Веб-развёртывание

После запуска в корневом каталоге создаётся 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 DashboardWorkers & PagesCreatePages → выберите Upload assets (прямая загрузка), укажите имя проекта (например, trendradar, запомните его), загрузите любой файл для завершения первого создания (в дальнейшем Actions будет автоматически перезаписывать).

② Получение API Token и Account ID

  • API Token: аватар в правом верхнем углу → My ProfileAPI TokensCreate TokenCreate Custom Token, выберите разрешение AccountCloudflare PagesEdit, после создания скопируйте Token (отображается только один раз).

  • Account ID: можно найти на правой боковой панели страницы Workers & Pages (или в правом нижнем углу страницы Overview любого домена).

③ Добавление 3 Secrets в репозиторий GitHub

Перейдите в SettingsSecrets and variablesActionsNew repository secret репозитория и добавьте по очереди:

Name (имя)

Secret (значение)

CLOUDFLARE_API_TOKEN

API Token, созданный на предыдущем шаге

CLOUDFLARE_ACCOUNT_ID

Ваш Cloudflare Account ID

CLOUDFLARE_PROJECT_NAME

Имя проекта Cloudflare Pages (например, trendradar)

После настройки следующий запуск GitHub Actions автоматически выполнит развёртывание, адрес доступа: https://<имя_проекта>.pages.dev.

💡 Примечание: если отсутствует любой из трёх Secrets, развёртывание Cloudflare будет автоматически пропущено, это не повлияет на другие функции, такие как推送 новостей; для привязки собственного домена настройте его в разделе Custom domains проекта Pages.

Снижение зависимости от приложений

Переход от «заложника алгоритмических рекомендаций» к «активному получению нужной информации»

Для кого: инвесторы, блогеры, PR-специалисты компаний, обычные пользователи, интересующиеся текущими событиями

Типичные сценарии: мониторинг фондового рынка, отслеживание репутации бренда, наблюдение за отраслевыми событиями, получение жизненной информации

Веб-эффект (эффект推送 на почту)

Эффект推送 в Feishu

Эффект ИИ-анализа推送

Веб-эффект

Эффект推送 в Feishu

Эффект ИИ-анализа推送

🚀 Быстрый старт

Напоминание: рекомендуется сначала просмотреть последнюю официальную документацию, чтобы убедиться, что шаги настройки актуальны.

Выберите подходящий способ развёртывания

Ⓐ Вариант 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, ручная установка Python не требуется

    • Пользователи Windows также могут дважды щёлкнуть setup-windows.bat для установки зависимостей в один клик

    • Пользователи Mac могут использовать bash setup-mac.sh

    • Перед запуском отредактируйте config/config.yaml, заполнив каналы推送 и другие настройки, следуя базовому процессу настройки ниже

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 вашего бота WeChat Work

Шаги настройки бота:

Настройка на мобильном устройстве:

  1. Откройте приложение WeChat Work → войдите в целевой внутренний групповой чат

  2. Нажмите кнопку «…» в правом верхнем углу → выберите «推送 сообщений»

  3. Нажмите «Добавить» → введите имя «TrendRadar»

  4. Скопируйте адрес Webhook, нажмите «Сохранить», скопированное содержимое настройте в GitHub Secret выше

Процесс настройки на ПК аналогичен

Поскольку эта схема основана на плагинном механизме WeChat Work, формат推送 — обычный текст (без markdown-форматирования), но сообщения доставляются напрямую в личный WeChat, без установки приложения WeChat Work.

Конфигурация GitHub Secret (⚠️ Name должен строго совпадать):

  • Name (имя): WEWORK_WEBHOOK_URL (скопируйте и вставьте это имя, не вводите вручную)

  • Secret (значение): адрес Webhook вашего приложения WeChat Work

  • Name (имя): WEWORK_MSG_TYPE (скопируйте и вставьте это имя, не вводите вручную)

  • Secret (значение): text

Шаги настройки:

  1. Завершите настройку Webhook бота WeChat Work выше

  2. Добавьте Secret WEWORK_MSG_TYPE, значение — text

  3. Следуйте инструкциям на изображении ниже, чтобы привязать личный WeChat

  4. После настройки приложение WeChat Work на телефоне можно удалить

Пояснение:

  • Используется тот же адрес Webhook, что и для бота WeChat Work

  • Разница в формате сообщения: text — обычный текст, markdown — форматированный текст (по умолчанию)

  • Обычный текстовый формат автоматически удаляет весь markdown-синтаксис (жирный шрифт, ссылки и т.д.)

Внимание: прежний «Помощник бота Feishu (BotBuilder)» будет отключён 30 июня 2026 года. Используйте способ настраиваемого бота группы ниже. Существующие webhook-адреса BotBuilder станут недействительными, потребуется перенастройка.

При включённом ИИ-анализе推送 Feishu может иногда (примерно в 5% случаев) задерживаться на несколько минут (предположительно из-за проверки соответствия ИИ-сгенерированного контента платформой).

Конфигурация GitHub Secret (⚠️ Name должен строго совпадать):

  • Name (имя): FEISHU_WEBHOOK_URL (скопируйте и вставьте это имя, не вводите вручную)

  • Secret (значение): адрес Webhook вашего настраиваемого бота Feishu (формат: https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxx)

Шаги настройки:

  1. Войдите в целевую группу, нажмите кнопку Ещё в правом верхнем углу группы и выберите Настройки.

Вход в настройки группы

  1. В интерфейсе Настройки справа нажмите Боты группы.

Нажмите «Боты группы»

  1. В интерфейсе Боты группы нажмите Добавить бота.

  2. В диалоговом окне Добавить бота найдите и нажмите Настраиваемый бот.

Выбор настраиваемого бота

  1. Настройте аватар, имя (например, «TrendRadar мониторинг горячих тем») и описание настраиваемого бота, затем нажмите Добавить.

Настройка информации о боте

  1. Получите webhook-адрес настраиваемого бота и нажмите Готово.

⚠️ Пожалуйста, сохраните этот webhook-адрес в надёжном месте, не публикуйте его на GitHub, в блогах и других публично доступных сайтах, чтобы избежать утечки и злонамеренного использования для отправки спама.

Копирование webhook-адреса

  1. Настройте скопированный Webhook-адрес в FEISHU_WEBHOOK_URL в GitHub Secrets.

💡 После настройки вы можете нажать на изображение бота справа от имени группы, чтобы перейти на страницу сведений о настраиваемом боте и управлять конфигурацией.

📖 Официальная документация: Руководство по использованию настраиваемого бота

Конфигурация GitHub Secret (⚠️ Name должен строго совпадать):

  • Name (имя): DINGTALK_WEBHOOK_URL (скопируйте и вставьте это имя, не вводите вручную)

  • Secret (значение): адрес Webhook вашего бота DingTalk

Шаги настройки бота:

  1. Создание бота (только на ПК):

    • Откройте клиент DingTalk на ПК, войдите в целевой групповой чат

    • Нажмите значок настроек группы (⚙️) → прокрутите вниз, найдите «Боты» и нажмите

    • Выберите «Добавить бота» → «Настраиваемый»

  2. Настройка бота:

    • Укажите имя бота

    • Настройки безопасности:

      • Настраиваемое ключевое слово: укажите «热点»

  3. Завершение настройки:

    • Отметьте условия обслуживания → нажмите «Готово»

    • Скопируйте полученный Webhook URL

    • Настройте URL в DINGTALK_WEBHOOK_URL в GitHub Secrets

Примечание: на мобильном устройстве можно только получать сообщения, создавать новых ботов нельзя.

Конфигурация GitHub Secret (⚠️ Name должен строго совпадать):

  • Name (имя): TELEGRAM_BOT_TOKEN (скопируйте и вставьте это имя, не вводите вручную)

  • Secret (значение): токен вашего Telegram Bot

  • Name (имя): TELEGRAM_CHAT_ID (скопируйте и вставьте это имя, не вводите вручную)

  • Secret (значение): ваш Telegram Chat ID

Пояснение: для Telegram необходимо настроить два Secret, добавьте их, нажав кнопку «New repository secret» дважды

Шаги настройки бота:

  1. Создание бота:

    • В Telegram найдите @BotFather (обратите внимание на регистр, у официального есть синий значок галочки и надпись типа 37849827 monthly users; существуют поддельные аккаунты, будьте внимательны)

    • Отправьте команду /newbot для создания нового бота

    • Укажите имя бота (должно заканчиваться на «bot», имена часто повторяются, поэтому придётся придумывать разные варианты)

    • Получите Bot Token (формат: 123456789:AAHfiqksKZ8WmR2zSjiQ7_v4TMAKdiHm9T0)

  2. Получение Chat ID:

    Способ 1: через официальный API

    • Сначала отправьте сообщение своему боту

    • Перейдите по адресу: https://api.telegram.org/bot<ваш Bot Token>/getUpdates

    • В возвращённом JSON найдите число в "chat":{"id":число}

    Способ 2: с помощью стороннего инструмента

    • Найдите @userinfobot и отправьте /start

    • Получите ваш пользовательский ID в качестве Chat ID

  3. Настройка в GitHub:

    • TELEGRAM_BOT_TOKEN: укажите Bot Token, полученный на шаге 1

    • TELEGRAM_CHAT_ID: укажите Chat ID, полученный на шаге 2

  • Примечание: чтобы предотвратить злоупотребление массовой рассылкой, при текущей массовой рассылке все получатели видят адреса электронной почты друг друга.

  • Если у вас нет опыта настройки подобной отправки с почтового ящика, не рекомендуется пробовать

⚠️ Важная зависимость конфигурации: для推送 на почту требуется HTML-файл отчёта. Убедитесь, что storage.formats.html в config/config.yaml установлен в 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 (можно оставить пустым, система определит автоматически)

Пояснение: для推送 на почту необходимо настроить как минимум 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

189 Почта

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 за предоставление конфигурации почты 189.cn и проведение теста отправки/получения (#291)

  • Благодарим @longzhenren за предоставление конфигурации Alibaba Cloud почты (aliyun.com) и проведение теста (#344)

  • Благодарим @ACANX за предоставление конфигурации Yandex почты (yandex.com) и проведение теста (#663)

  • Благодарим @Sleepy-Tianhao за предоставление конфигурации iCloud почты (icloud.com) и проведение теста (#728)

Настройка распространённых почтовых сервисов:

QQ Почта:

  1. Войдите в веб-версию QQ Почты → Настройки → Аккаунт

  2. Включите службу POP3/SMTP

  3. Сгенерируйте код авторизации (16-значный)

  4. В EMAIL_PASSWORD укажите код авторизации, а не пароль QQ

Gmail:

  1. Включите двухэтапную проверку

  2. Сгенерируйте пароль приложения

  3. В EMAIL_PASSWORD укажите пароль приложения

163/126 Почта:

  1. Войдите в веб-версию → Настройки → POP3/SMTP/IMAP

  2. Включите службу SMTP

  3. Установите код авторизации клиента

  4. В EMAIL_PASSWORD укажите код авторизации

Расширенная настройка: Если автоматическое определение не сработало, можно настроить SMTP вручную:

  • EMAIL_SMTP_SERVER: например, smtp.gmail.com

  • EMAIL_SMTP_PORT: например, 587 (TLS) или 465 (SSL)

Если несколько получателей (обратите внимание: разделяются запятой на английском):

Два способа использования:

Способ 1: Бесплатное использование (рекомендуется новичкам) 🆓

Особенности:

  • ✅ Без регистрации аккаунта — можно использовать сразу

  • ✅ 250 сообщений в день (достаточно для 90% пользователей)

  • ✅ Название Topic — это и есть «пароль» (нужно выбрать трудноподбираемое название)

  • ⚠️ Сообщения не шифруются, не подходят для конфиденциальной информации, но подходят для нечувствительной информации нашего проекта

Быстрый старт:

  1. Скачайте приложение ntfy:

  2. Подпишитесь на тему (выберите трудноподбираемое название):

    建议格式:trendradar-{你的名字缩写}-{随机数字}
    
    不能使用中文
    
    ✅ 好例子:trendradar-zs-8492
    ❌ 坏例子:news、alerts(太容易被猜到)
  3. Настройте GitHub Secret (⚠️ Имя Name должно строго совпадать):

    • Name (Имя): NTFY_TOPIC (скопируйте и вставьте это имя, не вводите вручную)

    • Secret (Значение): укажите название темы, на которую вы подписались

    • Name (Имя): NTFY_SERVER_URL (необязательная настройка, скопируйте и вставьте это имя)

    • Secret (Значение): оставьте пустым (по умолчанию используется ntfy.sh)

    • Name (Имя): NTFY_TOKEN (необязательная настройка, скопируйте и вставьте это имя)

    • Secret (Значение): оставьте пустым

    Пояснение: для ntfy требуется как минимум 1 обязательный Secret (NTFY_TOPIC), последние два — необязательные

  4. Тестирование:

    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 уведомлений в день — вполне достаточно.

Если вы выберете случайное, достаточно длинное название (например, 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 уведомления

О Bark:

Bark — это бесплатный инструмент для push-уведомлений с открытым исходным кодом на платформе iOS, отличающийся простотой, скоростью и отсутствием рекламы.

Способы использования:

Способ 1: Использование официального сервера (рекомендуется новичкам) 🆓

  1. Скачайте приложение Bark:

  2. Получите URL для push-уведомлений:

    • Откройте приложение Bark

    • Скопируйте URL для push-уведомлений, отображаемый на главной странице (формат: 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

  1. Перейдите на страницу Slack API:

    • Откройте https://api.slack.com/apps?new_app=1

    • Если вы не вошли в систему, сначала войдите в своё рабочее пространство Slack

  2. Выберите способ создания:

    • Нажмите «From scratch» (создать с нуля)

  3. Заполните информацию о приложении:

    • App Name: укажите название приложения (например, TrendRadar или Мониторинг горячих новостей)

    • Workspace: выберите своё рабочее пространство из выпадающего списка

    • Нажмите кнопку «Create App»

Шаг 2: Включение Incoming Webhooks

  1. Перейдите к Incoming Webhooks:

    • В левом меню найдите и нажмите «Incoming Webhooks»

  2. Включите функцию:

    • Найдите переключатель «Activate Incoming Webhooks»

    • Переключите его с OFF на ON

    • Страница автоматически обновится и отобразит новые параметры конфигурации

Шаг 3: Создание URL Webhook

  1. Добавьте новый Webhook:

    • Прокрутите страницу вниз

    • Нажмите кнопку «Add New Webhook to Workspace»

  2. Выберите целевой канал:

    • Появится страница авторизации

    • Выберите канал для получения сообщений из выпадающего списка (например, #горячие_новости)

    • ⚠️ Чтобы выбрать приватный канал, сначала необходимо вступить в него

  3. Авторизуйте приложение:

    • Нажмите кнопку «Allow» для завершения авторизации

    • Система автоматически вернёт вас на страницу конфигурации

Шаг 4: Скопируйте и сохраните URL Webhook

  1. Просмотрите сгенерированный URL:

    • В разделе «Webhook URLs for Your Workspace»

    • Вы увидите только что созданный URL Webhook

    • Формат: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

  2. Скопируйте URL:

    • Нажмите кнопку «Copy» справа от URL

    • Или выделите URL вручную и скопируйте

  3. Настройте в 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

  1. Получите URL Webhook:

    • Перейдите в настройки сервера Discord → Интеграции → Webhooks

    • Создайте новый Webhook и скопируйте URL

  2. Настройте шаблон:

    {"content": "{content}"}
  3. Настройка GitHub Secret:

    • GENERIC_WEBHOOK_URL: URL Webhook Discord

    • GENERIC_WEBHOOK_TEMPLATE: {"content": "{content}"}

Пользовательский шаблон

Шаблон поддерживает два плейсхолдера:

  • {title} — заголовок сообщения

  • {content} — содержимое сообщения

Пример шаблона:

# 默认格式(留空时使用)
{"title": "{title}", "content": "{content}"}

# Discord 格式
{"content": "{content}"}

# 自定义格式
{"text": "{content}", "username": "TrendRadar"}

Примечания:

  • ✅ Поддерживается формат Markdown (совместим с форматом WeCom)

  • ✅ Поддерживается автоматическая отправка партиями

  • ✅ Поддерживается настройка нескольких аккаунтов (разделяются символом ;)

  • ⚠️ Шаблон должен быть в корректном формате JSON

  • ⚠️ Разные платформы предъявляют разные требования к формату сообщений, обратитесь к документации целевой платформы

3️⃣ Шаг третий: Ручное тестирование отправки новостей

⚠️ Напоминание:

  • После выполнения шагов 1–2 немедленно проведите тест! После успешного теста при необходимости настройте конфигурацию (шаг 4)

  • Зайдите в свой собственный проект, а не в этот!

Как найти страницу Actions:

  • Способ 1: Откройте главную страницу вашего форкнутого проекта и нажмите вкладку Actions вверху

  • Способ 2: Перейдите напрямую по адресу https://github.com/ваше_имя_пользователя/TrendRadar/actions

Пример для сравнения:

  • ❌ Проект автора: https://github.com/sansan0/TrendRadar/actions

  • ✅ Ваш проект: https://github.com/ваше_имя_пользователя/TrendRadar/actions

Шаги тестирования:

  1. Перейдите на страницу Actions вашего проекта

  2. Найдите «Get Hot News» (должно быть именно это название), нажмите на него, затем нажмите кнопку «Run workflow» справа для запуска

    • Если вы не видите эту надпись, решите проблему согласно #109

  3. Примерно через 3 минуты сообщение будет отправлено на настроенную вами платформу

⚠️ Напоминание:

  • Не проводите ручное тестирование слишком часто, чтобы не сработали ограничения GitHub Actions

  • После нажатия Run workflow необходимо обновить страницу браузера, чтобы увидеть новую запись о запуске

4️⃣ Шаг четвёртый: Пояснение к конфигурации (необязательно)

Конфигурация по умолчанию уже работает корректно. Если требуется индивидуальная настройка, достаточно ознакомиться со следующими файлами:

Файл

Назначение

config/config.yaml

Основной файл конфигурации: режим отправки, временное окно, список платформ, веса горячих тем и т.д.

config/frequency_words.txt

Файл ключевых слов: укажите интересующие вас слова для фильтрации содержимого уведомлений

config/ai_analysis_prompt.txt

Шаблон AI-подсказки: настройте роль и аспекты анализа AI-аналитика

.github/workflows/crawler.yml

Частота выполнения: управление периодичностью запуска (⚠️ изменять с осторожностью)

👉 Подробное руководство по настройке: Подробности конфигурации

5️⃣ Шаг пятый: Удалённое облачное хранилище и настройка регистрации

Важное изменение в v4.0.0: введён механизм «проверки активности» — GitHub Actions требует периодической регистрации для продолжения работы.

  • Период работы: срок действия — 7 дней, после окончания обратного отсчёта сервис автоматически приостанавливается.

  • Способ продления: на странице Actions вручную запустите workflow «Check In», чтобы сбросить 7-дневный срок действия.

  • Путь действий: ActionsCheck InRun workflow

  • Концепция дизайна:

    • Если вы забыли зарегистрироваться в течение 7 дней, возможно, эта информация для вас не является жизненно необходимой. Своевременная пауза поможет вам отвлечься от информационного потока и дать мозгу передышку.

    • GitHub Actions — это ценный общедоступный вычислительный ресурс. Введение механизма регистрации направлено на предотвращение неэффективного простоя вычислительных мощностей и обеспечение их распределения действительно активным и нуждающимся пользователям. Благодарим за понимание и поддержку.


О настройке удалённого облачного хранилища (выберите в зависимости от способа развёртывания):

  • Пользователи GitHub Actions:

    • Текущее состояние: Actions при каждом запуске создаёт новую среду и не сохраняет файлы. Если не настроить облачное хранилище, проект будет работать в облегчённом режиме (без инкрементальных уведомлений, без отслеживания истории).

    • Рекомендация: настройте удалённое облачное хранилище для получения полного опыта.

  • Пользователи Docker / локального развёртывания:

    • Текущее состояние: данные по умолчанию сохраняются на локальном жёстком диске.

    • Рекомендация: облачное хранилище необязательно, может использоваться как резервная копия на другом сервере.

⚠️ Предварительные условия (важно):

Согласно правилам платформы Cloudflare, для активации R2 необходимо привязать платёжный метод.

  • Цель: только для проверки личности (Verify Only), списания не производятся.

  • Оплата: поддерживаются карты с двумя валютами или PayPal для Китая.

  • Использование: бесплатного лимита R2 (10 ГБ хранилища/месяц) достаточно для повседневной работы этого проекта, можно не беспокоиться о платежах.


Настройка GitHub Secret (необходимо добавить 4 элемента):

Name (Имя)

Описание Secret (Значение)

S3_BUCKET_NAME

Название корзины (например, trendradar-data)

S3_ACCESS_KEY_ID

Идентификатор ключа доступа (Access Key ID)

S3_SECRET_ACCESS_KEY

Секретный ключ доступа (Secret Access Key)

S3_ENDPOINT_URL

Конечная точка S3 API (например, для R2: https://<account-id>.r2.cloudflarestorage.com)

Необязательная настройка:

Name (Имя)

Описание Secret (Значение)

S3_REGION

Регион (по умолчанию auto, для некоторых провайдеров может потребоваться указать)

💡 Дополнительные варианты настройки хранилища: см. Где хранятся данные?

Подробные шаги (получение учётных данных):

  1. Перейдите в обзор R2:

    • Войдите в Cloudflare Dashboard.

    • В левой боковой панели найдите и нажмите R2对象存储.

  2. Создайте корзину:

    • Нажмите 概述

    • Нажмите 创建存储桶 (Create bucket) в правом верхнем углу.

    • Введите название (например, trendradar-data) и нажмите 创建存储桶.

  3. Создайте API-токен:

    • Вернитесь на страницу 概述.

    • В правом нижнем углу нажмите Account Details, найдите и нажмите Manage (Manage R2 API Tokens).

    • Также вы увидите S3 API: https://<account-id>.r2.cloudflarestorage.com (это и есть S3_ENDPOINT_URL)

    • Нажмите 创建 Account APl 令牌.

    • ⚠️ Ключевые настройки:

      • Имя токена: укажите произвольное имя (например, github-action-write).

      • Права доступа: выберите 管理员读和写.

      • Указание корзины: для безопасности рекомендуется выбрать 仅适用于指定存储桶 и выбрать вашу корзину (например, trendradar-data).

    • Нажмите 创建 API 令牌 и немедленно скопируйте отображаемые Access Key ID и Secret Access Key (отображаются только один раз!).

6️⃣ Шаг шестой: Включение AI-аналитики в уведомлениях

Это ключевая функция v5.0.0 — AI поможет вам обобщать и анализировать новости, рекомендуем попробовать.

Способ настройки: Добавьте в GitHub Secrets (или .env / config.yaml):

  • AI_API_KEY: ваш API-ключ (поддерживаются DeepSeek, OpenAI и др.)

  • AI_PROVIDER: название провайдера (например, deepseek, openai)

Всё, сложное развёртывание не требуется — при следующей отправке вы увидите интеллектуальный аналитический отчёт.

7️⃣ Шаг седьмой: 🎉 Развёртывание успешно!

Поздравляем! Теперь вы можете наслаждаться эффективным информационным потоком TrendRadar.

💬 Присоединяйтесь к сообществу: Подписывайтесь на официальный аккаунт «硅基茶水间», делитесь своим опытом использования и продвинутыми приёмами.

8️⃣ Шаг восьмой: продвинутый уровень: выберите своего AI-ассистента

TrendRadar предлагает два способа использования AI, удовлетворяющих разные потребности:

Характеристика

✨ AI-анализ и рассылка

🧠 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

Максимум 10 новостей (новое в v3.2.0)

Глобальный фильтр

[GLOBAL_FILTER]

Глобальное исключение указанного контента

см. пример ниже

Фильтруется в любом случае (новое в v3.5.0)

Регулярное выражение

/pattern/

Точное сопоставление по шаблону

/\bai\b/

Сопоставление с помощью регулярного выражения (новое в v4.7.0)

Отображаемое имя

=> 备注

Пользовательский отображаемый текст

/\bai\b/ => AI相关

Отображается имя примечания в рассылке и 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
  • ❌ «广告:最新科技产品发布» ← содержит глобальное слово-фильтр «广告», отклоняется напрямую

  • ✅ «科技公司发布AI新产品» ← не содержит глобальных слов-фильтров, сопоставляется с группой «科技»

  • ✅ «AI技术突破引发关注» ← не содержит глобальных слов-фильтров, сопоставляется с «AI» в группе «科技»

Примечания:

  • Глобальные слова-фильтры следует использовать с осторожностью, чтобы избежать чрезмерной фильтрации и пропуска ценного контента

  • Рекомендуется ограничить количество глобальных слов-фильтров 5–15

  • Для фильтрации в конкретных группах слов предпочтительно использовать слова-фильтры внутри группы (префикс !)

6. Регулярные выражения /pattern/ — точное сопоставление по шаблону (новое в v4.7.0)

Обычные ключевые слова используют сопоставление по подстроке, что удобно в китайской среде, но в английской среде может приводить к ложным срабатываниям. Например, ai будет сопоставляться с ai в слове training.

Использование синтаксиса регулярных выражений /pattern/ позволяет добиться точного сопоставления:

/(?<![a-z])ai(?![a-z])/
人工智能

Назначение: Сопоставление с помощью регулярных выражений, поддерживается весь синтаксис регулярных выражений Python

Часто используемые шаблоны регулярных выражений:

Потребность

Написание регулярного выражения

Пояснение

Граница английского слова

/\bword\b/

Сопоставление отдельного слова, например, /\bai\b/ сопоставляет «AI», но не «training»

Не буква до и после

/(?<![a-z])ai(?![a-z])/

Более мягкая граница, подходит для смешанных китайско-английских сценариев

Сопоставление с начала

/^breaking/

Сопоставляет только заголовки, начинающиеся с «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 (флаги игнорируются, так как по умолчанию уже включено игнорирование регистра)

  • Некорректный синтаксис регулярных выражений обрабатывается как обычное слово

  • Регулярные выражения можно использовать для обычных слов, обязательных слов (+), слов-фильтров (!)

💡 Не умеете писать регулярные выражения? Пусть AI поможет вам их сгенерировать!

Если вы не знакомы с регулярными выражениями, вы можете попросить ChatGPT / Gemini / DeepSeek сгенерировать их для вас. Просто скажите AI:

Мне нужно регулярное выражение Python для сопоставления английского слова «ai», но не «ai» в «training». Пожалуйста, дайте сразу регулярное выражение в формате /pattern/, без дополнительных объяснений.

AI даст вам примерно такой результат: /(?<![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

/(?<![a-z])ai(?![a-z])/ + 人工智能

(?<![a-z])ai(?![a-z]) 人工智能

/(?<![a-z])ai(?![a-z])/ => AI 相关 + 人工智能

AI 相关

Примечания:

  • Отображаемое имя нужно указывать только на первом слове группы

  • Если несколько слов в группе имеют отображаемые имена, используется первое

  • Если отображаемое имя не задано, автоматически используется объединение всех слов в группе


🔗 Функция групп слов — важная роль разделения пустыми строками

Основное правило: Разделяйте разные группы слов пустыми строками, каждая группа подсчитывается независимо

Пример конфигурации:
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  # 排序优先级配置

Значение конфигурации

Правило сортировки

Подходящий сценарий

false (по умолчанию)

Количество горячих ↓ → Позиция в конфигурации ↑

Отслеживание трендов популярности

true

Позиция в конфигурации ↑ → Количество горячих ↓

Приоритет личных предпочтений

Пример: Порядок конфигурации 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"

Детальная сравнительная таблица

Режим

Целевая аудитория

Время рассылки

Отображаемый контент

Типичный сценарий использования

Дневная сводкаdaily

📋 Руководители предприятий/обычные пользователи

По расписанию (по умолчанию раз в час)

Все сопоставленные новости за день+ область новых новостей

Пример: Просмотр всех важных новостей дня каждый день в 18:00Особенность: Полная картина трендов за день, ничего не пропуститеНапоминание: Будут включены ранее отправленные новости

Текущий рейтингcurrent

📰 Медиа-специалисты/создатели контента

По расписанию (по умолчанию раз в час)

Сопоставленные новости текущего рейтинга+ область новых новостей

Пример: Ежечасное отслеживание «какие темы сейчас самые горячие»Особенность: В реальном времени видно изменения в рейтинге популярностиНапоминание: Новости, остающиеся в рейтинге, будут появляться каждый раз

Инкрементальный мониторингincremental

📈 Инвесторы/трейдеры

Рассылка только при появлении нового

Новые новости, сопоставленные с частотными словами

Пример: Мониторинг «特斯拉», уведомление только при появлении новых сообщенийОсобенность: Ноль повторов, видны только впервые появившиеся новостиПодходит для: Высокочастотного мониторинга, избегания информационного шума

Пример реального эффекта рассылки

Предположим, вы отслеживаете ключевое слово «苹果», выполнение раз в час:

Время

Рассылка в режиме 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. Конфигурация ключевых слов слишком строгая или слишком широкая

  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. Сумма трёх чисел должна быть равна 1.0

  2. Что важнее — то и увеличивайте: если важен рейтинг — увеличивайте rank, если важна устойчивость — увеличивайте frequency

  3. Рекомендуется менять по 0.1–0.2 за раз, наблюдайте за эффектом

Основная идея: пользователи, которым важны скорость и актуальность, повышают вес рейтинга; пользователи, которым важны глубина и стабильность, повышают вес частоты.

5. Как выглядят мои сообщения?

Пример рассылки

📊 Статистика горячих слов

🔥 [1/3] AI ChatGPT : 2 шт.

  1. [百度热搜] 🆕 ChatGPT-5正式发布 [1] - 09时15分 (1 раз)

  2. [今日头条] AI芯片概念股暴涨 [3] - [08时30分 ~ 10时45分] (3 раза)

━━━━━━━━━━━━━━━━━━━

📈 [2/3] 比亚迪 特斯拉 : 2 шт.

  1. [微博] 🆕 比亚迪月销量破纪录 [2] - 10时20分 (1 раз)

  2. [抖音] 特斯拉降价促销 [4] - [07时45分 ~ 09时15分] (2 раза)

━━━━━━━━━━━━━━━━━━━

📌 [3/3] A股 股市 : 1 шт.

  1. [华尔街见闻] A股午盘点评分析 [5] - [11时30分 ~ 12时00分] (2 раза)

🆕 Новые горячие новости за этот цикл (всего 2 шт.)

百度热搜 (1 шт.):

  1. ChatGPT-5正式发布 [1]

微博 (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-образа, можно выбрать развёртывание по потребностям:

Название образа

Назначение

Пояснение

wantcat/trendradar

Сервис рассылки новостей

Периодический сбор новостей, отправка уведомлений (обязательно)

wantcat/trendradar-mcp

Сервис AI-анализа

Поддержка протокола MCP, диалоговый AI-анализ (опционально)

💡 Рекомендация:

  • Нужна только рассылка: разверните только образ wantcat/trendradar

  • Нужна функция AI-анализа: разверните оба образа

Способ 1: Использование docker compose (рекомендуется)

  1. Создайте каталог проекта и конфигурацию:

    # 克隆项目到本地
    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 编排文件
  1. Описание файлов конфигурации:

    Принцип разделения конфигурации (оптимизация 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 Key, ключи S3, планировщик задач и т.д., не отслеживается git

    💡 Ключевые моменты разделения:

    • Поведение функций → изменяйте config.yaml (например, включение/отключение платформы, настройка режима push-уведомлений)

    • Отслеживаемый контент → изменяйте frequency_words.txt (например, добавление новых ключевых слов)

    • Стиль вывода AI → изменяйте ai_analysis_prompt.txt или ai_translation_prompt.txt

    • Ключи и учётные данные → изменяйте docker/.env (API Key, Webhook URL и другая конфиденциальная информация хранится здесь)

    • Персонализированные расширения → используйте каталог config/custom/, чтобы избежать перезаписи при обновлении

    💡 Применение изменений конфигурации: после изменения config.yaml выполните docker compose up -d для перезапуска контейнера

    ⚙️ Механизм переопределения переменными окружения (v3.0.5+)

    Переменные окружения из файла .env переопределяют соответствующие настройки в config.yaml:

    Переменная окружения

    Соответствующая конфигурация

    Пример значения

    Описание

    WEBSERVER_PORT

    -

    8080

    Порт веб-сервера

    FEISHU_WEBHOOK_URL

    notification.channels.feishu.webhook_url

    https://...

    Webhook Feishu (несколько аккаунтов через ;)

    AI_ANALYSIS_ENABLED

    ai_analysis.enabled

    true / false

    Включить ли AI-анализ (новое в v5.0.0)

    AI_API_KEY

    ai.api_key

    sk-xxx...

    AI API Key (общий для ai_analysis и ai_translation)

    AI_PROVIDER

    ai.provider

    deepseek / openai / gemini

    Поставщик AI

    S3_*

    storage.remote.*

    -

    Конфигурация удалённого хранилища (5 параметров)

    Приоритет конфигурации: переменные окружения > config.yaml

    Как использовать:

    • Измените файл .env, заполнив необходимые настройки

    • Или добавьте их напрямую в разделе «Переменные окружения» в интерфейсе управления Docker на NAS/Synology

    • Применяется после перезапуска контейнера: docker compose up -d

  2. Запуск сервиса:

    Вариант 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-диалогового анализа

    • Оба сервиса независимы и могут гибко комбинироваться по необходимости

  3. Проверка статуса работы:

    # 查看新闻推送服务日志
    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

Доступные образы:

Имя образа

Назначение

Описание

wantcat/trendradar

Сервис push-уведомлений

Периодический сбор новостей, отправка уведомлений

wantcat/trendradar-mcp

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, данные сохраняются даже после перезапуска или удаления контейнера.

📊 Пути доступа к веб-отчётам:

Сгенерированный TrendRadar ежедневный сводный HTML-отчёт сохраняется в двух местах:

Расположение файла

Способ доступа

Сценарий использования

output/index.html

Прямой доступ с хоста

Развёртывание Docker (через монтирование Volume, виден на хосте)

index.html

Доступ из корневого каталога

GitHub Pages (корневой каталог репозитория, автоматическое распознавание Pages)

output/html/YYYY-MM-DD/当日汇总.html

Доступ к историческим отчётам

Все окружения (архивация по датам)

Пример локального доступа:

# 方式 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-серверы → Добавить

  • Тип: streamableHttp

  • URL: 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-уведомлений

mode

daily

Определяет время и содержимое push-уведомлений, подробнее в Подробное описание режимов

Способ группировки

display_mode

keyword

keyword=группировка по ключевым словам (например, «AI»), platform=группировка по платформам (например, «Weibo»)

Выделение важного

rank_threshold

5

Новости в топ-5 будут выделены жирным шрифтом, сразу видно самое популярное

Правило сортировки

sort_by_position_first

false

false=сначала более популярные, true=сначала ваши настроенные слова

Ограничение количества

max_news_per_keyword

0

Сколько новостей максимум показывать по каждому ключевому слову? 0 — без ограничения

Порядок отображения

display.region_order

см. конфигурацию выше

Изменяя порядок в списке, можно управлять расположением областей

Сравнение способов группировки (display_mode)

Вы хотите видеть «какие новости по этой теме» или «какие новости на этой платформе»?

Режим

Способ группировки

Префикс заголовка

Сценарий применения

keyword (по умолчанию)

Агрегация по ключевым словам

[Название платформы]

Меня интересует «AI», хочу видеть новости об AI со всех платформ

platform

Агрегация по платформам

[Ключевое слово]

Меня интересует «Weibo», хочу видеть новости по моим ключевым словам на Weibo

Порядок отображения областей (region_order)

Изменяя порядок элементов в списке display.region_order, можно управлять расположением областей в push-сообщении.

Порядок по умолчанию: Новые горячие темы → Горячие списки → RSS → Отдельная область отображения → AI-анализ

Пример настройки: хотите, чтобы AI-анализ был в начале?

display:
  region_order:
    - ai_analysis                  # 移到第一行
    - new_items
    - hotlist
    - rss
    - standalone

Внимание: область отображается только при выполнении двух условий:

  1. Она есть в списке region_order

  2. Соответствующий переключатель в 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 分析区域

Область

Ключ конфигурации

Значение по умолчанию

Описание

Горячие списки

hotlist

true

Агрегация горячих новостей по ключевым словам

Новые горячие темы

new_items

false

Новые горячие темы за текущий цикл (включая новые в горячих списках + новые в RSS). Примечание: маркер 🆕 в области горячих списков не зависит от этого переключателя

RSS

rss

true

RSS-подписки, соответствующие ключевым словам. При отключении анализ RSS пропускается, но RSS в отдельной области отображения не затрагивается

Отдельная область отображения

standalone

false

Полное отображение контента указанных платформ/RSS, не фильтруется по ключевым словам

AI-анализ

ai_analysis

true

Сводка анализа горячих тем, сгенерированная AI

Приоритет сортировки (sort_by_position_first)

Предположим, вы настроили ключевые слова: 1. Tesla, 2. BYD. Фактическая популярность: BYD (10 записей), Tesla (3 записи).

Значение конфигурации

Результат сортировки

Ваша логика

false (по умолчанию)

BYD (10 записей) → Tesla (3 записи)

«Кто популярнее — тот впереди»

true

Tesla (3 записи) → BYD (10 записей)

«Порядок моей конфигурации — приоритет, независимо от популярности»

Отдельная область отображения (standalone)

Сценарий: некоторые платформы (например, горячие списки Zhihu, HackerNews) я хочу просматривать полностью, независимо от того, совпадают ли они с моими ключевыми словами.

display:
  regions:
    standalone: true                  # 推送中展示独立展示区(关闭不影响 AI 分析)

  standalone:
    platforms: ["zhihu", "weibo"]     # 这些平台的热榜给我完整显示
    rss_feeds: ["hacker-news"]        # 这些RSS源的内容给我完整显示
    max_items: 20                     # 最多显示多少条

💡 Независимое управление push-отображением и AI-анализом: regions.standalone управляет только отображением отдельной области в push-уведомлениях. Даже если отображение в push отключено, при включении include_standalone: true в конфигурации AI, AI всё равно будет анализировать полные данные этих платформ. Подходит для пользователей, которые хотят, чтобы AI делал глубокий анализ, но не хотят слишком длинных push-сообщений.

8. Когда мне приходят push-уведомления?

Место настройки: раздел schedule в config/config.yaml + config/timeline.yaml

Быстрый старт

Просто выберите один из предустановленных шаблонов в config.yaml, редактировать timeline.yaml не нужно:

schedule:
  enabled: true
  preset: "morning_evening"     # 改这里就行

Доступные предустановленные шаблоны

Имя шаблона

Описание

Поведение push-уведомлений

morning_evening

Инкрементально весь день + вечерняя сводка (рекомендуется)

Push при новых событиях в течение дня + вечерняя сводка за день в 19:00-21:00

always_on

Круглосуточный мониторинг

Push при новых событиях в течение всего дня, без разделения на временные интервалы

office_hours

Рабочее время

Три периода в рабочие дни (утренний обзор → дневные горячие темы → вечерняя сводка), в выходные свободный push

night_owl

Сова

Дневной обзор + ночная сводка за весь день (22:00-01:00, через полночь)

custom

Полностью настраиваемый

Редактирование раздела custom внизу timeline.yaml

Полная настройка

Если ни один из предустановленных шаблонов не подходит, можно отредактировать раздел 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

Я хочу...

Скопируйте эту строку кода

Описание

Каждый час

- cron: "0 * * * *"

Конфигурация по умолчанию, запуск в 0-ю минуту

Каждые 30 минут

- cron: "*/30 * * * *"

Запуск каждые 30 минут

Каждый день в 8:00

- cron: "0 0 * * *"

⚠️ Указывается 0, потому что время UTC (0:00) = время Пекина (8:00)

Каждые полчаса в рабочее время

- cron: "*/30 0-14 * * *"

Соответствует времени Пекина 8:00 - 22:00

Три раза в день

- cron: "0 0,6,12 * * *"

Соответствует времени Пекина 8:00, 14:00, 20:00

⚠️ Два важных напоминания

  1. Разница во времени: серверы GitHub находятся за рубежом и используют время UTC.

    • Простая арифметика: желаемое время Пекина минус 8 часов = время, которое нужно указать.

    • Пример: хотите запуск в 20:00 по пекинскому времени, в настройках укажите 12:00

  2. Не слишком часто: рекомендуемый интервал — не менее 30 минут.

    • Бесплатные ресурсы GitHub ограничены, слишком частые запуски могут привести к ограничению аккаунта.

    • К тому же запуск Actions имеет задержку в несколько минут, точный контроль не имеет смысла.

Пошаговая инструкция по изменению

  1. В вашем репозитории GitHub найдите файл .github/workflows/crawler.yml

  2. Нажмите кнопку ✏️ (Edit) в правом верхнем углу

  3. Найдите строку cron: "..." и замените содержимое в кавычках на «код» из таблицы выше

  4. Нажмите зелёную кнопку Commit changes в правом верхнем углу для сохранения

10. Push-уведомления в несколько групп/устройств

⚠️ Безопасность прежде всего

Не записывайте пароли/токены напрямую в config.yaml! Если вы загрузите файл с паролями на GitHub, его увидит весь мир.

Правильный подход:

  • Пользователи GitHub Actions: добавьте в Settings -> Secrets

  • Пользователи Docker: запишите в файл .env (этот файл не будет загружен)

Как отправлять push-уведомления в несколько мест одновременно?

Очень просто: при настройке разделите несколько адресов точкой с запятой ;.

Пример: Предположим, у вас есть две группы Feishu, в которые нужно отправлять уведомления:

  • Адрес группы 1: https://.../webhook/aaa

  • Адрес группы 2: https://.../webhook/bbb

При настройке укажите: https://.../webhook/aaa;https://.../webhook/bbb

Платформы с поддержкой нескольких аккаунтов

Платформа

Способ настройки

Примечания

Feishu/DingTalk/WeCom

Разделяйте несколько Webhook URL через ;

Самый простой способ — просто соединить их последовательно

Bark (iOS)

Разделяйте несколько Key URL через ;

Отправка на несколько iPhone

Telegram

Token и ChatID должны разделяться через ;

⚠️ Обратите внимание на соответствие порядка:Token1 соответствует ChatID1Token2 соответствует ChatID2

ntfy

Topic и Token должны разделяться через ;

Если для какого-то Topic не нужен Token, оставьте пустым:token1;;token3 (средний — пустой)

Примеры распространённых конфигураций (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 / Локальный запуск

Локальный диск

Хранятся в папке output/ в каталоге проекта, можно просмотреть в любое время.

GitHub Actions

Облачное хранилище

Поскольку GitHub Actions уничтожает среду после выполнения, необходимо настроить облачное хранилище (например, Cloudflare R2).

Как настроить облачное хранилище? (Обязательно для пользователей GitHub Actions)

Если вы используете GitHub Actions, вам понадобится «облачный диск» для хранения данных. Например, Cloudflare R2 (поскольку есть бесплатный тариф).

Добавьте эти 5 переменных в GitHub Secrets:

Имя переменной

Что указать

STORAGE_BACKEND

remote

S3_BUCKET_NAME

Имя вашего бакета

S3_ACCESS_KEY_ID

Ваш Access Key

S3_SECRET_ACCESS_KEY

Ваш Secret Key

S3_ENDPOINT_URL

Адрес вашего R2 API

💡 Подробная инструкция: Как получить 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 будет действовать как профессиональный аналитик. При отправке каждой партии новостей:

  1. Автоматическое чтение: читает все подобранные горячие новости

  2. Глубокий анализ: анализирует связи между изначально разрозненными новостями

  3. Составление отчёта: в конце отправляемого сообщения прикладывает краткий и глубокий «аналитический отчёт»

Содержание: сводка трендов горячих тем, оценка направления общественного мнения, кросс-платформенный анализ связей, оценка потенциального влияния и т.д.

Как включить анализ AI?

Самый простой способ — настроить через переменные окружения (рекомендуется GitHub Secrets или .env).

Обязательные параметры конфигурации:

Имя переменной

Что указать

Описание

AI_ANALYSIS_ENABLED

true

Переключатель включения

AI_API_KEY

sk-xxxxxx

Ваш API Key

AI_MODEL

deepseek/deepseek-chat

Идентификатор модели (формат: provider/model)

Поддерживаемые AI-провайдеры (на основе LiteLLM, поддерживается 100+ провайдеров):

Провайдер

Что указать в AI_MODEL

Описание

DeepSeek (рекомендуется)

deepseek/deepseek-chat

Отличное соотношение цены и качества, подходит для частого анализа

OpenAI

openai/gpt-4oopenai/gpt-4o-mini

Серия GPT-4o

Google Gemini

gemini/gemini-1.5-flashgemini/gemini-1.5-pro

Серия Gemini

Пользовательский API

Любой формат

Используется вместе с AI_API_BASE

💡 Новая функция: Теперь на основе единого интерфейса LiteLLM, поддерживается 100+ AI-провайдеров, конфигурация проще, обработка ошибок улучшена.

Необязательные параметры конфигурации:

Имя переменной

Значение по умолчанию

Описание

AI_API_BASE

(автоматически)

Пользовательский адрес API (например, OneAPI, локальная модель)

AI_TEMPERATURE

1.0

Температура сэмплирования (0-2, чем выше, тем более случайно)

AI_MAX_TOKENS

5000

Максимальное количество генерируемых токенов

AI_TIMEOUT

120

Время ожидания запроса (секунды)

AI_NUM_RETRIES

2

Количество повторных попыток при сбое

Продвинутый уровень: перевод 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 добавил функцию анализа AI на основе MCP (Model Context Protocol), которая позволяет вам общаться с новостными данными на естественном языке и проводить углублённый анализ.

⚠️ Обязательно прочитайте перед использованием

Важное примечание: для работы функции AI требуются локальные новостные данные

Функция анализа AI не запрашивает данные в реальном времени из сети напрямую, а анализирует накопленные локально новостные данные (хранящиеся в папке output)

Инструкция по использованию:

  1. Встроенные тестовые данные проекта: каталог output по умолчанию содержит данные горячих новостей за неделю 2025-12-21~2025-12-27, которые можно использовать для быстрого ознакомления с функцией AI

  2. Ограничения запросов:

    • ✅ Можно запрашивать только данные в пределах существующего диапазона дат (21-27 декабря, всего 7 дней)

    • ❌ Невозможно запрашивать новости в реальном времени или будущие даты

  3. Получение актуальных данных:

    • Тестовые данные предназначены только для быстрого ознакомления, рекомендуется развернуть проект самостоятельно для получения данных в реальном времени

    • Следуйте Быстрому старту для развёртывания и запуска проекта

    • После накопления новостных данных в течение как минимум 1 дня вы сможете запрашивать последние горячие темы

1. Быстрое развёртывание

Cherry Studio предоставляет графический интерфейс конфигурации, быстрое развёртывание за 5 минут, сложные части устанавливаются в один клик.

Пошаговая инструкция с иллюстрациями: уже обновлена в моём публичном аккаунте, ответьте «mcp» для получения

Подробная инструкция по развёртыванию: README-Cherry-Studio.md

Описание режимов развёртывания:

  • Режим STDIO (рекомендуется): после однократной настройки не требует повторной настройки, в пошаговой инструкции с иллюстрациями приведён пример только этого режима.

  • Режим HTTP (запасной вариант): если возникли проблемы с настройкой режима STDIO, можно использовать режим HTTP. Способ настройки этого режима в основном такой же, как и STDIO, но копируемый и вставляемый контент — всего одна строка, что снижает вероятность ошибок. Единственное, на что нужно обратить внимание — перед каждым использованием необходимо вручную запустить службу. Подробнее см. описание режима HTTP в конце README-Cherry-Studio.md.

2. Изучаем, как общаться с AI

Подробное руководство по диалогам: README-MCP-FAQ.md

💡 Подсказка: На практике не рекомендуется задавать несколько вопросов одновременно. Если выбранная вами модель AI не может выполнить последовательные вызовы, как на рисунке ниже, рекомендуется сменить модель.

🔌 MCP-клиенты

Служба TrendRadar MCP поддерживает стандартный протокол Model Context Protocol (MCP) и может подключаться к различным AI-клиентам, поддерживающим MCP, для интеллектуального анализа.

Поддерживаемые клиенты

Примечания:

  • Замените /path/to/TrendRadar на фактический путь к вашему проекту

  • В Windows используйте двойные обратные слэши: C:\\Users\\YourName\\TrendRadar

  • После сохранения не забудьте перезапустить

Способ 1: режим HTTP

  1. Запустите HTTP-службу:

    # Windows
    start-http.bat
    
    # Mac/Linux
    ./start-http.sh
  2. Настройте Cursor:

    Конфигурация уровня проекта (рекомендуется): Создайте .cursor/mcp.json в корневом каталоге проекта:

    {
      "mcpServers": {
        "trendradar": {
          "url": "http://localhost:3333/mcp",
          "description": "TrendRadar 新闻热点聚合分析"
        }
      }
    }

    Глобальная конфигурация: Создайте ~/.cursor/mcp.json в домашнем каталоге пользователя (то же содержимое)

  3. Шаги использования:

    • После сохранения файла конфигурации перезапустите Cursor

    • Просмотрите подключённые инструменты в разделе "Available Tools" в интерфейсе чата

    • Начните использовать: найди сегодняшние новости, связанные с "AI"

Способ 2: режим STDIO (рекомендуется)

Создайте .cursor/mcp.json:

{
  "mcpServers": {
    "trendradar": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/TrendRadar",
        "run",
        "python",
        "-m",
        "mcp_server.server"
      ]
    }
  }
}

Настройка Cline

Добавьте в настройки MCP в Cline:

Режим 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-подключений:

Шаги использования

  1. Запустите HTTP-службу TrendRadar:

    # Windows
    start-http.bat
    
    # Mac/Linux
    ./start-http.sh
  2. Запустите MCP Inspector:

    npx @modelcontextprotocol/inspector
  3. Подключитесь в браузере:

    • Перейдите по адресу: 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)

Часто задаваемые вопросы

Шаги проверки:

  1. Убедитесь, что порт 3333 не занят:

    # Windows
    netstat -ano | findstr :3333
    
    # Mac/Linux
    lsof -i :3333
  2. Проверьте, установлены ли зависимости проекта:

    # 重新运行安装脚本
    # Windows: setup-windows.bat 或者 setup-windows-en.bat
    # Mac/Linux: ./setup-mac.sh
  3. Просмотрите подробные журналы ошибок:

    uv run python -m mcp_server.server --transport http --port 3333
  4. Попробуйте использовать пользовательский порт:

    uv run python -m mcp_server.server --transport http --port 33333

Решения:

  1. Режим STDIO:

    • Убедитесь, что путь UV указан правильно (выполните which uv или where uv)

    • Убедитесь, что путь к проекту указан правильно и не содержит китайских символов

    • Просмотрите журналы ошибок клиента

  2. Режим HTTP:

    • Убедитесь, что служба запущена (перейдите по адресу http://localhost:3333/mcp)

    • Проверьте настройки брандмауэра

    • Попробуйте использовать 127.0.0.1 вместо localhost

  3. Общие проверки:

    • Перезапустите клиентское приложение

    • Просмотрите журналы MCP-службы

    • Используйте MCP Inspector для тестирования подключения

Возможные причины:

  1. Данные отсутствуют:

    • Убедитесь, что краулер уже запускался (есть данные в каталоге output)

    • Проверьте, есть ли данные в запрашиваемом диапазоне дат

    • Просмотрите доступные даты в каталоге output

  2. Ошибка параметров:

    • Проверьте формат даты: YYYY-MM-DD

    • Убедитесь, что ID платформы указан правильно: zhihu, weibo и т.д.

    • Просмотрите описание параметров в документации инструмента

  3. Проблемы с конфигурацией:

    • Убедитесь, что config/config.yaml существует

    • Убедитесь, что config/frequency_words.txt существует

    • Проверьте, правильный ли формат файла конфигурации

📚 О проекте

4 статьи:

AI-разработка:

  • Если у вас есть нишевые потребности, вы можете разрабатывать на основе моего проекта самостоятельно, даже без опыта программирования

  • Во всех моих open-source проектах я в той или иной степени использую собственное AI-вспомогательное ПО для повышения эффективности разработки, этот инструмент также open-source

  • Основная функция: быстрый отбор кода проекта для передачи AI, вам нужно лишь дополнить свои личные требования

  • Адрес проекта: https://github.com/sansan0/ai-code-context-helper

Другие проекты

📍 Карта следов председателя Мао — интерактивное динамическое отображение полного маршрута 1893-1976 годов. Приглашаем товарищей внести свой вклад в данные

Программное обеспечение для визуализации и анализа данных комментариев Bilibili

Star History Chart

📄 Лицензия

GPL-3.0 License


🔝 Вернуться к началу

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    14
    GPL 3.0
  • A
    license
    A
    quality
    Not graded
    maintenance
    An 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
  • A
    license
    A
    quality
    D
    maintenance
    TrendRadar aggregates hot news from multiple platforms and provides AI-powered trend analysis via the Model Context Protocol. It enables users to filter for relevant information and receive automated updates across various notification channels like Telegram, Slack, and WeChat.
    14
    GPL 3.0
  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides AI agents with real-time social trends, cross-platform sentiment, viral content velocity, and brand mentions from Reddit, Hacker News, and Google Trends.
    MIT

View all related MCP servers

Related MCP Connectors

  • Trending topics, cross-platform sentiment, viral content, community pulse & brand mentions.

  • Live market intelligence & AI content strategy: trends, competitor moves, content calendar.

  • AI visibility analytics for brand mentions, citations, sentiment, and GEO reports

View all MCP Connectors

Latest Blog Posts

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/AY08siliang/TrendRadar'

If you have feedback or need assistance with the MCP directory API, please join our Discord server