Skip to main content
Glama

El asistente de tendencias más rápido de implementar en 30 segundos — di adiós al scroll inútil y mira solo las noticias que realmente te importan

🌐 Sitio web oficial · 📖 Documentación oficial

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

Español | English

Este proyecto tiene como objetivo ser ligero y fácil de implementar

📑 Navegación rápida

💡 Haz clic en los enlaces de abajo para saltar rápidamente a la sección correspondiente. Para la implementación, se recomienda empezar por «Inicio rápido»; si necesitas personalización detallada, consulta «Guía de configuración»

  • Gracias a todos los que han dado una estrella al proyecto. Hacer fork es lo que deseas, dar estrella es lo que deseo, tener ambas cosas😍 es el mejor apoyo al espíritu del código abierto

Agradecimientos a los primeros seguidores

💡 Nota especial:

  1. Sobre la lista: La tabla siguiente registra a los seguidores de la fase inicial del proyecto (ronda ángel). Debido a que el registro manual temprano era laborioso, es inevitable que haya omisiones o registros incompletos. Si falta alguien, no es intencional, y pedimos disculpas de antemano.

  2. Planes futuros: Para dedicar la energía limitada al código y la iteración de funciones, a partir de ahora ya no se mantendrá esta lista manualmente.

Esté tu nombre en la lista o no, cada uno de vuestros apoyos es la base sobre la que TrendRadar ha llegado hasta hoy. 🙏

Soporte de infraestructura

Gracias a GitHub por la infraestructura gratuita, que es la mayor premisa para que este proyecto pueda ejecutarse convenientemente con un solo fork.

Soporte de datos

Este proyecto utiliza la API del proyecto newsnow para obtener datos de múltiples plataformas. Agradecemos especialmente al autor por proporcionar este servicio.

Tras contactar, el autor indicó que no hay que preocuparse por la presión del servidor, pero esto se basa en su buena voluntad y confianza. Por favor:

  • Ve al proyecto newsnow y dale una estrella como apoyo

  • Al implementar con Docker, controla razonablemente la frecuencia de envío, no agotes los recursos

Promoción y difusión

Gracias a las siguientes plataformas y personas por su recomendación (en orden cronológico)

  • 小众软件 - Plataforma de recomendación de software de código abierto

  • LinuxDo 社区 - Punto de encuentro de entusiastas de la tecnología

  • 阮一峰周刊 - Boletín influyente en el círculo tecnológico

Apoyo de los seguidores

Gracias a los amigos que brindaron apoyo económico. Vuestra generosidad se ha convertido en snacks y bebidas junto al teclado, acompañando cada iteración del proyecto.

Sobre el regreso del "me gusta de un yuan": Con el lanzamiento de la versión v5.0.0, el proyecto ha entrado en una nueva etapa. Para apoyar los crecientes costos de API y el consumo de cafeína, el canal de "me gusta de un yuan" se ha reabierto. Cada muestra de vuestro cariño se convertirá en Tokens y motivación en el mundo del código. 🚀 Ir a apoyar

Donante

Importe

Fecha

Nota

D*5

1.8 * 3

2025.11.24

*

1

2025.11.17

*

10

2025.11.17

R*w

10

2025.11.17

Este agente está hecho de puta madre, hermano

J*o

1

2025.11.17

Gracias por el código abierto, te deseo éxito en tu carrera

*

8.88

2025.11.16

Buen proyecto, estudiándolo

*

1

2025.11.15

*

1.99

2025.11.15

*

8.8

2025.11.14

Gracias por el código abierto, el proyecto es genial, te apoyo

M*e

10

2025.11.14

El código abierto no es fácil, buen trabajo

**

1

2025.11.14

*

88

2025.11.13

Buen proyecto, gracias por el código abierto

*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

Buen proyecto, ojalá lo hubiera conocido antes, ¡gracias por el código abierto!

*

9.9

2025.11.13

TrendRadar es genial, invito al profe a un café~

h*p

5

2025.11.12

Apoyando la fuerza del código abierto chino, ¡adelante!

c*r

6

2025.11.12

a*n

5

2025.11.12

*c

1

2025.11.12

Gracias por compartir el código abierto

*

1

2025.11.11

*

1

2025.11.10

*

10

2025.11.09

*

5

2025.11.08

*

8.80

2025.11.07

Desarrollar no es fácil, te apoyo.

Q*Q

6.66

2025.11.07

¡Gracias por el código abierto!

C*e

1

2025.11.05

Peter Fan

20

2025.10.29

M*n

1

2025.10.27

Gracias por el código abierto

*

8.88

2025.10.23

Profe, soy novato, llevo unos días y aún no lo consigo, pido ayuda

Eason

1

2025.10.22

Aún no lo entiendo del todo, pero estás haciendo algo bueno

P*n

1

2025.10.20

*

1

2025.10.19

*

1

2025.10.18

*

1

2025.10.17

*😀

10

2025.10.16

Me gusta

**

10

2025.10.16

*

10

2025.10.16

*

5

2025.10.14

TrendRadar

J*d

1

2025.10.14

Gracias por tu herramienta, es muy divertida...

*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

...Es increíble!!! Incluso un novato puede usarlo directamente...

**

5.2

2025.10.2

github-yzyf1312:Viva el código abierto

*椿

3

2025.9.23

Ánimo, está muy bien

*🍍

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

Me gusta

*

10

2025.9.10

*X

1.11

2025.9.3

*

20

2025.8.31

Gracias de parte del viejo Tong

*

1

2025.8.30

2*D

88

2025.8.13 por la tarde

2*D

1

2025.8.13 por la mañana

S*o

1

2025.8.05

Un pequeño apoyo

*

10

2025.8.04

x*x

2

2025.8.03

trendRadar buen proyecto, me gusta

*

1

2025.8.01

*

5

2025.8.01

*

0.1

2025.7.30

**

10

2025.7.29

Un pequeño apoyo

Related MCP server: TrendRadar

🪄 Patrocinadores

Disfruta de un solo lugar con el modelo Doubao de ByteDance y las versiones completas de los principales modelos SOTA de código abierto, cubriendo capacidades multimodales como texto, comprensión visual (VLM), generación de imágenes, etc. Seed-2.1, Seedream 5.0, GLM-5.2, DeepSeek y otros modelos populares están todos disponibles en un solo lugar, no solo para programación eficiente, sino también para tareas complejas de agentes de largo alcance.

❤️ ¿Te gusta? Apóyanos

Si TrendRadar te ha aportado valor, dale un impulso para que siga evolucionando

El importe es libre, incluso 1 yuan es un estímulo para el código abierto. No dudes en dejar un mensaje al donar (´▽`ʃ♡ƪ)

微信赞赏 (WeChat Donaciones)

支付宝赞赏 (Alipay Donaciones)

🤝 Desarrollo secundario y referencias

Si utilizas o te inspiras en las ideas o el código central de este proyecto en tu trabajo, será muy bienvenido que indiques la fuente en el README o en la documentación, adjuntando el enlace a este repositorio.

Esto contribuirá al mantenimiento continuo del proyecto y al desarrollo de la comunidad. ¡Gracias por tu respeto y apoyo! ❤️

💬 Comunicación y comentarios

  • GitHub Issues: adecuado para problemas técnicos específicos. Al preguntar, proporciona información completa (capturas de pantalla, registros de errores, etc.) para ayudar a localizar el problema rápidamente.

  • Comunicación por la cuenta oficial (WeChat): se recomienda priorizar la interacción en la sección de comentarios de los artículos relacionados. Si necesitas hacer preguntas por el backend, dar "me gusta"/recomendar el artículo primero es la mejor "tarjeta de presentación"; puedo sentir ese gesto desde el backend (´▽`ʃ♡ƪ).

  • Comunicación por grupo QQ: sigue la cuenta oficial y responde "grupo de intercambio" para unirte. Ya seas un novato en IA o un desarrollador experimentado, quieras pedir ayuda técnica o compartir experiencias de experimentación, aquí eres bienvenido. El grupo se centra en la ayuda mutua y el intercambio de ideas. Al unirte, lee primero el anuncio del grupo; al preguntar, describe el problema con claridad y adjunta capturas de pantalla. Los miembros ayudarán cuando tengan tiempo; su experiencia práctica suele ser más rápida y completa que la mía sola 🤝

Aviso amistoso: Este proyecto es de código abierto y compartido, no un producto comercial. Trata al autor como un amigo, no como un servicio de atención al cliente; ¡la comunicación será mucho más fluida!

Cuenta oficial (WeChat)

📝 Registro de actualizaciones

📌 Ver las últimas actualizaciones: Registro de actualizaciones del repositorio original :

  • Nota: se recomienda consultar las 【actualizaciones históricas】 para conocer el 【contenido funcional】 específico

2026/06/19 - v6.10.0

  • Procesamiento por lotes de traducción con IA: al traducir una gran cantidad de títulos, las solicitudes se dividen automáticamente en lotes para evitar que una sola solicitud exceda el límite y provoque fallos en la traducción

  • Refactorización por división de módulos: se dividieron context.py y __main__.py; el pipeline de filtrado con IA se independizó como módulo filter_pipeline, con responsabilidades más claras y mantenimiento más fácil

  • Corrección de la visualización de etiquetas de fuente en Feishu: se corrigió el problema de que las etiquetas de fuente y el resumen rápido de fuentes independientes con IA en las tarjetas de Feishu eran eliminados por CommonMark y no se mostraban

2026/02/09 - mcp-v4.0.0

  • 🔥 Envío directo de mensajes de IA a todos los canales: el contenido redactado por la IA se puede enviar con un clic a 9 canales como Feishu, DingTalk, Telegram, correo electrónico, etc. Markdown se adapta automáticamente al formato de cada plataforma, sin preocuparse por las diferencias de formato

  • Nueva guía de estrategias de formato: se añadió la herramienta get_channel_format_guide que indica a la IA qué formatos admite cada canal y qué limitaciones tiene, para que el contenido generado tenga un mejor diseño

  • Envío inteligente por lotes: los mensajes demasiado largos se dividen automáticamente según el límite de bytes de cada canal (Feishu 30KB, DingTalk 20KB, etc.), y la configuración se lee de config.yaml

  • Corrección de detección errónea de canales: ntfy ya no se reporta falsamente como "configurado" por su dirección predeterminada

  • Optimización de reutilización de código: las funciones de procesamiento por lotes reutilizan directamente los módulos centrales de trendradar, sin reinventar la rueda

2026/06/02 - v6.9.0

  • Verificación de seguridad del dominio de listas de tendencias: se añadió el elemento de configuración expected_domain para verificar la legitimidad del dominio de los enlaces en los datos devueltos; si no coincide, los datos se descartan automáticamente con una advertencia, previniendo eficazmente el secuestro de enlaces o la manipulación de datos

  • Dirección API personalizada para listas de tendencias: se admite el autoalojamiento de newsnow y la configuración de api_url para usar tu propia fuente de datos

2026/05/23 - v6.8.0

  • Mejora integral del informe HTML: se añadió la visualización de metadatos del informe (hora de generación, fuente de datos, número de versión), adaptación automática al modo oscuro, optimización de la interacción de las pestañas, visualización de flechas de tendencia; la experiencia de lectura en el navegador mejoró enormemente

  • Respaldo multi-CDN para la verificación de versión: la interfaz de verificación de versión admite respaldo automático entre múltiples CDN como GitHub → jsDelivr → Cloudflare, para que la red doméstica también pueda obtener avisos de actualización de forma estable

  • Los interruptores de área de visualización ahora funcionan: el informe HTML y el correo electrónico ahora respetan correctamente los interruptores display.regions.ai_analysis y display.regions.standalone; si están desactivados, no se renderizan

  • Corrección del botón de exportación: se corrigió el problema de que el icono del menú desplegable desaparecía al hacer clic en el botón de exportación

  • Corrección de la exportación Markdown: se corrigió el error de escape de los saltos de línea JS en la exportación Markdown del informe HTML

2026/05/15 - v6.7.0

  • Exportación Markdown: el menú desplegable de exportación del informe añadió el formato Markdown, generando con un clic texto estructurado con enlaces, ideal para el procesamiento secundario con LLM y para compartir entre plataformas (#1121)

  • Deduplicación por guid en RSS: el almacenamiento RSS añadió el campo guid; la prioridad de deduplicación cambió a guid > url, resolviendo el problema de que el mismo artículo se insertara repetidamente debido a cambios en la URL

  • Protección contra títulos vacíos: se añadió lógica de respaldo para títulos vacíos en toda la cadena (parser, capa de renderizado, relleno de traducción) para garantizar que las entradas sin título también se muestren correctamente

  • Mejora de la calidad de traducción: el prompt de traducción ahora exige conservar el orden de numeración; los resultados de traducción vacíos ya no sobrescriben el título original

2026/03/28 - v6.6.0

  • Mejoras del informe HTML en el navegador: al abrir el informe en el navegador, se puede cambiar automáticamente al diseño de pantalla ancha; la agrupación por palabras clave y las secciones independientes admiten cambio rápido por pestañas; el cuadro de búsqueda filtra los titulares de noticias en tiempo real; el cliente de correo sigue mostrando el diseño original de pantalla estrecha, sin regresiones

  • Modo oscuro: cambia al tema oscuro con un clic, recuerda automáticamente la preferencia, ideal para lectura nocturna

  • Copiar noticias con un clic: al pasar el cursor sobre el número de la noticia, se puede copiar el título y el enlace para compartir rápidamente

  • Optimización de exportación: la captura de pantalla completa y la captura por secciones se fusionaron en un botón de exportación desplegable; al capturar, se restaura automáticamente un diseño limpio

  • Sistema de atajos de teclado: admite W para alternar pantalla ancha, D para modo oscuro, / para buscar, ? para ver los atajos

  • Barra de progreso de lectura: la parte superior de la página muestra el progreso de lectura en tiempo real

2026/03/12 - v6.5.0

  • Sistema de filtrado inteligente con IA: ¡ya no necesitas configurar palabras clave manualmente! Escribe en ai_interests.txt los temas que te interesan en lenguaje cotidiano (por ejemplo, "quiero ver noticias relacionadas con IA y energías renovables"), y la IA extraerá automáticamente las etiquetas y puntuará cada noticia, enviando solo lo que realmente te interesa. Si el filtrado con IA falla, se vuelve automáticamente a la coincidencia por palabras clave, sin interrumpir el envío

  • Cada franja horaria admite diferentes métodos de filtrado e intereses: cada período de tiempo en Timeline ahora puede configurar de forma independiente cómo filtrar y qué tipo de noticias ver. Por ejemplo: por la mañana usa "palabras clave de tecnología" para un filtrado rápido, y por la noche cambia a "descripción de intereses de IA financiera" para un filtrado profundo: el mismo sistema, diferentes contenidos según la franja horaria

  • El alcance del análisis de IA es independiente del envío: el rango de datos del análisis de IA puede diferir del contenido enviado. Por ejemplo, el envío solo publica mensajes nuevos (para evitar molestias repetidas), pero el análisis de IA cubre todas las noticias del día (para ver la tendencia completa). Cada franja horaria también puede configurar su propio modo de análisis de IA

  • Ahorro inteligente con el filtrado de IA: las noticias ya analizadas no consumen tokens repetidamente; tras modificar la descripción de intereses, la IA juzga automáticamente la magnitud del cambio: los cambios pequeños solo actualizan las etiquetas afectadas, y solo los cambios grandes reclasifican todo

  • Configuración multiarchivo y aislamiento de etiquetas: los archivos de palabras clave personalizadas van en config/custom/keyword/, y los archivos de intereses de IA en config/custom/ai/; las etiquetas generadas por diferentes archivos son independientes entre sí y no interfieren

  • Control preciso de la traducción con IA: se puede controlar por separado si se traducen las listas de tendencias, RSS y secciones de visualización independiente; las áreas no habilitadas se omiten automáticamente, sin desperdiciar tokens

  • Carga por lotes en almacenamiento remoto: múltiples operaciones de escritura se acumulan y se envían juntas a la nube, reduciendo el número de llamadas a la API

  • Límite de visualización por grupo de palabras clave/etiquetas: mediante max_news_per_keyword se controla cuántas noticias se muestran como máximo en cada grupo, evitando que un solo tema popular llene todo el envío

  • Detección inteligente de conflictos de franjas horarias: si dos períodos de tiempo se superponen, el sistema avisa automáticamente del error para que se corrija, evitando comportamientos inesperados por conflictos de configuración

  • Se corrigieron varios errores

2026/02/09 - v6.0.0

Breaking Change: el archivo de configuración se actualizó (config.yaml 2.0.0); las configuraciones antiguas push_window y analysis_window ya no son compatibles. Consulta el nuevo config.yaml para migrar

  • Sistema de programación unificado: se añadió timeline.yaml, que controla con una sola configuración "cuándo recopilar / enviar / analizar con IA"

  • 5 plantillas predefinidas: always_on (todo el día, predeterminada), morning_evening (resumen mañana y tarde), office_hours (horario laboral), night_owl (noctámbulo), custom (personalizada); también se admite añadir tus propias plantillas bajo presets:, siempre que la clave no se repita, y luego escribir el nombre de tu plantilla en config.yaml

  • Configuración flexible de franjas horarias: admite diferenciación entre días laborables/fines de semana, franjas que cruzan la medianoche, deduplicación per-period once

  • Editor visual de configuración:

    • Se añadió la pestaña de edición de timeline.yaml, junto a config.yaml / frequency_words.txt

    • Selección de plantillas por tarjetas: haz clic para cambiar, sincroniza automáticamente schedule.preset en config.yaml

    • Línea de tiempo en vista semanal: barras horizontales de 7 días × 24 horas, con colores que distinguen el estado de envío/análisis/recopilación

    • Controles interactivos: interruptores, menús desplegables, selectores de hora; los cambios a la derecha se sincronizan en tiempo real con el YAML de la izquierda

    • Menú desplegable de mapeo semanal: se rellena dinámicamente según el plan diario; arrastra y haz clic para completar la configuración de programación

  • Optimización de la estabilidad del prompt de IA (ai_analysis_prompt.txt v2.0.0):

    • Especificación de formato independiente: los saltos de línea/etiquetas/numeración/prohibiciones se extrajeron del valor JSON como sección independiente

    • Plantilla JSON simplificada: las descripciones de campos se acortaron a una frase + límite de caracteres, reduciendo la confusión en el formato de salida de la IA

    • Se eliminó el formato Markdown del system prompt, coherente con la instrucción de "prohibido Markdown"

    • Todos los campos JSON se declaran opcionales; la ausencia de cualquier campo no genera errores, mejorando la tolerancia a fallos

  • Nuevo resumen analítico de IA para secciones de visualización independiente (ai_analysis.include_standalone):

    • Nuevo interruptor independiente: al activarlo, la IA genera un resumen central para cada fuente standalone

    • Desacoplamiento entre el análisis de IA y la visualización del envío: no es necesario activar la visualización de la sección independiente en el envío; la IA también puede analizar de forma independiente los datos completos de las listas de tendencias

    • Admite plataformas de listas de tendencias y fuentes RSS, con datos de ranking/hora/trayectoria

    • El análisis de trayectoria se vincula con include_rank_timeline: al activarlo, usa los datos de trayectoria para un análisis profundo de tendencias; al desactivarlo, se basa en el ranking para un juicio breve

    • Nuevo campo JSON standalone_summaries (resumen rápido de fuentes independientes), ya adaptado para el renderizado en todos los canales de envío

2026/01/28 - v5.5.0

Al igual que la función mcp, esta pequeña herramienta tampoco la mantendré en un repositorio separado; como es puramente frontend, lo pongo todo junto

  • Se añadió el editor visual de configuración de trendradar

2026/02/02 - mcp-v3.2.0

  • Nueva herramienta read_article: lee el cuerpo de un artículo individual (formato Markdown) mediante Jina AI Reader

  • Nueva herramienta read_articles_batch: lee varios artículos por lotes (máximo 5, con limitación automática de velocidad)

  • Flujo de trabajo recomendado: search_news(query="palabra clave", include_url=True)read_article(url=...) para leer el cuerpo

  • Actualización de documentación: README-MCP-FAQ.md y README-MCP-FAQ-EN.md añadieron las preguntas Q19-Q20 sobre lectura de artículos

2026/01/10 - mcp-v3.0.0~v3.1.5

  • Breaking Change: el valor de retorno de todas las herramientas se unificó a la estructura {success, summary, data, error}

  • Consistencia asíncrona: las 21 funciones de herramienta usan asyncio.to_thread() para envolver llamadas síncronas

  • MCP Resources: se añadieron 4 recursos (platforms, rss-feeds, available-dates, keywords)

  • Mejora de RSS: get_latest_rss admite consultas de varios días (parámetro days), con deduplicación de URL entre fechas

  • Corrección de coincidencia de expresiones regulares: get_trending_topics admite la sintaxis de expresiones regulares /pattern/ y display_name

  • Optimización de caché: se añadió la función make_cache_key(), con ordenación de parámetros + hash MD5 para garantizar la consistencia

  • Nueva herramienta check_version: admite verificar simultáneamente las actualizaciones de TrendRadar y del servidor MCP

2026/01/23 - v5.4.0

  • Se añadió el control independiente del modo de análisis de IA, con opciones follow_report | daily | current | incremental

  • Se añadió el control de la ventana de tiempo del análisis de IA, con soporte para segmentos de ejecución personalizados y límite de frecuencia diaria

  • Se añadió la gestión de versiones del archivo de configuración

  • Se corrigieron varios errores

2026/01/19 - v5.3.0

Refactorización importante: el módulo de IA se migró a LiteLLM

  • Interfaz de IA unificada: se usa LiteLLM en lugar de la implementación manual, con soporte para más de 100 proveedores de IA

  • Configuración simplificada: se eliminó el campo provider, reemplazado por el formato model: "provider/model_name"

  • Nuevas funciones: reintento automático (num_retries), modelos de respaldo (fallback_models)

  • Cambios de configuración:

    • ai.provider → eliminado (fusionado en model)

    • ai.base_urlai.api_base

    • Variable de entorno AI_PROVIDER → eliminada

    • Variable de entorno AI_BASE_URLAI_API_BASE

  • Ejemplos de formato de modelo:

    • 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

Principalmente ver la descripción en config.yaml

🌐 Función de traducción con IA

  • Traducción multilingüe: admite traducir el contenido enviado a cualquier idioma

  • Traducción por lotes: procesamiento inteligente por lotes, reduciendo el número de llamadas a la API

  • Prompt personalizado: admite personalizar el estilo de traducción

🔧 Optimización de la arquitectura de configuración

  • Configuración independiente del modelo de IA: el análisis y la traducción comparten la configuración del modelo

  • Interruptores de área unificados: gestión unificada de la visualización de áreas en el envío

  • Orden de áreas personalizable: admite personalizar el orden de visualización de cada área

✨ Mejoras del análisis de IA

  • Análisis de IA incrustado en HTML: los resultados del análisis se incrustan directamente en el informe HTML, y las notificaciones por correo lo usan directamente

  • Bloque de IA con estilos enriquecidos: diseño de tarjetas con fondo azul degradado, separando claramente cada dimensión de análisis

  • Soporte de línea de tiempo de ranking: la IA puede obtener el ranking exacto de cada noticia en cada momento de captura

  • Reorganización de secciones (7→4): integradas en situación central de tendencias, opinión pública y controversias, movimientos anómalos y señales débiles, y sugerencias estratégicas

🔧 Adaptación a múltiples modelos

  • Transmisión de parámetros genéricos: admite transmitir cualquier parámetro avanzado a la API

  • Adaptación a Gemini: soporte de parámetros nativos, con políticas de seguridad integradas relajadas

🐛 Corrección de errores

  • Se corrigieron varios problemas conocidos, mejorando la estabilidad del sistema

2026/01/10 - v5.0.0

Anécdota de desarrollo: Un homenaje a ese modelo de la empresa C que me acompañó durante más de dos años y que, justo después de renovar la suscripción, mostró "This organization has been disabled"

✨ Reestructuración del contenido enviado en "cinco grandes secciones"

Esta actualización reorganizó el mensaje enviado por áreas, y ahora el contenido se divide claramente en cinco secciones principales:

  1. 📊 Noticias de listas de tendencias: agregación de tendencias de toda la red tras el filtrado preciso por tus palabras clave.

  2. 📰 Suscripciones RSS: contenido de tus fuentes de suscripción personalizadas, con soporte de agrupación por palabras clave.

  3. 🆕 Novedades de esta vez: captura en tiempo real de las nuevas tendencias desde la última ejecución (con marcador 🆕).

  4. 📋 Sección de visualización independiente: listas de tendencias completas o fuentes RSS de plataformas designadas, completamente libres del filtro de palabras clave.

  5. ✨ Sección de análisis de IA: perspectivas profundas impulsadas por IA, que incluyen resumen de tendencias, evolución de la popularidad y un análisis de sentimiento extremadamente importante.

✨ Función de envío con análisis inteligente de IA

  • Integración del análisis de IA: usa modelos de IA de gran tamaño para analizar en profundidad el contenido enviado, generando automáticamente resúmenes de tendencias, análisis de popularidad de palabras clave, correlaciones entre plataformas, evaluación de impacto potencial, etc.

  • Análisis de sentimiento: nuevo reconocimiento profundo de sentimiento, capturando con precisión los sentimientos positivos/negativos, controversias o preocupaciones de la opinión pública

  • Soporte de múltiples proveedores de IA: admite DeepSeek (predeterminado, buena relación calidad-precio), OpenAI, Google Gemini y cualquier interfaz compatible con OpenAI

  • Dos modos de envío: only_analysis (solo análisis de IA), both (enviar ambos)

  • Prompt personalizado: personaliza el rol y el formato de salida del análisis de IA mediante el archivo config/ai_analysis_prompt.txt

  • Análisis de datos multidimensional: la IA puede analizar cambios de ranking, duración de la popularidad, rendimiento entre plataformas, predicción de tendencias, etc.

📋 Función de sección de visualización independiente

  • Visualización completa de listas de tendencias: las listas de tendencias completas de plataformas designadas se muestran por separado, sin verse afectadas por el filtro de palabras clave

  • Visualización independiente de RSS: el contenido de fuentes RSS se puede mostrar completo, ideal para fuentes con poco contenido

  • Configuración flexible: admite configurar la lista de plataformas a mostrar, la lista de fuentes RSS y el número máximo de entradas a mostrar

📊 Reestructuración de la experiencia de envío

  • Mejora del diseño: se rediseñaron y unificaron los encabezados estadísticos de cada canal, reforzando la organización por bloques; la jerarquía de los mensajes se ve de un vistazo

  • Configuración simplificada: se optimizó la lógica de configuración de canales de notificación como Feishu, más fácil de empezar

  • Flechas de tendencia de popularidad: nuevos indicadores 🔺(subida), 🔻(bajada), ➖(estable) para mostrar visualmente los cambios de popularidad

  • Webhook genérico: admite URL de Webhook personalizada y plantilla JSON, adaptándose fácilmente a cualquier plataforma como Discord, Matrix, IFTTT, etc.

🔧 Optimización de configuración

  • Configuración mejorada de palabras de frecuencia: nueva sintaxis [alias de grupo], soporte de líneas de comentario con #, configuración más clara (gracias a la sugerencia de @songge8)

  • Soporte de variables de entorno: las configuraciones relacionadas con el análisis de IA admiten sobrescritura mediante variables de entorno (AI_API_KEY, AI_PROVIDER, etc.)

💡 El tutorial detallado de configuración está en Deja que la IA analice las tendencias por mí

2026/01/02 - v4.7.0

  • Corrección de la visualización HTML de RSS: se corrigió el problema de renderizado causado por el desajuste del formato de datos RSS; ahora se muestra correctamente agrupado por palabras clave

  • Nueva sintaxis de expresiones regulares: la configuración de palabras clave admite la sintaxis /pattern/, resolviendo el problema de coincidencias erróneas de subcadenas en inglés (por ejemplo, ai coincide con training) 📖 Ver explicación detallada de la sintaxis

  • Nueva sintaxis de nombre para mostrar: usa => nota para dar un nombre memorable a expresiones regulares complejas, haciendo que los mensajes enviados sean más claros (por ejemplo, /\bai\b/ => Relacionado con IA)

  • ¿No sabes escribir expresiones regulares? El README añadió una guía para generar expresiones regulares con IA: dile a ChatGPT/Gemini/DeepSeek qué quieres que coincida y deja que la IA las escriba por ti

2025/12/30 - mcp-v2.0.0

  • Ajuste de arquitectura: se eliminó el soporte de TXT, unificando el uso de la base de datos SQLite

  • Consulta RSS: nuevas funciones get_latest_rss, search_rss, get_rss_feeds_status

  • Búsqueda unificada: search_news admite el parámetro include_rss para buscar simultáneamente en listas de tendencias y RSS

2026/01/01 - v4.6.0

  • Corrección de la visualización HTML de RSS: se fusionó el contenido RSS en la página HTML de listas de tendencias, mostrado agrupado por fuente

  • Nueva configuración display_mode: admite dos modos de visualización: keyword (agrupado por palabras clave) y platform (agrupado por plataforma)

2025/12/30 - v4.5.0

  • Soporte de fuentes RSS: nueva captura de RSS/Atom, con estadísticas agrupadas por palabras clave (mismo formato que las listas de tendencias)

  • Reestructuración del almacenamiento: estructura de directorios aplanada output/{type}/{date}.db

  • Configuración de orden unificada: sort_by_position_first afecta tanto a listas de tendencias como a RSS

  • Reestructuración de la configuración: config.yaml se reorganizó en 7 grupos lógicos (app, report, notification, storage, platforms, rss, advanced), con rutas de configuración más claras

2025/12/26 - mcp-v1.2.0

Actualización del módulo MCP - optimización del conjunto de herramientas, nueva función de comparación agregada, fusión de herramientas redundantes:

  • Nueva herramienta aggregate_news - agregación de noticias con deduplicación entre plataformas

  • Nueva herramienta compare_periods - análisis comparativo de períodos (interanual semanal/interanual mensual)

  • Fusión de find_similar_news + search_related_news_historyfind_related_news

  • Mejora de get_trending_topics - nuevo modo auto_extract para extraer automáticamente tendencias

  • Se corrigieron varios errores

  • Actualización sincronizada de la documentación README-MCP-FAQ.md en chino e inglés (Q1-Q18)

2025/12/20 - v4.0.3

  • Nueva función de estandarización de URL, que resuelve el problema de envíos duplicados en plataformas como Weibo debido a parámetros dinámicos (como band_rank)

  • Corrección de la lógica de detección del modo incremental, reconociendo correctamente los títulos históricos

2025/12/17 - v4.0.1

  • StorageManager añadió métodos proxy para el registro de envíos

  • El cliente S3 cambió al estilo virtual-hosted para mejorar la compatibilidad (soporta más servicios como Tencent Cloud COS)

2025/12/13 - mcp-v1.1.0

Actualización del módulo MCP:

  • Adaptación a v4.0.0, manteniendo también compatibilidad con los datos de v3.x

  • Nuevas herramientas de sincronización de almacenamiento: sync_from_remote, get_storage_status, list_available_dates

2025/12/13 - v4.0.0

🎉 Actualización importante: reestructuración completa del almacenamiento y la arquitectura central

  • Soporte de múltiples backends de almacenamiento: nuevo módulo de almacenamiento que admite SQLite local y almacenamiento en la nube remoto (protocolo compatible con S3, por ejemplo Cloudflare R2), adaptándose a entornos GitHub Actions, Docker y locales.

  • Optimización de la estructura de la base de datos: se reestructuraron las tablas de la base de datos SQLite, mejorando la eficiencia de datos y la capacidad de consulta.

  • Modularización del código central: la lógica del programa principal se dividió en múltiples módulos del paquete trendradar, mejorando significativamente el mantenimiento del código.

  • Funciones mejoradas: se implementó la estandarización del formato de fechas, políticas de retención de datos, soporte de configuración de zona horaria, optimización de la visualización de horas, y se corrigieron los problemas de persistencia de datos en almacenamiento remoto, garantizando la precisión de la fusión de datos.

  • Limpieza y compatibilidad: se eliminó la mayor parte del código de compatibilidad histórica, unificando la forma de almacenar y leer datos.

2025/12/03 - v3.5.0

🎉 Mejoras de funciones centrales

  1. Soporte de envío con múltiples cuentas

    • Todos los canales de envío (Feishu, DingTalk, WeCom, Telegram, ntfy, Bark, Slack) admiten configuración de múltiples cuentas

    • Usa punto y coma ; para separar varias cuentas, por ejemplo: FEISHU_WEBHOOK_URL=url1;url2

    • Verificación automática de la consistencia en el número de configuraciones emparejadas (como token y chat_id en Telegram)

  2. Configuración de áreas de envío

    • Mediante display.region_order se personaliza el orden de visualización de cada área (en v5.2.0 reemplaza al antiguo reverse_content_order)

    • Mediante display.regions se controla qué áreas se muestran (listas de tendencias, nuevas tendencias, RSS, sección de visualización independiente, análisis de IA)

  3. Palabras clave de filtrado global

    • Nueva marca de área [GLOBAL_FILTER], que admite el filtrado global de contenido que no quieras ver

    • Casos de uso: filtrar anuncios, marketing, contenido de baja calidad, etc.

🐳 Optimización de generación de HTML con doble ruta en Docker

  • Corrección de problema: se resolvió el problema de que index.html no se sincronizaba con el host en entornos Docker

  • Generación con doble ruta: el HTML de resumen diario se genera simultáneamente en dos ubicaciones

    • index.html (raíz del proyecto): para acceso desde GitHub Pages

    • output/index.html: montado mediante Docker Volume, accesible directamente desde el host

  • Compatibilidad: se garantiza que Docker, GitHub Actions y entornos de ejecución local puedan acceder correctamente a la versión web del informe

🐳 Soporte de imagen MCP para Docker

  • Nuevo espejo de imagen del servicio MCP independiente wantcat/trendradar-mcp

  • Soporte para implementar la función de análisis de IA mediante Docker, que se ofrece a través de una interfaz HTTP (puerto 3333)

  • Arquitectura de doble contenedor: el servicio de noticias y el servicio MCP se ejecutan de forma independiente, pudiendo escalarse y reiniciarse por separado

  • Ver detalles en Implementación con Docker - Servicio MCP

🌐 Soporte de servidor web

  • Nuevo servidor web integrado que permite acceder a los informes generados a través del navegador

  • Control de inicio/detención mediante el comando manage.py: docker exec -it trendradar python manage.py start_webserver

  • Dirección de acceso: http://localhost:8080 (el puerto es configurable)

  • Características de seguridad: servicio de archivos estáticos, restricción de directorios, acceso local

  • Soporta dos modos: inicio automático y control manual

📖 Optimización de documentación

🔧 Notas de actualización:

  • Usuarios de GitHub Fork: actualizar main.py, config/config.yaml (nuevo soporte de envío a múltiples cuentas, sin necesidad de modificar la configuración existente)

  • Envío a múltiples cuentas: nueva función, desactivada por defecto, la configuración existente de cuenta única no se ve afectada

2025/11/26 - mcp-v1.0.3

Actualización del módulo MCP:

  • Nueva herramienta de análisis de fechas resolve_date_range, que resuelve el problema de fechas inconsistentes calculadas por los modelos de IA

  • Soporte para el análisis de expresiones de fecha en lenguaje natural (esta semana, últimos 7 días, mes pasado, etc.)

  • El número total de herramientas aumenta de 13 a 14

2025/11/28 - v3.4.1

🔧 Optimización de formatos

  1. Mejora del envío de Bark

    • Bark ahora admite renderizado de Markdown

    • Se activa el formato Markdown nativo: negritas, enlaces, listas, bloques de código, etc.

    • Se elimina la conversión a texto plano, aprovechando al máximo la capacidad de renderizado nativo de Bark

  2. Formato preciso de Slack

    • Se utiliza el formato dedicado mrkdwn para procesar el contenido por lotes

    • Mayor precisión en la estimación del tamaño en bytes (evita exceder el límite de mensajes)

    • Formato de enlaces optimizado: <url|text> y sintaxis de negrita: *text*

  3. Mejora de rendimiento

    • La conversión de formato se realiza durante el proceso de división en lotes, evitando un segundo procesamiento

    • Estimación precisa del tamaño del mensaje, reduciendo la tasa de fallos de envío

🔧 Notas de actualización:

  • Usuarios de GitHub Fork: actualizar main.py, config.yaml

2025/11/25 - v3.4.0

🎉 Nuevo soporte de envío a Slack

  1. Canal de envío para colaboración en equipo

    • Soporte para Slack Incoming Webhooks (la herramienta de colaboración en equipo más popular del mundo)

    • Gestión centralizada de mensajes, ideal para compartir noticias de actualidad en equipo

    • Soporte para formato mrkdwn (negritas, enlaces, etc.)

  2. Múltiples métodos de implementación

    • GitHub Actions: configurar el Secret SLACK_WEBHOOK_URL

    • Docker: variable de entorno SLACK_WEBHOOK_URL

    • Ejecución local: archivo de configuración config/config.yaml

📖 Tutorial de configuración detallado: Inicio rápido - Envío a Slack

  • Optimización de la experiencia de instalación de MCP con un clic en setup-windows.bat y setup-windows-en.bat

🔧 Notas de actualización:

  • Usuarios de GitHub Fork: actualizar main.py, config/config.yaml, .github/workflows/crawler.yml

2025/11/24 - v3.3.0

🎉 Nuevo soporte de envío a Bark

  1. Canal de envío exclusivo para iOS

    • Soporte para envío a Bark (basado en APNs, plataforma iOS)

    • Gratuito y de código abierto, simple y eficiente, sin anuncios

    • Soporta tanto el servidor oficial como servidores propios

  2. Múltiples métodos de implementación

    • GitHub Actions: configurar el Secret BARK_URL

    • Docker: variable de entorno BARK_URL

    • Ejecución local: archivo de configuración config/config.yaml

📖 Tutorial de configuración detallado: Inicio rápido - Envío a Bark

🐛 Corrección de errores

  • Se corrige el problema de que la configuración ntfy_server_url en config.yaml no surtía efecto (#345)

🔧 Notas de actualización:

  • Usuarios de GitHub Fork: actualizar main.py, config/config.yaml, .github/workflows/crawler.yml

2025/11/23 - v3.2.0

🎯 Nuevas funciones de personalización avanzada

  1. Configuración de prioridad de ordenación de palabras clave

    • Soporta dos estrategias de ordenación: prioridad por popularidad vs. prioridad por orden de configuración

    • Satisface diferentes escenarios de uso: seguimiento de tendencias o atención personalizada

  2. Control preciso de la cantidad mostrada

    • Configuración global: limita uniformemente la cantidad de palabras clave mostradas

    • Configuración individual: usa la sintaxis @número para establecer límites para palabras clave específicas

    • Control efectivo de la longitud de las notificaciones, destacando el contenido importante

📖 Tutorial de configuración detallado: Configuración de palabras clave - Configuración avanzada

🔧 Notas de actualización:

  • Usuarios de GitHub Fork: actualizar main.py, config/config.yaml

2025/11/18 - mcp-v1.0.2

Actualización del módulo MCP:

  • Optimización del caso en que al consultar las noticias de hoy se podían devolver erróneamente fechas pasadas

2025/11/22 - v3.1.1

  • Corrección del problema de bloqueo causado por datos anómalos: se resuelve el error 'float' object has no attribute 'lower' que algunos usuarios encontraban en el entorno de GitHub Actions

  • Nuevo mecanismo de doble protección: filtrado de títulos no válidos (None, float, cadenas vacías) en la fase de obtención de datos, además de comprobación de tipos en el punto de llamada de la función

  • Mayor estabilidad del sistema, garantizando el funcionamiento normal incluso cuando las fuentes de datos devuelven formatos anómalos

Notas de actualización (usuarios de GitHub Fork):

  • Actualización obligatoria: main.py

  • Se recomienda el método de actualización de versión menor: copiar y reemplazar los archivos mencionados

2025/11/20 - v3.1.0

  • Nuevo soporte de envío a WeChat personal: la aplicación de WeChat Empresarial puede enviar notificaciones al WeChat personal, sin necesidad de instalar la app de WeChat Empresarial

  • Soporta dos formatos de mensaje: markdown (robot de grupo de WeChat Empresarial) y text (aplicación de WeChat personal)

  • Nueva variable de entorno WEWORK_MSG_TYPE, compatible con GitHub Actions, Docker, docker compose y otros métodos de implementación

  • El modo text elimina automáticamente la sintaxis de Markdown, ofreciendo un efecto de envío de texto plano

  • Ver las instrucciones de configuración de "Envío a WeChat personal" en Inicio rápido

Notas de actualización (usuarios de GitHub Fork):

  • Actualización obligatoria: main.py, config/config.yaml

  • Actualización opcional: .github/workflows/crawler.yml (si se implementa con GitHub Actions)

  • Se recomienda el método de actualización de versión menor: copiar y reemplazar los archivos mencionados

2025/11/12 - v3.0.5

  • Corrección del error de lógica en la configuración del puerto SSL/TLS para el envío de correos

  • Optimización de los proveedores de correo (QQ/163/126) para usar por defecto el puerto 465 (SSL)

  • Nuevo soporte de variables de entorno en Docker: los elementos de configuración principales (enable_crawler, report_mode, push_window, etc.) admiten sobrescritura mediante variables de entorno, resolviendo el problema de que los usuarios de NAS no podían modificar los archivos de configuración (ver sección 🐳 Implementación con Docker)

2025/10/26 - mcp-v1.0.1

Actualización del módulo MCP:

  • Corrección del error de transmisión de parámetros de fecha en las consultas

  • Unificación del formato de parámetros de tiempo en todas las herramientas

2025/10/31 - v3.0.4

  • Se resuelve el error de Feishu causado por contenido de notificaciones demasiado largo, implementando el envío por lotes

2025/10/23 - v3.0.3

  • Ampliación del rango de visualización de mensajes de error de ntfy

2025/10/21 - v3.0.2

  • Corrección del problema de codificación en el envío de ntfy

2025/10/20 - v3.0.0

Actualización importante - Lanzamiento de la función de análisis de IA

  • Funciones principales:

    • Nuevo servidor de análisis de IA basado en MCP (Model Context Protocol)

    • Soporte para 17 herramientas de análisis inteligente: consultas básicas, búsqueda inteligente, análisis avanzado, consulta RSS, gestión del sistema

    • Interacción en lenguaje natural: consulta y análisis de datos de noticias mediante conversación

    • Soporte para múltiples clientes: Claude Desktop, Cherry Studio, Cursor, Cline, etc.

  • Capacidades de análisis:

    • Análisis de tendencias de temas (seguimiento de popularidad, ciclo de vida, detección de viralización, predicción de tendencias)

    • Información de datos (comparación de plataformas, estadísticas de actividad, co-ocurrencia de palabras clave)

    • Análisis de sentimiento, búsqueda de noticias similares, generación de resúmenes inteligentes

    • Búsqueda de noticias históricas relacionadas, búsqueda multimodo

  • Notas de actualización:

    • Esta es una función de análisis de IA independiente, no afecta a la función de envío existente

    • Se puede usar de forma opcional, sin necesidad de actualizar la implementación existente

2025/10/15 - v2.4.4

  • Contenido de la actualización:

    • Corrección del problema de codificación en el envío de ntfy + 1

    • Corrección del problema de evaluación de la ventana de tiempo de envío

  • Notas de actualización:

    • Se recomienda [actualización de versión menor]

2025/10/10 - v2.4.3

Gracias a nidaye996 por el problema de experiencia detectado

  • Contenido de la actualización:

    • Refactorización del "modo de envío silencioso" renombrándolo como "control de ventana de tiempo de envío", mejorando la comprensión de la función

    • Se aclara que la ventana de tiempo de envío es una función adicional opcional, que puede combinarse con los tres modos de envío

    • Mejora de comentarios y descripciones en la documentación para una mayor claridad en el propósito de la función

  • Notas de actualización:

    • Esto es solo una refactorización, no es necesario actualizar

2025/10/8 - v2.4.2

  • Contenido de la actualización:

    • Corrección del problema de codificación en el envío de ntfy

    • Corrección del problema de archivos de configuración faltantes

    • Optimización del efecto de envío de ntfy

    • Nueva función de exportación de imágenes por secciones en GitHub Pages

  • Notas de actualización:

    • Se recomienda [actualización de versión mayor]

2025/10/2 - v2.4.0

Nueva notificación de envío ntfy

  • Funciones principales:

    • Soporte para el servicio público ntfy.sh y servidores autoalojados

  • Escenarios de uso:

    • Ideal para usuarios que valoran la privacidad (soporta autoalojamiento)

    • Envío multiplataforma (iOS, Android, Desktop, Web)

    • Sin necesidad de registro de cuenta (servidor público)

    • Código abierto y gratuito (licencia MIT)

  • Notas de actualización:

    • Se recomienda [actualización de versión mayor]

2025/09/26 - v2.3.2

  • Corrección del problema de que se omitía la comprobación de configuración de notificaciones por correo (#88)

Notas de corrección:

  • Se resuelve el problema de que, incluso con la configuración de notificaciones por correo correcta, el sistema seguía mostrando "no se ha configurado ningún webhook"

2025/09/22 - v2.3.1

  • Nueva función de envío por correo electrónico, que permite enviar informes de noticias de actualidad a una dirección de correo

  • Detección inteligente de SMTP: identifica automáticamente la configuración de más de 10 proveedores de correo, como Gmail, QQ Mail, Outlook, NetEase Mail, etc.

  • Formato HTML elegante: el contenido del correo utiliza el mismo formato HTML que la versión web, con un diseño cuidado y adaptado a dispositivos móviles

  • Soporte de envío por lotes: admite múltiples destinatarios, separados por comas para enviar a varias personas a la vez

  • SMTP personalizado: se puede personalizar el servidor SMTP y el puerto

  • Corrección del problema de conexión de red en la compilación de Docker

Instrucciones de uso:

  • Escenarios de aplicación: ideal para usuarios que necesitan archivar correos, compartir en equipo o informes programados

  • Correos compatibles: Gmail, QQ Mail, Outlook/Hotmail, 163/126 Mail, Sina Mail, Sohu Mail, etc.

Notas de actualización:

  • Esta actualización contiene bastantes cambios; si desea actualizar, se recomienda [actualización de versión mayor]

2025/09/17 - v2.2.0

  • Nueva función de guardado de imágenes de noticias con un clic, para compartir fácilmente las noticias de actualidad que te interesan

Instrucciones de uso:

  • Escenarios de aplicación: cuando hayas activado la versión web siguiendo el tutorial (GitHub Pages)

  • Método de uso: abre el enlace web con el móvil o el ordenador y haz clic en el botón "Guardar como imagen" en la parte superior de la página

  • Resultado real: el sistema generará automáticamente una imagen elegante con el informe de noticias actual, que se guardará en el álbum de tu móvil o en el escritorio de tu ordenador

  • Facilidad para compartir: puedes enviar directamente esta imagen a tus amigos, publicarla en tus momentos o compartirla en el grupo de trabajo, para que otros también puedan ver la información importante que has encontrado

2025/09/13 - v2.1.2

  • Se resuelve el problema de fallo en el envío de noticias de DingTalk debido a los límites de capacidad de envío (mediante envío por lotes)

2025/09/04 - v2.1.1

  • Corrección del problema de que Docker no podía ejecutarse correctamente en ciertas arquitecturas

  • Publicación oficial de la imagen Docker wantcat/trendradar, con soporte multiarquitectura

  • Optimización del proceso de implementación con Docker, sin necesidad de compilación local para un uso rápido

2025/08/30 - v2.1.0

Mejoras principales:

  • Optimización de la lógica de envío: de "enviar en cada ejecución" a "envío controlable dentro de una ventana de tiempo"

  • Control de ventana de tiempo: se puede establecer el rango de tiempo de envío, evitando interrupciones fuera del horario laboral

  • Frecuencia de envío opcional: dentro del intervalo de tiempo, se admite envío único o envío múltiple

Notas de actualización:

  • Esta función está desactivada por defecto; es necesario activar manualmente el control de ventana de tiempo de envío en config.yaml

  • La actualización requiere actualizar simultáneamente los archivos main.py y config.yaml

2025/08/27 - v2.0.4

  • Esta versión no es una corrección de funciones, sino un recordatorio importante

  • Por favor, guarda bien tus webhooks, no los hagas públicos, no los hagas públicos, no los hagas públicos

  • Si has implementado este proyecto en GitHub mediante fork, introduce los webhooks en GitHub Secret, no en config.yaml

  • Si ya has expuesto los webhooks o los has introducido en config.yaml, se recomienda eliminarlos y regenerarlos

2025/08/06 - v2.0.3

  • Optimización del efecto de la versión web de GitHub Pages para facilitar su uso en dispositivos móviles

2025/07/28 - v2.0.2

  • Refactorización del código

  • Se resuelve el problema de que el número de versión se olvidaba fácilmente de modificar

2025/07/27 - v2.0.1

Problemas corregidos:

  1. Problema de ejecución anómala causado por los saltos de línea CRLF en el script shell de docker

  2. Problema lógico por el que, cuando frequency_words.txt estaba vacío, el envío de noticias también resultaba vacío

  • Tras la corrección, cuando elijas que frequency_words.txt esté vacío, se enviarán todas las noticias, pero debido a las limitaciones de tamaño de los mensajes, se recomienda hacer los siguientes ajustes

    • Opción 1: desactivar el envío al móvil y elegir solo la implementación con GitHub Pages (esta es la opción que ofrece la información más completa, ya que reordenará las noticias de actualidad de todas las plataformas según tu algoritmo de búsqueda de tendencias personalizado)

    • Opción 2: reducir las plataformas de envío, priorizando WeChat Empresarial o Telegram, ya que en estas dos he implementado la función de envío por lotes (debido a que el envío por lotes afecta a la experiencia de envío, y solo estas dos plataformas ofrecen una capacidad de envío tan limitada, me vi obligado a implementar el envío por lotes, pero al menos garantiza que la información recibida sea completa)

    • Opción 3: se puede combinar con la opción 2, eligiendo el modo current o incremental para reducir eficazmente el contenido enviado de una sola vez

2025/07/17 - v2.0.0

Refactorización importante:

  • Refactorización de la gestión de configuración: toda la configuración se gestiona ahora a través del archivo config/config.yaml (main.py sigue sin dividirse, para facilitar la copia y actualización)

  • Actualización de los modos de ejecución: soporte para tres modos - daily (resumen diario), current (ranking actual), incremental (monitoreo incremental)

  • Soporte de Docker: solución completa de implementación con Docker, compatible con ejecución en contenedores

Descripción de los archivos de configuración:

  • config/config.yaml - archivo de configuración principal (configuración de la aplicación, configuración del rastreador, configuración de notificaciones, configuración de plataformas, etc.)

  • config/frequency_words.txt - configuración de palabras clave (configuración de términos de monitoreo)

2025/07/09 - v1.4.1

Nueva función: se añade el envío incremental (configurar FOCUS_NEW_ONLY en la cabecera de main.py). Este interruptor solo se centra en temas nuevos, no en la popularidad continua, y solo envía notificaciones cuando hay contenido nuevo.

Problemas corregidos: en ciertos casos, se producían anomalías ocasionales de formato debido a símbolos especiales contenidos en las propias noticias.

2025/06/23 - v1.3.0

Los mensajes de envío de WeChat Empresarial y Telegram tienen límites de longitud; para ello, he adoptado el método de dividir los mensajes para su envío. Documentación de desarrollo en WeChat Empresarial y Telegram

2025/06/21 - v1.2.1

En las versiones anteriores a esta, no solo era necesario copiar y reemplazar main.py, sino que también había que copiar y reemplazar crawler.yml https://github.com/sansan0/TrendRadar/blob/master/.github/workflows/crawler.yml

2025/06/19 - v1.2.0

Gracias a claude research por recopilar las APIs de cada plataforma, lo que me permitió completar rápidamente la adaptación de las plataformas (aunque el código quedó más redundante~

  1. Soporte para los canales de envío de Telegram, WeChat Empresarial y DingTalk, con configuración multicanal y envío simultáneo

2025/06/18 - v1.1.0

¡200 estrellas⭐! Sigo animando a todos~ Recientemente, gracias a mi "insistencia", muchas personas han dado me gusta, compartido y recomendado mi cuenta pública, y he visto los datos de ánimo de cuentas específicas en el panel de administración. Muchos se han convertido en seguidores de la ronda ángel (llevo poco más de un mes con la cuenta pública, aunque la registré hace siete u ocho años, jaja, subí al tren temprano pero salí tarde). Pero como no me habéis dejado comentarios ni mensajes privados, no puedo responder a cada uno y agradeceros el apoyo. ¡Gracias a todos aquí!

  1. Actualización importante: se han añadido pesos, ahora las noticias que ves son las más populares y con más atención, apareciendo en la parte superior

  2. Actualización de la documentación de uso, porque se han añadido muchas funciones recientemente y la documentación anterior la escribí de forma perezosa y simple (ver el tutorial completo de configuración de ⚙️ frequency_words.txt a continuación)

2025/06/16 - v1.0.0

  1. Se añade un aviso de actualización de versión del proyecto, activado por defecto. Para desactivarlo, cambia "FEISHU_SHOW_VERSION_UPDATE": True a False en main.py

2025/06/13+14

  1. Se elimina el código de compatibilidad; los que hayan hecho fork anteriormente, al copiar el código directamente verán anomalías el mismo día (se restablecerá al día siguiente)

  2. Se añade una visualización de noticias nuevas en la parte inferior de feishu y html

2025/06/09

¡100 estrellas⭐! Escribo una pequeña función para animar a todos El archivo frequency_words.txt añade una función de 【palabras obligatorias】, usando el signo +

  1. Sintaxis de las palabras obligatorias:
    Para que una noticia se incluya en el envío, tanto "Tang Seng" como "Zhu Bajie" deben aparecer simultáneamente en el título

+唐僧
+猪八戒
  1. Las palabras de filtro tienen mayor prioridad:
    Si una palabra de filtro coincide con "Tang Seng recitando sutras" en el título, entonces, aunque la palabra obligatoria contenga "Tang Seng", no se mostrará

+唐僧
!唐僧念经

2025/06/02

  1. La página web y los mensajes de Feishu admiten el salto directo a la noticia detallada desde el móvil

  2. Optimización del efecto de visualización + 1

2025/05/26

  1. Optimización del efecto de visualización de los mensajes de Feishu

✨ Funciones principales

Agregación de tendencias de toda la red

  • Zhihu

  • Douyin

  • bilibili Tendencias

  • Wallstreetcn

  • Tieba

  • Baidu Tendencias

  • CLS Popular

  • The Paper

  • ifeng

  • Toutiao

  • Weibo

Por defecto se monitorizan 11 plataformas principales, y también se pueden añadir plataformas adicionales

💡 Tutorial de configuración detallado en Detalles de configuración - Configuración de plataformas

Soporte de fuentes RSS (nuevo en v4.5.0)

Soporte para la captura de fuentes RSS/Atom, con estadísticas agrupadas por palabras clave (con el mismo formato que los rankings):

  • Formato unificado: RSS y rankings utilizan la misma coincidencia de palabras clave y formato de visualización

  • Configuración simple: añade directamente las fuentes RSS en config.yaml

  • Envío combinado: los rankings y RSS se combinan en un solo mensaje de envío

  • Filtro de novedad: filtra automáticamente los artículos antiguos que superen un número determinado de días, evitando envíos duplicados. Soporta un número de días predeterminado global y configuración independiente por fuente

💡 RSS utiliza el mismo frequency_words.txt que los rankings para el filtrado de palabras clave

Editor de configuración visual

Proporciona una interfaz de configuración gráfica basada en web, sin necesidad de editar manualmente archivos YAML. Mediante formularios se pueden modificar y exportar todos los elementos de configuración.

👉 Prueba en línea: https://sansan0.github.io/TrendRadar/

Estrategia de envío inteligente

Tres modos de envío:

Modo

Escenario de uso

Características de envío

Resumen diario (daily)

Gestores de empresa/usuarios normales

Envío puntual de todas las noticias coincidentes del día (incluye las enviadas anteriormente)

Ranking actual (current)

Autónomos/creadores de contenido

Envío puntual de las noticias coincidentes del ranking actual (las que permanecen en el ranking aparecen cada vez)

Monitoreo incremental (incremental)

Inversores/operadores

Solo envía contenido nuevo, cero duplicados

💡 Guía de selección rápida:

  • No quieres ver noticias duplicadas → usa incremental (monitoreo incremental)

  • Quieres ver la tendencia completa del ranking → usa current (ranking actual)

  • Necesitas un informe de resumen diario → usa daily (resumen diario)

Comparación detallada y tutorial de configuración en Detalles de configuración - Explicación de los modos de envío

Funciones adicionales (opcionales):

Función

Descripción

Predeterminado

Sistema de programación

Programación día a día de lunes a domingo: asigna diferentes intervalos de tiempo, modos de envío y estrategias de análisis de IA para cada día. Cada intervalo puede configurar de forma independiente el método de filtrado (palabras clave/IA) y la dirección de interés, permitiendo ver diferentes tipos de noticias en diferentes momentos. Incluye 5 ajustes predefinidos (always_on / morning_evening / office_hours / night_owl / custom), y también se puede personalizar. Soporta diferenciación entre días laborables/fines de semana, intervalos que cruzan la medianoche, deduplicación por período, detección de conflictos de intervalos (v6.0.0 + v6.5.0)

morning_evening

Configuración del orden del contenido

Ajusta el orden de visualización de cada sección (rankings, nuevas tendencias, RSS, sección de visualización independiente, análisis de IA) mediante display.region_order; controla si cada sección se muestra mediante display.regions (nuevo en v5.2.0)

Ver archivo de configuración

Cambio de modo de visualización

keyword=agrupado por palabras clave, platform=agrupado por plataforma (nuevo en v4.6.0)

keyword

💡 Tutorial de configuración detallado en ¿Cómo se muestra el contenido enviado? y ¿Cuándo me envía notificaciones?

Filtrado preciso de contenido

Configura palabras clave personales (por ejemplo: IA, BYD, políticas educativas) para enviar solo las tendencias relevantes y filtrar la información irrelevante

💡 Tutorial de configuración básica: Configuración de palabras clave - Sintaxis básica

💡 Tutorial de configuración avanzada: Configuración de palabras clave - Configuración avanzada

💡 También se puede optar por no filtrar y enviar todas las tendencias completas (dejando frequency_words.txt vacío)

Filtrado inteligente de noticias con IA (nuevo en v6.5.0)

Describe tus intereses en lenguaje natural y la IA clasificará automáticamente las noticias, sustituyendo a la coincidencia tradicional de palabras clave

  • Descripción de intereses en lenguaje natural: escribe tus áreas de interés en ai_interests.txt con lenguaje cotidiano, sin necesidad de aprender gramática de palabras clave

  • Procesamiento inteligente en dos fases: la IA primero extrae etiquetas estructuradas de la descripción de intereses, y luego clasifica y puntúa las noticias por lotes según las etiquetas

  • Control de umbral de puntuación: controla con precisión la calidad del envío mediante ai_filter.min_score, enviando solo noticias de alta relevancia

  • Garantía de respaldo automático: si el filtrado de IA falla, se vuelve automáticamente a la coincidencia por palabras clave, asegurando que el envío no se interrumpa

  • Actualización inteligente de etiquetas: cuando cambian los intereses, la IA evalúa automáticamente la magnitud del cambio y decide entre reclasificación incremental o completa

  • Cambio flexible: filter.method admite dos modos: keyword (predeterminado) y ai; Timeline puede sobrescribir por franjas horarias

  • Personalización por franjas horarias: se pueden usar diferentes archivos de palabras clave o descripciones de intereses de IA en diferentes períodos. Por ejemplo, usar el "léxico tecnológico" por la mañana para un filtrado rápido, y cambiar al "interés financiero" por la noche para un filtrado profundo con IA

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

💡 El filtrado de IA comparte la configuración del modelo con el análisis y la traducción de IA; solo necesitas configurar ai.api_key una vez

Análisis de tendencias de temas candentes

Seguimiento en tiempo real de los cambios de popularidad de las noticias, para que no solo sepas "qué está en tendencia", sino que también comprendas "cómo evolucionan los temas candentes"

  • Seguimiento en la línea de tiempo: registra el lapso de tiempo completo de cada noticia, desde su primera aparición hasta su última

  • Cambios de popularidad: estadísticas de los cambios de ranking y la frecuencia de aparición de las noticias en diferentes períodos

  • Detección de novedades: identifica en tiempo real los temas candentes recién aparecidos, marcados con 🆕 para avisar de inmediato

  • Análisis de persistencia: distingue entre temas candentes puntuales y noticias profundas que siguen desarrollándose

  • Comparación multiplataforma: el rendimiento de ranking de la misma noticia en diferentes plataformas, para ver las diferencias de atención mediática

💡 La descripción del formato de envío se encuentra en Explicación del estilo de mensajes

Algoritmo de temas candentes personalizado

Ya no te dejes llevar por los algoritmos de cada plataforma; TrendRadar reorganiza las tendencias de toda la red

💡 Los tres porcentajes se pueden ajustar; consulta Configuración detallada - Ajuste de pesos de temas candentes

Envío multicanal y multi-cuenta

Soporta WeCom (+ plan de envío a WeChat personal), Feishu, DingTalk, Telegram, Correo electrónico, ntfy, Bark, Slack, Webhook genérico (compatible con Discord, IFTTT y cualquier otra plataforma); los mensajes llegan directamente al teléfono y al correo

💡 Tutorial de configuración detallado en Enviar a múltiples grupos/dispositivos

Traducción multilingüe con IA (nuevo en v5.2.0)

Traduce el contenido enviado a cualquier idioma, rompiendo las barreras del idioma; ya sea para leer temas candentes nacionales o para suscribirte a información internacional mediante RSS, podrás obtenerla fácilmente en tu idioma materno

  • Traducción con un clic: configura ai_translation.enabled: true y el idioma de destino en config.yaml

  • Soporte multilingüe: admite cualquier idioma como English, Korean, Japanese, French, etc.

  • Procesamiento por lotes inteligente: traduce automáticamente por lotes, reduciendo las llamadas a la API y ahorrando costos

  • Estilo personalizable: personaliza el estilo de traducción y la terminología mediante ai_translation_prompt.txt

  • Configuración de modelo compartida: comparte la configuración del modelo de la sección ai con la función de análisis de IA

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

💡 La función de traducción comparte la configuración del modelo con la función de análisis de IA; solo necesitas configurar ai.api_key una vez para usar ambas funciones

Referencia de fuentes RSS: a continuación se presentan algunas colecciones de fuentes de suscripción RSS, que puedes elegir según tus necesidades

  • awesome-tech-rss - Blogs y medios de tecnología, emprendimiento y programación

  • awesome-rss-feeds - Colección de RSS de los principales medios de noticias del mundo

⚠️ Parte del contenido de los medios extranjeros puede involucrar temas sensibles; el modelo de IA podría negarse a traducirlos. Se recomienda seleccionar las fuentes de suscripción según tus necesidades reales

Mejoras del visor de informes HTML (nuevo en v6.6.0)

Al abrir el informe HTML enviado en el navegador, se desbloquea automáticamente una experiencia mejorada (los clientes de correo no se ven afectados):

  • Modo de pantalla ancha: en escritorio, cambia automáticamente a un diseño de 1200px de ancho para aprovechar al máximo el espacio de la pantalla

  • Cambio rápido de pestañas: tanto la agrupación por palabras clave como las secciones independientes admiten navegación por pestañas, olvídate de desplazarte por páginas largas

  • Modo oscuro: cambia a un tema oscuro con un clic y recuerda automáticamente tu preferencia

  • Búsqueda en tiempo real: presiona / para abrir el cuadro de búsqueda y filtrar los títulos de las noticias al instante

  • Copiado con un clic: pasa el cursor sobre el número de la noticia para copiar el título y el enlace

  • Atajos de teclado: W pantalla ancha, D modo oscuro, / búsqueda, ? ver todos los atajos

💡 Todas las mejoras se basan en la mejora progresiva; los clientes de correo siguen mostrando el diseño original de 600px, sin regresiones

Arquitectura de almacenamiento flexible (actualización importante en v4.0.0)

Soporte de múltiples backends de almacenamiento:

  • Almacenamiento en la nube remoto: predeterminado en el entorno de GitHub Actions, compatible con el protocolo S3 (R2/OSS/COS, etc.); los datos se almacenan en la nube, sin contaminar el repositorio

  • Base de datos SQLite local: predeterminada en entornos Docker/locales, con control total de los datos

  • Selección automática de backend: cambia inteligentemente el método de almacenamiento según el entorno de ejecución

💡 Explicación detallada en ¿Dónde se guardan los datos?

Despliegue en múltiples plataformas

  • GitHub Actions: rastreo automático programado + almacenamiento en la nube remoto (requiere renovación con check-in)

  • Despliegue con Docker: ejecución contenerizada multiarquitectura, almacenamiento local de datos

  • Ejecución local: ejecución directa en Windows/Mac/Linux

Análisis y envío con IA (nuevo en v5.0.0)

Utiliza modelos de IA de gran tamaño para realizar un análisis profundo del contenido enviado, generando automáticamente informes de perspectivas sobre temas candentes

  • Análisis inteligente: analiza automáticamente las tendencias de los temas candentes, la popularidad de las palabras clave, las correlaciones multiplataforma y el impacto potencial

  • Múltiples proveedores: basado en la interfaz unificada de LiteLLM, compatible con más de 100 proveedores de IA (DeepSeek, OpenAI, Gemini, Anthropic, Ollama local, etc.), y también admite el cambio automático a modelos de respaldo

  • Modo de análisis independiente: el alcance del análisis de la IA puede ser diferente del envío — el envío solo publica mensajes nuevos (para evitar molestias), pero la IA puede analizar todas las noticias del día (para ver la tendencia completa)

  • Envío flexible: opcional enviar solo el contenido original, solo el análisis de IA, o ambos

  • Prompt personalizable: personaliza el ángulo de análisis mediante config/ai_analysis_prompt.txt

💡 Tutorial de configuración detallado en Deja que la IA analice los temas candentes por mí

Sección de visualización independiente (nuevo en v5.0.0)

Proporciona una visualización completa de las listas de tendencias para plataformas específicas, sin verse afectada por el filtrado de palabras clave

  • Lista de tendencias completa: visualización completa de la lista de tendencias de la plataforma especificada, ideal para usuarios que quieren ver el ranking completo

  • Visualización independiente de RSS: el contenido de las fuentes RSS se puede mostrar por completo, sin limitaciones de palabras clave

  • Análisis profundo con IA: se puede activar de forma independiente el análisis de IA de la lista de tendencias completa, sin necesidad de mostrarlo en el envío

  • Configuración flexible: admite configurar las plataformas a mostrar, las fuentes RSS y el número máximo de elementos

💡 Tutorial de configuración detallado en ¿Cómo se muestra el contenido enviado? - Sección de visualización independiente

Análisis inteligente con IA (nuevo en v3.0.0)

Sistema de análisis conversacional con IA basado en el protocolo MCP (Model Context Protocol), que te permite explorar en profundidad los datos de noticias con lenguaje natural

💡 Consejo de uso: la función de IA requiere datos de noticias locales

  • El proyecto incluye datos de prueba, puedes probar la función de inmediato

  • Se recomienda desplegar y ejecutar el proyecto por tu cuenta para obtener datos más actualizados

Consulta Análisis inteligente con IA

Despliegue web

Después de ejecutarlo, se genera index.html en el directorio raíz, que es la página completa del informe de noticias.

Método de despliegue: haz clic en Use this template para crear un repositorio, que se puede desplegar en plataformas de alojamiento estático como Cloudflare Pages o GitHub Pages.

💡 Consejo: al habilitar GitHub Pages obtendrás una dirección de acceso en línea; entra en Repositorio → Settings → Pages para activarlo. Vista previa del resultado

⚠️ La función de almacenamiento automático de GitHub Actions original se ha retirado (ese método causó una carga excesiva en los servidores de GitHub, afectando la estabilidad de la plataforma).

☁️ Despliegue automático en Cloudflare Pages (opcional · acceso más rápido en China)

GitHub Pages es lento de acceder en China; la velocidad de acceso de Cloudflare Pages es más amigable. Una vez configurado, cada ejecución de GitHub Actions enviará automáticamente el index.html más reciente a Cloudflare Pages, sin necesidad de ninguna operación manual.

Requisito previo: haber completado el Despliegue con GitHub Actions y poder generar el informe web correctamente.

① Crear un proyecto de Cloudflare Pages

Inicia sesión en Cloudflare DashboardWorkers & PagesCreatePages → selecciona Upload assets (subida directa), escribe un nombre de proyecto (por ejemplo, trendradar, recuérdalo), sube un archivo cualquiera para completar la primera creación (luego será sobrescrito automáticamente por Actions).

② Obtener el API Token y el Account ID

  • API Token: avatar en la esquina superior derecha → My ProfileAPI TokensCreate TokenCreate Custom Token, permiso: AccountCloudflare PagesEdit; después de crearlo, copia el Token (solo se muestra una vez).

  • Account ID: se encuentra en la barra lateral derecha de la página Workers & Pages (o en la esquina inferior derecha de la página Overview de cualquier dominio).

③ Añadir 3 Secrets en el repositorio de GitHub

Entra en el repositorio SettingsSecrets and variablesActionsNew repository secret y añade en orden:

Name (nombre)

Secret (valor)

CLOUDFLARE_API_TOKEN

El API Token creado en el paso anterior

CLOUDFLARE_ACCOUNT_ID

Tu Cloudflare Account ID

CLOUDFLARE_PROJECT_NAME

El nombre del proyecto de Cloudflare Pages (por ejemplo, trendradar)

Una vez configurado, la próxima ejecución de GitHub Actions se desplegará automáticamente; la dirección de acceso será https://<nombre-del-proyecto>.pages.dev.

💡 Nota: si falta cualquiera de los tres Secrets, el despliegue de Cloudflare se omitirá automáticamente, sin afectar otras funciones como el envío de noticias; si necesitas vincular un dominio personalizado, puedes configurarlo en Custom domains del proyecto de Pages.

Reducir la dependencia de las aplicaciones

Pasar de "estar secuestrado por las recomendaciones algorítmicas" a "obtener proactivamente la información que quieres"

Público objetivo: inversores, creadores de contenido, relaciones públicas de empresas, usuarios comunes interesados en la actualidad

Escenarios típicos: monitoreo de inversiones en bolsa, seguimiento de la opinión pública de marcas, atención a la dinámica del sector, obtención de información de la vida cotidiana

Efecto en la web (efecto del envío por correo)

Efecto del envío por Feishu

Efecto del envío con análisis de IA

Efecto web

Efecto de envío por Feishu

Efecto de envío con análisis de IA

🚀 Inicio rápido

Aviso: se recomienda consultar primero la documentación oficial más reciente para asegurarte de que los pasos de configuración estén actualizados.

Elige el método de despliegue que se adapte a ti

Ⓐ Opción 1: Despliegue con Docker (recomendado 🔥)

  • Características: más estable que GitHub Actions, almacenamiento local de datos (sin necesidad de configurar almacenamiento en la nube)

  • Adecuado para: quienes tienen su propio servidor, NAS o una computadora que funciona a largo plazo

  • Nota: debes leer y comprender el flujo de configuración básico a continuación y luego saltar al tutorial de Docker para desplegar.

Ⓑ Opción 2: Despliegue con GitHub Actions (contenido de este capítulo ⬇️)

  • Características: sin servidor, los datos se almacenan en almacenamiento en la nube remoto (configuración recomendada)

  • Adecuado para: usuarios sin servidor, que aprovechan los recursos gratuitos de GitHub

  • Nota: se requiere configurar el almacenamiento en la nube para una experiencia completa, y se debe renovar periódicamente con check-in

Ⓒ Opción 3: Despliegue local (uv)

  • Características: se ejecuta directamente en tu máquina, sin necesidad de Docker; adecuado para desarrollo y depuración o usuarios sin entorno Docker

  • Adecuado para: usuarios de Windows / Mac / Linux (sin necesidad de preinstalar Python; uv lo gestiona automáticamente)

  • Pasos:

    1. Instalar uv (si ya está instalado, puedes omitirlo; no es necesario preinstalar 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. Clonar y ejecutar

    git clone https://github.com/sansan0/TrendRadar.git
    cd TrendRadar
    uv sync          # 自动安装 Python 和项目依赖
    uv run python -m trendradar

    💡 Consejo:

    • uv gestiona automáticamente la versión de Python, sin necesidad de instalar Python manualmente

    • Los usuarios de Windows también pueden hacer doble clic en setup-windows.bat para instalar las dependencias con un solo clic

    • Los usuarios de Mac pueden usar bash setup-mac.sh

    • Antes de ejecutar, edita config/config.yaml para completar la configuración de los canales de envío, etc.; consulta el flujo de configuración básico a continuación

1️⃣ Paso 1: Obtener el código del proyecto

Haz clic en el botón verde [Use this template] en la esquina superior derecha de la página de este repositorio → selecciona "Create a new repository".

⚠️ Aviso:

  • Todas las menciones a "Fork" en la documentación posterior se pueden entender como "Use this template"

  • Usar Fork puede causar errores de ejecución; consulta Issue #606

2️⃣ Paso 2: Configurar los GitHub Secrets

En tu repositorio fork, entra en Settings > Secrets and variables > Actions > New repository secret

📌 Nota importante (lee atentamente):

  • Un Name corresponde a un Secret: por cada elemento de configuración que añadas, haz clic una vez en el botón "New repository secret" y completa un par de "Name" y "Secret"

  • Es normal no poder ver el valor después de guardar: por razones de seguridad, al volver a editar después de guardar, solo se puede ver el Name (nombre), no el contenido del Secret (valor)

  • Prohibido crear nombres propios: el Name (nombre) del Secret debe usar estrictamente los nombres listados a continuación (como WEWORK_WEBHOOK_URL, FEISHU_WEBHOOK_URL, etc.); no puedes modificarlos ni crear nombres nuevos a tu antojo, de lo contrario el sistema no podrá reconocerlos

  • Se pueden configurar varias plataformas a la vez: el sistema enviará notificaciones a todas las plataformas configuradas

Ejemplo de configuración:

Como se muestra en la imagen anterior, cada línea es un elemento de configuración:

  • Name (nombre): debe usar los nombres fijos listados en el contenido desplegable a continuación (como WEWORK_WEBHOOK_URL)

  • Secret (valor): completa el contenido real que obtuviste de la plataforma correspondiente (como la dirección del Webhook, el Token, etc.)

Configuración del GitHub Secret (⚠️ El Name debe coincidir estrictamente):

  • Name (nombre): WEWORK_WEBHOOK_URL (copia y pega este nombre, no lo escribas a mano para evitar errores)

  • Secret (valor): la dirección del Webhook de tu bot de WeCom

Pasos para configurar el bot:

Configuración en el móvil:

  1. Abre la aplicación de WeCom → entra en el grupo de chat interno de destino

  2. Haz clic en el botón "…" en la esquina superior derecha → selecciona "Mensajes de notificación"

  3. Haz clic en "Añadir" → escribe "TrendRadar" como nombre

  4. Copia la dirección del Webhook, haz clic en guardar y configura el contenido copiado en el GitHub Secret anterior

El proceso de configuración en PC es similar

Dado que este método se basa en el mecanismo de complementos de WeCom, el formato del envío es texto plano (sin formato markdown), pero se puede enviar directamente a WeChat personal, sin necesidad de instalar la aplicación de WeCom.

Configuración del GitHub Secret (⚠️ El Name debe coincidir estrictamente):

  • Name (nombre): WEWORK_WEBHOOK_URL (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): la dirección del Webhook de tu aplicación de WeCom

  • Name (nombre): WEWORK_MSG_TYPE (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): text

Pasos de configuración:

  1. Completa la configuración del Webhook del bot de WeCom anterior

  2. Añade el Secret WEWORK_MSG_TYPE con el valor text

  3. Sigue las instrucciones de la imagen a continuación para vincular WeChat personal

  4. Una vez configurado, puedes eliminar la aplicación de WeCom del teléfono

Explicación:

  • Usa la misma dirección de Webhook que el bot de WeCom

  • La diferencia está en el formato del mensaje: text es texto plano, markdown es texto enriquecido (predeterminado)

  • El formato de texto plano elimina automáticamente toda la sintaxis de markdown (negritas, enlaces, etc.)

Nota: el antiguo "Asistente de bots de Feishu (BotBuilder)" se retirará el 30 de junio de 2026; usa el método de bot personalizado de grupo a continuación. Las direcciones de webhook de BotBuilder existentes dejarán de funcionar y deberán reconfigurarse.

Si se habilita el análisis de IA, el envío por Feishu puede sufrir ocasionalmente (aproximadamente 5% de probabilidad) retrasos de varios minutos (se presume que es la revisión de cumplimiento de la plataforma sobre el contenido generado por IA).

Configuración del GitHub Secret (⚠️ El Name debe coincidir estrictamente):

  • Name (nombre): FEISHU_WEBHOOK_URL (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): la dirección del Webhook de tu bot personalizado de Feishu (formato: https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxx)

Pasos de configuración:

  1. Entra en el grupo de destino, haz clic en el botón Más en la esquina superior derecha del grupo y haz clic en Configuración.

Entrar en la configuración del grupo

  1. En la interfaz de Configuración de la derecha, haz clic en Bots del grupo.

Hacer clic en Bots del grupo

  1. En la interfaz de Bots del grupo, haz clic en Añadir bot.

  2. En el cuadro de diálogo Añadir bot, busca y haz clic en Bot personalizado.

Seleccionar bot personalizado

  1. Configura el avatar, el nombre (como "TrendRadar Monitoreo de temas candentes") y la descripción del bot personalizado, y haz clic en Añadir.

Configurar la información del bot

  1. Obtén la dirección de webhook del bot personalizado y haz clic en Finalizar.

⚠️ Guarda esta dirección de webhook de forma segura; no la publiques en sitios públicos como GitHub o blogs, para evitar que se filtre y sea utilizada maliciosamente para enviar mensajes de spam.

Copiar la dirección del webhook

  1. Configura la dirección del Webhook copiada en FEISHU_WEBHOOK_URL en los GitHub Secrets.

💡 Una vez configurado, puedes hacer clic en la imagen del bot a la derecha del nombre del grupo para entrar en la página de detalles del bot personalizado y gestionar la información de configuración.

📖 Documentación oficial: Guía de uso de bots personalizados

Configuración del GitHub Secret (⚠️ El Name debe coincidir estrictamente):

  • Name (nombre): DINGTALK_WEBHOOK_URL (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): la dirección del Webhook de tu bot de DingTalk

Pasos para configurar el bot:

  1. Crear el bot (solo compatible con PC):

    • Abre el cliente de PC de DingTalk y entra en el grupo de chat de destino

    • Haz clic en el icono de configuración del grupo (⚙️) → desplázate hacia abajo hasta encontrar "Bots" y haz clic

    • Selecciona "Añadir bot" → "Personalizado"

  2. Configurar el bot:

    • Configura el nombre del bot

    • Configuración de seguridad:

      • Palabra clave personalizada: configura "热点" (tema candente)

  3. Completar la configuración:

    • Marca el acuerdo de términos de servicio → haz clic en "Finalizar"

    • Copia la URL del Webhook obtenida

    • Configura la URL en DINGTALK_WEBHOOK_URL en los GitHub Secrets

Nota: en el móvil solo se pueden recibir mensajes, no se pueden crear bots nuevos.

Configuración del GitHub Secret (⚠️ El Name debe coincidir estrictamente):

  • Name (nombre): TELEGRAM_BOT_TOKEN (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): el Token de tu Bot de Telegram

  • Name (nombre): TELEGRAM_CHAT_ID (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): tu Chat ID de Telegram

Explicación: Telegram requiere configurar dos Secrets; haz clic dos veces en el botón "New repository secret" para añadirlos

Pasos para configurar el bot:

  1. Crear el bot:

    • Busca @BotFather en Telegram (presta atención a las mayúsculas; debe tener una insignia azul con una marca de verificación y algo como 37849827 monthly users; ese es el oficial; hay cuentas que imitan al oficial, ten cuidado al distinguirlas)

    • Envía el comando /newbot para crear un bot nuevo

    • Configura el nombre del bot (debe terminar en "bot"; es fácil encontrar nombres repetidos, así que tendrás que esforzarte en pensar nombres diferentes)

    • Obtén el Token del Bot (formato como: 123456789:AAHfiqksKZ8WmR2zSjiQ7_v4TMAKdiHm9T0)

  2. Obtener el Chat ID:

    Método 1: mediante la API oficial

    • Primero envía un mensaje a tu bot

    • Accede a: https://api.telegram.org/bot<Tu Token del Bot>/getUpdates

    • En el JSON devuelto, encuentra el número en "chat":{"id":número}

    Método 2: usar una herramienta de terceros

    • Busca @userinfobot y envía /start

    • Obtén tu ID de usuario como Chat ID

  3. Configurar en GitHub:

    • TELEGRAM_BOT_TOKEN: completa el Token del Bot obtenido en el paso 1

    • TELEGRAM_CHAT_ID: completa el Chat ID obtenido en el paso 2

  • Nota: para evitar el abuso de la función de envío masivo de correos, el envío masivo actual hace que todos los destinatarios puedan ver las direcciones de correo de los demás.

  • Si nunca has configurado este tipo de envío por correo, no se recomienda intentarlo

⚠️ Dependencia de configuración importante: el envío por correo requiere el archivo de informe HTML. Asegúrate de que storage.formats.html en config/config.yaml esté configurado como true:

storage:
  formats:
    sqlite: true
    txt: false
    html: true   # 必须启用,否则邮件推送会失败

Si se configura como false, el envío por correo mostrará el error: 错误:HTML文件不存在或未提供: None

Configuración del GitHub Secret (⚠️ El Name debe coincidir estrictamente):

  • Name (nombre): EMAIL_FROM (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): la dirección de correo del remitente

  • Name (nombre): EMAIL_PASSWORD (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): la contraseña del correo o el código de autorización

  • Name (nombre): EMAIL_TO (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): la dirección de correo del destinatario (varios destinatarios separados por comas en inglés; también puede ser la misma que EMAIL_FROM, enviándote a ti mismo)

  • Name (nombre): EMAIL_SMTP_SERVER (configuración opcional, copia y pega este nombre)

  • Secret (valor): la dirección del servidor SMTP (puede dejarse vacío; el sistema lo detectará automáticamente)

  • Name (nombre): EMAIL_SMTP_PORT (configuración opcional, copia y pega este nombre)

  • Secret (valor): el puerto SMTP (puede dejarse vacío; el sistema lo detectará automáticamente)

Explicación: el envío por correo requiere configurar al menos 3 Secrets obligatorios (EMAIL_FROM, EMAIL_PASSWORD, EMAIL_TO); los dos últimos son configuración opcional

Proveedores de correo compatibles (detección automática de la configuración SMTP):

Proveedor de correo

Dominio

Servidor SMTP

Puerto

Cifrado

Gmail

gmail.com

smtp.gmail.com

587

TLS

QQ Mail

qq.com

smtp.qq.com

465

SSL

Outlook

outlook.com

smtp-mail.outlook.com

587

TLS

Hotmail

hotmail.com

smtp-mail.outlook.com

587

TLS

Live

live.com

smtp-mail.outlook.com

587

TLS

163 Mail

163.com

smtp.163.com

465

SSL

126 Mail

126.com

smtp.126.com

465

SSL

Sina Mail

sina.com

smtp.sina.com

465

SSL

Sohu Mail

sohu.com

smtp.sohu.com

465

SSL

189 Mail

189.cn

smtp.189.cn

465

SSL

Aliyun Mail

aliyun.com

smtp.aliyun.com

465

TLS

Yandex Mail

yandex.com

smtp.yandex.com

465

TLS

iCloud Mail

icloud.com

smtp.mail.me.com

587

SSL

Detección automática: al usar los correos anteriores, no es necesario configurar manualmente EMAIL_SMTP_SERVER ni EMAIL_SMTP_PORT, el sistema los detectará automáticamente.

Nota de comentarios:

  • Si has probado con otros proveedores de correo y funciona, no dudes en abrir un Issue para informarnos, y lo añadiré a la lista de soporte.

  • Si alguna de las configuraciones de correo anteriores es incorrecta o no funciona, también abre un Issue para reportarlo y ayudar a mejorar el proyecto.

Agradecimientos especiales:

  • Gracias a @DYZYD por contribuir con la configuración de 189 Mail (189.cn) y completar la prueba de autoenvío (#291)

  • Gracias a @longzhenren por contribuir con la configuración de Aliyun Mail (aliyun.com) y completar la prueba (#344)

  • Gracias a @ACANX por contribuir con la configuración de Yandex Mail (yandex.com) y completar la prueba (#663)

  • Gracias a @Sleepy-Tianhao por contribuir con la configuración de iCloud Mail (icloud.com) y completar la prueba (#728)

Configuración de correos comunes:

QQ Mail:

  1. Inicia sesión en la versión web de QQ Mail → Configuración → Cuenta

  2. Activa el servicio POP3/SMTP

  3. Genera un código de autorización (16 caracteres alfabéticos)

  4. EMAIL_PASSWORD debe contener el código de autorización, no la contraseña de QQ

Gmail:

  1. Activa la verificación en dos pasos

  2. Genera una contraseña específica para la aplicación

  3. EMAIL_PASSWORD debe contener la contraseña específica de la aplicación

163/126 Mail:

  1. Inicia sesión en la versión web → Configuración → POP3/SMTP/IMAP

  2. Activa el servicio SMTP

  3. Configura el código de autorización del cliente

  4. EMAIL_PASSWORD debe contener el código de autorización

Configuración avanzada: Si la detección automática falla, puedes configurar SMTP manualmente:

  • EMAIL_SMTP_SERVER: por ejemplo, smtp.gmail.com

  • EMAIL_SMTP_PORT: por ejemplo, 587 (TLS) o 465 (SSL)

Si hay varios destinatarios (nota: separados por comas en inglés):

Dos formas de uso:

Forma 1: Uso gratuito (recomendado para principiantes) 🆓

Características:

  • ✅ Sin necesidad de registrarse, uso inmediato

  • ✅ 250 mensajes al día (suficiente para el 90% de los usuarios)

  • ✅ El nombre del Topic actúa como "contraseña" (elige un nombre difícil de adivinar)

  • ⚠️ Los mensajes no están cifrados, no son adecuados para información sensible, pero sí para la información no sensible de este proyecto

Inicio rápido:

  1. Descarga la aplicación ntfy:

  2. Suscríbete a un tema (elige un nombre difícil de adivinar):

    建议格式:trendradar-{你的名字缩写}-{随机数字}
    
    不能使用中文
    
    ✅ 好例子:trendradar-zs-8492
    ❌ 坏例子:news、alerts(太容易被猜到)
  3. Configura el GitHub Secret (⚠️ El nombre debe coincidir exactamente):

    • Name (nombre): NTFY_TOPIC (copia y pega este nombre, no lo escribas a mano)

    • Secret (valor): escribe el nombre del tema al que te suscribiste

    • Name (nombre): NTFY_SERVER_URL (configuración opcional, copia y pega este nombre)

    • Secret (valor): déjalo vacío (por defecto usa ntfy.sh)

    • Name (nombre): NTFY_TOKEN (configuración opcional, copia y pega este nombre)

    • Secret (valor): déjalo vacío

    Nota: ntfy requiere al menos 1 Secret obligatorio (NTFY_TOPIC), los dos últimos son opcionales

  4. Prueba:

    curl -d "测试消息" ntfy.sh/你的主题名称

Forma 2: Autoalojamiento (control total de privacidad) 🔒

Para quién: usuarios con servidor, que buscan privacidad total y tienen habilidades técnicas

Ventajas:

  • ✅ Totalmente de código abierto (Apache 2.0 + GPLv2)

  • ✅ Control total de los datos

  • ✅ Sin restricciones

  • ✅ Coste cero

Despliegue con Docker en un solo paso:

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

Configurar TrendRadar:

NTFY_SERVER_URL: https://ntfy.yourdomain.com
NTFY_TOPIC: trendradar-alerts  # 自托管可用简单名称
NTFY_TOKEN: tk_your_token  # 可选:启用访问控制

Suscribirse en la aplicación:

  • Haz clic en "Use another server"

  • Introduce la dirección de tu servidor

  • Introduce el nombre del tema

  • (Opcional) Introduce las credenciales de acceso


Preguntas frecuentes:

250 mensajes al día son suficientes para la mayoría de los usuarios. Calculando una captura cada 30 minutos, son unas 48 notificaciones al día, más que suficiente.

Si eliges un nombre aleatorio y suficientemente largo (como trendradar-zs-8492-news), la fuerza bruta es prácticamente imposible:

  • ntfy tiene límites de velocidad estrictos (1 solicitud por segundo)

  • 64 caracteres posibles (A-Z, a-z, 0-9, _, -)

  • Una cadena aleatoria de 10 caracteres tiene 64^10 posibilidades (se necesitarían años para descifrarla)


Recomendación de elección:

Tipo de usuario

Plan recomendado

Razón

Usuario normal

Forma 1 (gratuita)

Simple y rápida, suficiente

Usuario técnico

Forma 2 (autoalojamiento)

Control total, sin límites

Usuario de alto uso

Forma 3 (de pago)

Míralo tú mismo en la web oficial

Enlaces relacionados:

Configuración del GitHub Secret (⚠️ El nombre debe coincidir exactamente):

  • Name (nombre): BARK_URL (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): tu URL de notificación de Bark

Introducción a Bark:

Bark es una herramienta de notificaciones gratuita y de código abierto para iOS, caracterizada por su simplicidad, rapidez y ausencia de anuncios.

Formas de uso:

Forma 1: Usar el servidor oficial (recomendado para principiantes) 🆓

  1. Descarga la aplicación Bark:

  2. Obtén la URL de notificación:

    • Abre la aplicación Bark

    • Copia la URL de notificación que se muestra en la página de inicio (formato: https://api.day.app/your_device_key)

    • Configura la URL en los GitHub Secrets como BARK_URL

Forma 2: Servidor propio (control total de privacidad) 🔒

Para quién: usuarios con servidor, que buscan privacidad total y tienen habilidades técnicas

Despliegue con Docker en un solo paso:

docker run -d \
  --name bark-server \
  -p 8080:8080 \
  finab/bark-server

Configurar TrendRadar:

BARK_URL: http://your-server-ip:8080/your_device_key

Notas:

  • ✅ Bark usa notificaciones APNs, máximo 4KB por mensaje

  • ✅ Admite envío automático por lotes, sin preocuparse por mensajes demasiado largos

  • ✅ El formato de notificación es texto plano (elimina automáticamente la sintaxis de Markdown)

  • ⚠️ Solo compatible con la plataforma iOS

Enlaces relacionados:

Configuración del GitHub Secret (⚠️ El nombre debe coincidir exactamente):

  • Name (nombre): SLACK_WEBHOOK_URL (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): tu URL de Incoming Webhook de Slack

Introducción a Slack:

Slack es una herramienta de colaboración en equipo; los Incoming Webhooks permiten enviar mensajes a canales de Slack.

Pasos de configuración:

Paso 1: Crear una aplicación de Slack

  1. Visita la página de API de Slack:

  2. Elige el método de creación:

    • Haz clic en "From scratch" (crear desde cero)

  3. Rellena la información de la aplicación:

    • App Name: escribe el nombre de la aplicación (por ejemplo, TrendRadar o Monitor de noticias)

    • Workspace: selecciona tu espacio de trabajo en la lista desplegable

    • Haz clic en el botón "Create App"

Paso 2: Activar Incoming Webhooks

  1. Navega a Incoming Webhooks:

    • En el menú lateral, busca y haz clic en "Incoming Webhooks"

  2. Activa la función:

    • Busca el interruptor "Activate Incoming Webhooks"

    • Cambia el interruptor de OFF a ON

    • La página se actualizará automáticamente mostrando nuevas opciones de configuración

Paso 3: Generar la URL del Webhook

  1. Añade un nuevo Webhook:

    • Desplázate hasta el final de la página

    • Haz clic en el botón "Add New Webhook to Workspace"

  2. Elige el canal de destino:

    • Aparecerá una página de autorización

    • Selecciona en la lista desplegable el canal que recibirá los mensajes (por ejemplo, #noticias)

    • ⚠️ Si quieres elegir un canal privado, primero debes unirte a ese canal

  3. Autoriza la aplicación:

    • Haz clic en el botón "Allow" para completar la autorización

    • El sistema te redirigirá automáticamente a la página de configuración

Paso 4: Copia y guarda la URL del Webhook

  1. Consulta la URL generada:

    • En la sección "Webhook URLs for Your Workspace"

    • Verás la URL del Webhook recién generada

    • Formato: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

  2. Copia la URL:

    • Haz clic en el botón "Copy" a la derecha de la URL

    • O selecciona la URL manualmente y cópiala

  3. Configúrala en TrendRadar:

    • GitHub Actions: añade la URL a los GitHub Secrets como SLACK_WEBHOOK_URL

    • Prueba local: introduce la URL en el campo slack_webhook_url de config/config.yaml

    • Despliegue con Docker: añade la URL a la variable SLACK_WEBHOOK_URL del archivo docker/.env


Notas:

  • ✅ Compatible con formato Markdown (se convierte automáticamente a mrkdwn de Slack)

  • ✅ Admite envío automático por lotes (4KB por lote)

  • ✅ Ideal para colaboración en equipo, gestión centralizada de mensajes

  • ⚠️ La URL del Webhook contiene una clave secreta, nunca la hagas pública

Vista previa del formato del mensaje:

*[第 1/2 批次]*

📊 *热点词汇统计*

🔥 *[1/3] AI ChatGPT* : 2 条

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

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

Enlaces relacionados:

Configuración del GitHub Secret (⚠️ El nombre debe coincidir exactamente):

  • Name (nombre): GENERIC_WEBHOOK_URL (copia y pega este nombre, no lo escribas a mano)

  • Secret (valor): tu URL de Webhook

  • Name (nombre): GENERIC_WEBHOOK_TEMPLATE (configuración opcional, copia y pega este nombre)

  • Secret (valor): cadena de plantilla JSON, compatible con los marcadores de posición {title} y {content}

Introducción al Webhook genérico:

El Webhook genérico admite cualquier plataforma que acepte solicitudes HTTP POST, incluyendo, entre otras:

  • Discord: envía notificaciones al canal mediante Webhook

  • Matrix: envía notificaciones mediante puente Webhook

  • IFTTT: activa flujos de automatización

  • Servicio propio: cualquier servicio personalizado compatible con Webhook

Ejemplos de configuración:

Configuración de Discord

  1. Obtén la URL del Webhook:

    • Entra en la configuración del servidor de Discord → Integraciones → Webhooks

    • Crea un nuevo Webhook y copia la URL

  2. Configura la plantilla:

    {"content": "{content}"}
  3. Configuración del GitHub Secret:

    • GENERIC_WEBHOOK_URL: URL del Webhook de Discord

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

Plantilla personalizada

La plantilla admite dos marcadores de posición:

  • {title} - título del mensaje

  • {content} - contenido del mensaje

Ejemplo de plantilla:

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

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

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

Notas:

  • ✅ Compatible con formato Markdown (igual que el formato de WeCom)

  • ✅ Admite envío automático por lotes

  • ✅ Admite configuración de múltiples cuentas (separadas por ;)

  • ⚠️ La plantilla debe ser un JSON válido

  • ⚠️ Cada plataforma tiene requisitos de formato diferentes, consulta la documentación de la plataforma de destino

3️⃣ Tercer paso: Prueba manual de las notificaciones de noticias

⚠️ Recordatorio:

  • Después de completar los pasos 1-2, ¡prueba inmediatamente! Una vez que la prueba sea exitosa, ajusta la configuración según sea necesario (paso 4)

  • Entra en tu propio proyecto, ¡no en este proyecto!

Cómo encontrar tu página de Actions:

  • Método 1: abre la página de inicio de tu proyecto fork y haz clic en la pestaña Actions en la parte superior

  • Método 2: accede directamente a https://github.com/tu-nombre-de-usuario/TrendRadar/actions

Comparación de ejemplos:

  • ❌ Proyecto del autor: https://github.com/sansan0/TrendRadar/actions

  • ✅ Tu proyecto: https://github.com/tu-nombre-de-usuario/TrendRadar/actions

Pasos de la prueba:

  1. Entra en la página de Actions de tu proyecto

  2. Busca "Get Hot News" (debe ser exactamente ese texto), haz clic y luego haz clic en el botón "Run workflow" de la derecha para ejecutarlo

    • Si no ves ese texto, consulta #109 para resolverlo

  3. En unos 3 minutos, el mensaje se enviará a la plataforma que configuraste

⚠️ Recordatorio:

  • No hagas pruebas manuales con demasiada frecuencia para evitar activar los límites de GitHub Actions

  • Después de hacer clic en Run workflow, necesitas actualizar la página del navegador para ver el nuevo registro de ejecución

4️⃣ Cuarto paso: Explicación de la configuración (opcional)

La configuración predeterminada ya funciona correctamente. Si necesitas ajustes personalizados, basta con conocer los siguientes archivos:

Archivo

Función

config/config.yaml

Archivo de configuración principal: modo de notificación, ventana de tiempo, lista de plataformas, pesos de temas de actualidad, etc.

config/frequency_words.txt

Archivo de palabras clave: configura los términos que te interesan para filtrar el contenido de las notificaciones

config/ai_analysis_prompt.txt

Plantilla de prompt de IA: personaliza el rol del analista de IA y las dimensiones de análisis

.github/workflows/crawler.yml

Frecuencia de ejecución: controla cada cuánto se ejecuta (⚠️ modificar con precaución)

👉 Tutorial de configuración detallado: Explicación de la configuración

5️⃣ Quinto paso: Almacenamiento en la nube remoto y configuración de registro

Cambio importante en v4.0.0: se introduce el mecanismo de "detección de actividad"; GitHub Actions requiere un registro periódico para mantener su funcionamiento.

  • Ciclo de funcionamiento: la validez es de 7 días; cuando la cuenta atrás termina, el servicio se suspende automáticamente.

  • Método de renovación: en la página de Actions, activa manualmente el workflow "Check In" para restablecer la validez de 7 días.

  • Ruta de operación: ActionsCheck InRun workflow

  • Filosofía de diseño:

    • Si olvidas registrarte durante 7 días, quizás estas noticias no son una necesidad para ti. Una pausa oportuna te ayuda a desconectarte del flujo de información y dar un respiro a tu mente.

    • GitHub Actions es un valioso recurso informático público. El mecanismo de registro busca evitar el desperdicio inútil de capacidad de cómputo, garantizando que los recursos se asignen a usuarios realmente activos y que los necesitan. Gracias por tu comprensión y apoyo.


Sobre la configuración del almacenamiento en la nube remoto (elige según el método de despliegue):

  • Usuarios de GitHub Actions:

    • Situación actual: cada ejecución de Actions es un entorno completamente nuevo, no se guardan archivos. Si no configuras almacenamiento en la nube, el proyecto funcionará en modo ligero (sin notificaciones incrementales, sin seguimiento histórico).

    • Recomendación: configura almacenamiento en la nube remoto para una experiencia completa.

  • Usuarios de Docker / local:

    • Situación actual: los datos se guardan por defecto en el disco local.

    • Recomendación: el almacenamiento en la nube es opcional, puede servir como copia de seguridad remota.

⚠️ Requisito previo (importante):

Según las reglas de la plataforma Cloudflare, para activar R2 es necesario vincular un método de pago.

  • Propósito: solo para verificación de identidad (Verify Only), no genera cargos.

  • Pago: compatible con tarjetas de crédito de doble moneda o PayPal de China.

  • Uso: la cuota gratuita de R2 (10GB de almacenamiento/mes) es suficiente para el funcionamiento diario de este proyecto, sin preocuparse por costes.


Configuración del GitHub Secret (se deben añadir 4 elementos):

Name (nombre)

Descripción del Secret (valor)

S3_BUCKET_NAME

Nombre del bucket (por ejemplo, trendradar-data)

S3_ACCESS_KEY_ID

ID de clave de acceso (Access Key ID)

S3_SECRET_ACCESS_KEY

Clave de acceso (Secret Access Key)

S3_ENDPOINT_URL

Endpoint de la API S3 (por ejemplo, R2: https://<account-id>.r2.cloudflarestorage.com)

Configuración opcional:

Name (nombre)

Descripción del Secret (valor)

S3_REGION

Región (por defecto auto, algunos proveedores pueden requerir especificarla)

💡 Más opciones de configuración de almacenamiento: consulta ¿Dónde se guardan los datos?

Pasos detallados (obtención de credenciales):

  1. Entra en la vista general de R2:

    • Inicia sesión en Cloudflare Dashboard.

    • En la barra lateral izquierda, busca y haz clic en Almacenamiento de objetos R2.

  2. Crea un bucket:

    • Haz clic en Resumen

    • Haz clic en Crear bucket (Create bucket) en la esquina superior derecha.

    • Introduce un nombre (por ejemplo, trendradar-data) y haz clic en Crear bucket.

  3. Crea un token de API:

    • Vuelve a la página de Resumen.

    • En la esquina inferior derecha, haz clic en Account Details, busca y haz clic en Manage (Manage R2 API Tokens).

    • También verás S3 API: https://<account-id>.r2.cloudflarestorage.com (este es el S3_ENDPOINT_URL)

    • Haz clic en Crear token de API de cuenta.

    • ⚠️ Configuración clave:

      • Nombre del token: escribe lo que quieras (por ejemplo, github-action-write).

      • Permisos: selecciona Administrador de lectura y escritura.

      • Bucket específico: por seguridad, se recomienda seleccionar Solo para buckets específicos y elegir tu bucket (por ejemplo, trendradar-data).

    • Haz clic en Crear token de API y copia inmediatamente el Access Key ID y el Secret Access Key que se muestran (¡solo se muestran una vez!).

6️⃣ Sexto paso: Activar las notificaciones de análisis de IA

Esta es la función principal de v5.0.0: permite que la IA resuma y analice las noticias por ti. Te recomendamos probarla.

Método de configuración: Añade en los GitHub Secrets (o en .env / config.yaml):

  • AI_API_KEY: tu clave de API (compatible con DeepSeek, OpenAI, etc.)

  • AI_PROVIDER: nombre del proveedor (por ejemplo, deepseek, openai)

Eso es todo, sin necesidad de un despliegue complejo. En la próxima notificación verás el informe de análisis inteligente.

7️⃣ Séptimo paso: 🎉 ¡Despliegue exitoso!

¡Felicidades! Ahora puedes empezar a disfrutar del eficiente flujo de información que ofrece TrendRadar.

💬 Únete a la comunidad: Te invitamos a seguir la cuenta pública «硅基茶水间» para compartir tus experiencias de uso y trucos avanzados.

8️⃣ Octavo paso: Avanzado: elige tu asistente de IA

TrendRadar ofrece dos formas de usar la IA para satisfacer diferentes necesidades:

Característica

✨ Análisis de IA con push

🧠 Análisis inteligente de IA

Modo

Recepción pasiva (informe diario)

Conversación activa (investigación profunda)

Escenario

"¿Qué hay de importante hoy?"

"Analiza los cambios en la industria de la IA durante la última semana"

Despliegue

Mínimo (solo rellenar la Key)

Avanzado (requiere ejecución local/Docker)

Cliente

Móvil

Ordenador

👉 Conclusión: Primero usa Análisis de IA con push para cubrir tus necesidades diarias; si eres analista de datos o necesitas un análisis profundo, prueba entonces Análisis inteligente de IA.

⚙️ Configuración detallada

📖 Recordatorio: Este capítulo proporciona instrucciones de configuración detalladas. Se recomienda completar primero la configuración básica de Inicio rápido y volver a consultar las opciones detalladas según sea necesario.

1. ¿Qué plataformas quiero ver?

Ubicación de configuración: sección platforms de config/config.yaml

Los datos de información de este proyecto provienen de newsnow. Puedes hacer clic en el sitio web, hacer clic en [Más], y ver si hay alguna plataforma que te interese.

Para añadir plataformas específicas, puedes visitar el código fuente del proyecto y, según los nombres de archivo que contenga, modificar la configuración de platforms en el archivo config/config.yaml:

platforms:
  enabled: true                       # 是否启用热榜平台抓取
  sources:
    - id: "toutiao"
      name: "今日头条"
    - id: "baidu"
      name: "百度热搜"
    - id: "wallstreetcn-hot"
      name: "华尔街见闻"
    # 添加更多平台...

💡 Atajo: Si no sabes leer el código fuente, puedes copiar el resumen de configuración de plataformas recopilado por otros usuarios.

⚠️ Nota: No es mejor tener más plataformas. Se recomienda elegir entre 10 y 15 plataformas principales. Demasiadas plataformas provocarán una sobrecarga de información y empeorarán la experiencia de uso.

2. ¿Qué contenido me interesa?

En el archivo frequency_words.txt, dile al bot qué quieres ver y él lo vigilará por ti. Admite palabras normales, palabras obligatorias, palabras de filtro y otros modos de uso.

Tipo de sintaxis

Símbolo

Función

Ejemplo

Lógica de coincidencia

Palabra normal

Ninguno

Coincidencia básica

华为

Basta con que contenga cualquiera

Palabra obligatoria

+

Limitar el alcance

+手机

Debe contener ambas obligatoriamente

Palabra de filtro

!

Excluir ruido

!广告

Si la contiene, se excluye directamente

Límite de cantidad

@

Controlar la cantidad mostrada

@10

Mostrar como máximo 10 noticias (nuevo en v3.2.0)

Filtro global

[GLOBAL_FILTER]

Excluir contenido específico globalmente

Ver ejemplo a continuación

Filtrar en cualquier caso (nuevo en v3.5.0)

Expresión regular

/pattern/

Coincidencia de patrón precisa

/\bai\b/

Usar expresión regular para coincidir (nuevo en v4.7.0)

Nombre mostrado

=> 备注

Texto mostrado personalizado

/\bai\b/ => AI相关

Mostrar el nombre de la nota en el push y en HTML (nuevo en v4.7.0)

2.1 Sintaxis básica

Ubicación de configuración: config/frequency_words.txt

1. Palabras clave normales - Coincidencia básica
华为
OPPO
苹果

Función: Se capturará cualquier noticia cuyo título contenga cualquiera de las palabras

2. Palabras obligatorias +palabra - Limitar el alcance
华为
OPPO
+手机

Función: Solo se capturará si contiene simultáneamente la palabra normal y la palabra obligatoria

3. Palabras de filtro !palabra - Excluir ruido
苹果
华为
!水果
!价格

Función: Las noticias que contengan la palabra de filtro se excluirán directamente, incluso si contienen palabras clave

4. Límite de cantidad @número - Controlar la cantidad mostrada (nuevo en v3.2.0)
特斯拉
马斯克
@5

Función: Limitar el número máximo de noticias mostradas para ese grupo de palabras clave

Prioridad de configuración: @número > configuración global > sin límite

5. Filtro global [GLOBAL_FILTER] - Excluir contenido específico globalmente (nuevo en v3.5.0)
[GLOBAL_FILTER]
广告
推广
营销
震惊
标题党

[WORD_GROUPS]
科技
AI

华为
鸿蒙
!车

Función: Filtrar noticias que contengan palabras específicas en cualquier caso, con la máxima prioridad

Casos de uso:

  • Filtrar contenido de baja calidad: impactante, clickbait, revelaciones, etc.

  • Filtrar contenido de marketing: anuncios, promociones, patrocinios, etc.

  • Filtrar temas específicos: entretenimiento, chismes (según necesidad)

Prioridad de filtrado: filtro global > filtro dentro del grupo (!) > coincidencia de grupo

Descripción de secciones:

  • [GLOBAL_FILTER]: sección de filtro global, las palabras incluidas se filtrarán en cualquier caso

  • [WORD_GROUPS]: sección de grupos de palabras, mantiene la sintaxis existente (!, +, @)

  • Si no se usan marcadores de sección, todo se trata como grupos de palabras por defecto (compatibilidad hacia atrás)

Ejemplos de coincidencia:

[GLOBAL_FILTER]
广告

[WORD_GROUPS]
科技
AI
  • ❌ "Anuncio: lanzamiento del último producto tecnológico" ← contiene la palabra de filtro global "anuncio", se rechaza directamente

  • ✅ "Una empresa tecnológica lanza un nuevo producto de IA" ← no contiene palabras de filtro global, coincide con el grupo "tecnología"

  • ✅ "El avance de la IA genera atención" ← no contiene palabras de filtro global, coincide con "IA" del grupo "tecnología"

Notas:

  • Las palabras de filtro global deben usarse con precaución para evitar un filtrado excesivo que provoque la pérdida de contenido valioso

  • Se recomienda mantener las palabras de filtro global entre 5 y 15

  • Para el filtrado de grupos específicos, prioriza el uso de palabras de filtro dentro del grupo (prefijo !)

6. Expresiones regulares /pattern/ - Coincidencia de patrón precisa (nuevo en v4.7.0)

Las palabras clave normales usan coincidencia de subcadenas, lo cual es muy conveniente en entornos chinos, pero puede causar coincidencias erróneas en entornos en inglés. Por ejemplo, ai coincidirá con ai dentro de training.

Usando la sintaxis de expresión regular /pattern/ se puede lograr una coincidencia precisa:

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

Función: Usar expresiones regulares para la coincidencia, admite toda la sintaxis de expresiones regulares de Python

Patrones de expresión regular comunes:

Necesidad

Escritura de expresión regular

Descripción

Límite de palabra en inglés

/\bword\b/

Coincide palabras independientes, como /\bai\b/ coincide con "AI" pero no con "training"

No alfabético antes/después

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

Límite más flexible, adecuado para escenarios mixtos chino-inglés

Coincidencia al inicio

/^breaking/

Solo coincide títulos que comienzan con "breaking"

Coincidencia al final

/发布$/

Solo coincide títulos que terminan con "发布"

Alternativa múltiple

/苹果|华为|小米/

Coincide cualquiera de ellos (nota el escape |)

Ejemplos de coincidencia:

# 配置
/(?<![a-z])ai(?![a-z])/
人工智能
  • ✅ "AI is the future" ← coincide con "AI" independiente

  • ✅ "你好ai这里" ← con caracteres chinos antes y después, coincide con "ai"

  • ✅ "人工智能发展迅速" ← coincide con "人工智能"

  • ❌ "Resistance training is important" ← el "ai" de "training" no coincide

  • ❌ "The maid cleaned the room" ← el "ai" de "maid" no coincide

Uso combinado:

# 正则 + 普通词 + 过滤词
/\bai\b/
人工智能
机器学习
!广告

Notas:

  • Las expresiones regulares activan automáticamente la coincidencia sin distinción de mayúsculas y minúsculas (re.IGNORECASE)

  • Se admite la escritura estilo JavaScript como /pattern/i (las flags se ignoran porque la insensibilidad a mayúsculas ya está activada por defecto)

  • La sintaxis de expresión regular inválida se tratará como palabra normal

  • Las expresiones regulares se pueden usar en palabras normales, palabras obligatorias (+) y palabras de filtro (!)

💡 ¿No sabes escribir expresiones regulares? ¡Deja que la IA te ayude a generarlas!

Si no estás familiarizado con las expresiones regulares, puedes pedir directamente a ChatGPT / Gemini / DeepSeek que te las genere. Solo tienes que decirle a la IA:

Necesito una expresión regular de Python para coincidir con la palabra inglesa "ai", pero que no coincida con el "ai" de "training". Dame directamente la expresión regular, con el formato /pattern/, sin explicaciones adicionales.

La IA te dará un resultado similar a este: /(?<![a-zA-Z])ai(?![a-zA-Z])/

7. Nombre mostrado => nota - Texto mostrado personalizado (nuevo en v4.7.0)

Las expresiones regulares pueden no ser muy amigables al mostrarse en los mensajes push y en las páginas HTML. Usando la sintaxis => nota se puede establecer un nombre mostrado:

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

Función: Los mensajes push y las páginas HTML muestran "AI相关" en lugar de la compleja expresión regular

Formato de sintaxis:

# 正则 + 显示名称
/pattern/ => 显示名称
/pattern/i => 显示名称    # 支持 flags 写法(flags 被忽略)
/pattern/=>显示名称       # => 两边空格可选

# 普通词 + 显示名称
deepseek => DeepSeek 动态

Ejemplos de coincidencia:

# 配置
/(?<![a-zA-Z])ai(?![a-zA-Z])/ => AI 相关
人工智能

Configuración original

Mostrado en push/HTML

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

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

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

AI相关

Notas:

  • El nombre mostrado solo necesita escribirse en la primera palabra del grupo

  • Si varias palabras del grupo tienen nombre mostrado, se usa el primero

  • Si no se establece nombre mostrado, se concatenan automáticamente todas las palabras del grupo


🔗 Función de grupos de palabras - La importancia de la separación por líneas en blanco

Regla principal: Separa diferentes grupos de palabras con líneas en blanco, cada grupo se cuenta de forma independiente

Configuración de ejemplo:
iPhone
华为
OPPO
+发布

A股
上证
深证
+涨跌
!预测

世界杯
欧洲杯
亚洲杯
+比赛
Explicación de los grupos y efectos de coincidencia:

Grupo 1 - Nuevas categorías de teléfonos:

  • Palabras clave: iPhone、华为、OPPO

  • Palabra obligatoria: 发布

  • Efecto: Debe contener el nombre de la marca de teléfono y, al mismo tiempo, contener "发布"

Ejemplos de coincidencia:

  • ✅ "iPhone 15 lanzado oficialmente con precio anunciado" ← tiene "iPhone"+"发布"

  • ✅ "Transmisión en vivo de la conferencia de lanzamiento de la serie Huawei Mate60" ← tiene "华为"+"发布"

  • ✅ "Confirmada la fecha de lanzamiento del OPPO Find X7" ← tiene "OPPO"+"发布"

  • ❌ "Las ventas de iPhone alcanzan un nuevo máximo" ← tiene "iPhone" pero le falta "发布"

Grupo 2 - Mercado bursátil:

  • Palabras clave: A股、上证、深证

  • Palabra obligatoria: 涨跌

  • Palabra de filtro: 预测

  • Efecto: Seguir la situación real de subidas y bajadas del mercado, excluyendo contenido de predicciones

Ejemplos de coincidencia:

  • ✅ "Análisis de la gran subida y bajada del A股 hoy" ← tiene "A股"+"涨跌"

  • ✅ "El índice 上证 alcanza un nuevo máximo de subida y bajada" ← tiene "上证"+"涨跌"

  • ❌ "Expertos predicen la tendencia de subida y bajada del A股" ← tiene "A股"+"涨跌" pero contiene "预测"

Grupo 3 - Eventos de fútbol:

  • Palabras clave: 世界杯、欧洲杯、亚洲杯

  • Palabra obligatoria: 比赛

  • Efecto: Solo se centra en noticias relacionadas con partidos


📝 Consejos de configuración

1. De amplio a estricto
# 第一步:先用宽泛关键词测试
人工智能
AI
ChatGPT

# 第二步:发现误匹配后,加入必须词限定
人工智能
AI
ChatGPT
+技术

# 第三步:发现干扰内容后,加入过滤词
人工智能
AI
ChatGPT
+技术
!广告
!培训
2. Evitar la complejidad excesiva

No recomendado: Un grupo con demasiadas palabras

华为
OPPO
苹果
三星
vivo
一加
魅族
+手机
+发布
+销量
!假货
!维修
!二手

Recomendado: Dividir en varios grupos de palabras precisos

华为
OPPO
+新品

苹果
三星
+发布

手机
销量
+市场

2.2 Configuración avanzada (nuevo en v3.2.0)

Prioridad de ordenación de palabras clave

Ubicación de configuración: config/config.yaml

report:
  sort_by_position_first: false  # 排序优先级配置

Valor de configuración

Regla de ordenación

Escenario de aplicación

false (por defecto)

Número de temas candentes ↓ → Posición de configuración ↑

Seguir la tendencia de popularidad

true

Posición de configuración ↑ → Número de temas candentes ↓

Seguir la prioridad personal

Ejemplo: Orden de configuración A, B, C, con temas candentes A(3 noticias)、B(10 noticias)、C(5 noticias)

  • false: B(10 noticias) → C(5 noticias) → A(3 noticias)

  • true: A(3 noticias) → B(10 noticias) → C(5 noticias)

Límite global de cantidad mostrada
report:
  max_news_per_keyword: 10  # 每个关键词最多显示10条(0=不限制)

Variables de entorno de Docker:

SORT_BY_POSITION_FIRST=true
MAX_NEWS_PER_KEYWORD=10

Ejemplo completo:

# config.yaml
report:
  sort_by_position_first: true   # 按配置顺序优先
  max_news_per_keyword: 10       # 全局默认每个关键词最多10条
# frequency_words.txt
特斯拉
马斯克
@20              # 重点关注,显示20条(覆盖全局配置)

华为            # 使用全局配置,显示10条

比亚迪
@5               # 限制5条

Resultado final: Se muestran en orden de configuración 特斯拉(20 noticias) → 华为(10 noticias) → 比亚迪(5 noticias)

3. ¿Qué modo de push elegir?

Ubicación de configuración: sección report.mode de config/config.yaml

report:
  mode: "daily"  # 可选: "daily" | "incremental" | "current"

Tabla comparativa detallada

Modo

Público objetivo

Momento del push

Contenido mostrado

Caso de uso típico

Resumen diariodaily

📋 Gestores de empresas/usuarios normales

Push programado (por defecto una vez por hora)

Todas las noticias coincidentes del día+ Sección de noticias nuevas

Caso: Ver todas las noticias importantes de hoy a las 6 de la tardeCaracterística: Ver la tendencia completa del día, sin perder ningún tema candenteAviso: Incluirá noticias ya enviadas anteriormente

Ranking actualcurrent

📰 Autónomos de medios/creadores de contenido

Push programado (por defecto una vez por hora)

Noticias coincidentes del ranking actual+ Sección de noticias nuevas

Caso: Seguimiento cada hora de "qué temas están más de moda ahora"Característica: Conocer en tiempo real los cambios en el ranking de popularidadAviso: Las noticias que permanecen en el ranking aparecerán cada vez

Monitoreo incrementalincremental

📈 Inversores/operadores

Push solo cuando hay novedades

Noticias nuevas que coinciden con las palabras de frecuencia

Caso: Monitorear "特斯拉", notificar solo cuando haya nuevos mensajesCaracterística: Cero repeticiones, solo ver noticias que aparecen por primera vezAdecuado para: Monitoreo de alta frecuencia, evitar interrupciones de información

Ejemplo del efecto real del push

Supongamos que monitoreas la palabra clave "苹果" y se ejecuta cada hora:

Hora

Push en modo daily

Push en modo current

Push en modo incremental

10:00

Noticia A、Noticia B

Noticia A、Noticia B

Noticia A、Noticia B

11:00

Noticia A、Noticia B、Noticia C

Noticia B、Noticia C、Noticia D

Solo Noticia C

12:00

Noticia A、Noticia B、Noticia C

Noticia C、Noticia D、Noticia E

Solo Noticia D、Noticia E

Explicación:

  • daily: Muestra acumulativamente todas las noticias del día (A, B, C se conservan)

  • current: Muestra las noticias del ranking actual (el ranking cambia, la noticia D entra, la noticia A sale)

  • incremental: Solo envía las noticias nuevas (evita interferencias por repetición)

Preguntas frecuentes

💡 ¿Tienes este problema? 👉 "Se ejecuta cada hora, y las noticias que se enviaron en la primera ejecución vuelven a aparecer en la siguiente hora"

  • Causa: Probablemente elegiste el modo daily (resumen diario) o current (ranking actual)

  • Solución: Cambia al modo incremental (monitoreo incremental), que solo envía contenido nuevo

⚠️ Aviso importante sobre el modo incremental

Usuarios que hayan elegido el modo incremental (monitoreo incremental), presten atención:

📌 El modo incremental solo envía push cuando hay noticias coincidentes nuevas

Si no recibes push durante mucho tiempo, puede deberse a:

  1. No hay nuevos temas candentes que coincidan con tus palabras clave en el período actual

  2. La configuración de palabras clave es demasiado estricta o demasiado amplia

  3. El número de plataformas monitoreadas es reducido

Soluciones:

  • Solución 1: 👉 Optimizar la configuración de palabras clave - Ajusta la precisión de las palabras clave, añade o modifica las palabras de monitoreo

  • Solución 2: Cambiar el modo de push - Usa el modo current o daily para recibir push de forma programada

  • Solución 3: 👉 Añadir plataformas de monitoreo - Añade más plataformas de noticias para ampliar las fuentes de información

4. Ajustar el algoritmo de temas candentes

Ubicación de configuración: sección advanced.weight de config/config.yaml

advanced:
  weight:
    rank: 0.6           # 排名权重
    frequency: 0.3      # 频次权重
    hotness: 0.1        # 热度权重

La configuración predeterminada actual es una configuración equilibrada

Dos escenarios principales

Tipo de seguimiento de temas candentes en tiempo real:

advanced:
  weight:
    rank: 0.8           # 主要看排名
    frequency: 0.1      # 不太在乎持续性
    hotness: 0.1

Público objetivo: Blogueros de medios propios, profesionales de marketing, usuarios que quieren conocer rápidamente los temas más populares del momento

Tipo de seguimiento de temas profundos:

advanced:
  weight:
    rank: 0.4           # 适度看排名
    frequency: 0.5      # 重视当天内的持续热度
    hotness: 0.1

Público objetivo: Inversores, investigadores, periodistas, usuarios que necesitan un análisis profundo de tendencias

Método de ajuste

  1. Los tres números deben sumar 1.0

  2. Aumenta el que sea más importante: si te importa el ranking, aumenta rank; si te importa la persistencia, aumenta frequency

  3. Se recomienda ajustar solo 0.1-0.2 cada vez y observar el efecto

Idea principal: los usuarios que buscan velocidad y actualidad aumentan el peso del ranking; los usuarios que buscan profundidad y estabilidad aumentan el peso de la frecuencia.

5. ¿Cómo se ven los mensajes que recibo?

Ejemplo de push

📊 Estadísticas de palabras candentes

🔥 [1/3] AI ChatGPT : 2 noticias

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

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

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

📈 [2/3] 比亚迪 特斯拉 : 2 noticias

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

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

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

📌 [3/3] A股 股市 : 1 noticia

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

🆕 Noticias candentes nuevas de esta ronda (2 en total)

百度热搜 (1 noticia):

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

微博 (1 noticia):

  1. 比亚迪月销量破纪录 [2]

Hora de actualización: 2025-01-15 12:30:15

Explicación del formato de los mensajes

Elemento de formato

Ejemplo

Significado

Explicación

🔥📈📌

🔥 [1/3] AI ChatGPT

Nivel de popularidad

🔥Alta popularidad(≥10 noticias) 📈Popularidad media(5-9 noticias) 📌Popularidad normal(<5 noticias)

[Número/Total]

[1/3]

Posición de ordenación

Posición del grupo actual entre todos los grupos coincidentes

Grupo de palabras de frecuencia

AI ChatGPT

Grupo de palabras clave

Grupo del archivo de configuración, el título debe contener alguna de sus palabras

: N noticias

: 2 noticias

Cantidad coincidente

Número total de noticias coincidentes de ese grupo

[Nombre de plataforma]

[百度热搜]

Plataforma de origen

Nombre de la plataforma a la que pertenece la noticia

🆕

🆕 ChatGPT-5正式发布

Marcador de novedad

Tema candente que aparece por primera vez en esta ronda de captura

[Número]

[1]

Ranking alto

Ranking ≤ umbral, mostrado en rojo y negrita

[Número]

[7]

Ranking normal

Ranking > umbral, mostrado normalmente

- Hora

- 09时15分

Primera hora

Hora en que se descubrió por primera vez la noticia

[Hora~Hora]

[08时30分 ~ 10时45分]

Duración

Rango de tiempo desde la primera aparición hasta la última

(N veces)

(3 veces)

Frecuencia de aparición

Número total de apariciones durante el período de monitoreo

Sección de novedades

🆕 Noticias candentes nuevas de esta ronda

Resumen de nuevos temas

Muestra por separado los temas candentes nuevos de esta ronda

6. Despliegue con Docker

Explicación de las imágenes:

TrendRadar ofrece dos imágenes Docker independientes, puedes elegir el despliegue según tus necesidades:

Nombre de la imagen

Uso

Explicación

wantcat/trendradar

Servicio de push de noticias

Captura programada de noticias, envío de notificaciones (obligatorio)

wantcat/trendradar-mcp

Servicio de análisis de IA

Soporte de protocolo MCP, análisis por conversación con IA (opcional)

💡 Sugerencia:

  • Solo necesitas la función de push: despliega únicamente la imagen wantcat/trendradar

  • Necesitas la función de análisis de IA: despliega ambas imágenes

Método 1: Usar docker compose (recomendado)

  1. Crear el directorio del proyecto y la configuración:

    # 克隆项目到本地
    git clone https://github.com/sansan0/TrendRadar.git
    cd TrendRadar

    💡 Explicación: La estructura de directorios clave necesaria para el despliegue con Docker es la siguiente:

当前目录/
├── 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. Descripción de los archivos de configuración:

    Principio de división de configuración (optimización v4.6.0):

    Archivo

    Uso

    Frecuencia de modificación

    Descripción

    config/config.yaml

    Configuración de funciones principales

    Baja

    Modo de informe, configuración de notificaciones, formato de almacenamiento, ventana de notificaciones, interruptor de análisis de IA, habilitación de plataformas y otros controles de comportamiento global

    config/frequency_words.txt

    Configuración de palabras clave

    Alta

    Define las palabras de tendencia que te interesan, admite sintaxis avanzada como grupos, expresiones regulares, alias, etc.

    config/timeline.yaml

    Configuración de línea de tiempo

    Baja

    Controla la visualización y las reglas de filtrado de la línea de tiempo de noticias

    config/ai_analysis_prompt.txt

    Prompt de análisis de IA

    Media

    Personaliza la definición de rol y el formato de salida del análisis de IA (v5.0.0+)

    config/ai_translation_prompt.txt

    Prompt de traducción de IA

    Baja

    Personaliza la plantilla de prompt para la traducción de IA

    config/ai_interests.txt

    Filtrado de intereses de IA

    Media

    Define las reglas para que la IA filtre automáticamente noticias según intereses

    config/ai_filter/

    Prompts de filtrado de IA

    Baja

    Prompts internos del módulo de filtrado de IA (generalmente no requieren modificación)

    config/custom/

    Extensiones personalizadas del usuario

    Según necesidad

    custom/ai/ para prompts de IA personalizados, custom/keyword/ para archivos de palabras clave personalizados

    docker/.env

    Información sensible + configuración específica de Docker

    Baja

    URLs de webhook, claves de API, claves S3, tareas programadas, etc. No es rastreado por git

    💡 Puntos clave de la división:

    • Comportamiento de funciones → modifica config.yaml (por ejemplo, activar/desactivar una plataforma, ajustar el modo de notificación)

    • Contenido de interés → modifica frequency_words.txt (por ejemplo, añadir nuevas palabras clave de interés)

    • Estilo de salida de IA → modifica ai_analysis_prompt.txt o ai_translation_prompt.txt

    • Claves y credenciales → modifica docker/.env (claves de API, URLs de webhook y otra información sensible se centraliza aquí)

    • Extensiones personalizadas → usa el directorio config/custom/ para evitar que las modificaciones directas a la configuración predeterminada se sobrescriban al actualizar

    💡 Aplicación de cambios de configuración: después de modificar config.yaml, ejecuta docker compose up -d para reiniciar el contenedor y aplicar los cambios

    ⚙️ Mecanismo de anulación por variables de entorno (v3.0.5+)

    Las variables de entorno del archivo .env anulan la configuración correspondiente en config.yaml:

    Variable de entorno

    Configuración correspondiente

    Valor de ejemplo

    Descripción

    WEBSERVER_PORT

    -

    8080

    Puerto del servidor web

    FEISHU_WEBHOOK_URL

    notification.channels.feishu.webhook_url

    https://...

    Webhook de Feishu (varias cuentas separadas con ;)

    AI_ANALYSIS_ENABLED

    ai_analysis.enabled

    true / false

    Si se habilita el análisis de IA (nuevo en v5.0.0)

    AI_API_KEY

    ai.api_key

    sk-xxx...

    Clave de API de IA (compartida entre ai_analysis y ai_translation)

    AI_PROVIDER

    ai.provider

    deepseek / openai / gemini

    Proveedor de IA

    S3_*

    storage.remote.*

    -

    Configuración de almacenamiento remoto (5 parámetros)

    Prioridad de configuración: variables de entorno > config.yaml

    Cómo usarlo:

    • Modifica el archivo .env y completa la configuración necesaria

    • O añade directamente las variables en la sección "Variables de entorno" de la interfaz de administración de Docker en NAS/Synology

    • Se aplica al reiniciar el contenedor: docker compose up -d

  2. Iniciar el servicio:

    Opción A: Iniciar todos los servicios (notificaciones + análisis de IA)

    # 拉取最新镜像
    docker compose pull
    
    # 启动所有服务(trendradar + trendradar-mcp)
    docker compose up -d

    Opción B: Iniciar solo el servicio de notificaciones de noticias

    # 只启动 trendradar(定时抓取和推送)
    docker compose pull trendradar
    docker compose up -d trendradar

    Opción C: Iniciar solo el servicio MCP de análisis de IA

    # 只启动 trendradar-mcp(提供 AI 分析接口)
    docker compose pull trendradar-mcp
    docker compose up -d trendradar-mcp

    💡 Consejo:

    • La mayoría de los usuarios solo necesitan iniciar trendradar para usar la función de notificaciones de noticias

    • Solo necesitas iniciar trendradar-mcp si quieres usar ChatGPT/Gemini para análisis conversacional con IA

    • Los dos servicios son independientes entre sí y se pueden combinar según tus necesidades

  3. Ver el estado de ejecución:

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

Método 2: Compilación local (opción para desarrolladores)

Si necesitas personalizar el código o compilar tu propia imagen:

# 克隆项目
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

Compilar e iniciar el servicio:

# 选项 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

💡 Nota sobre parámetros de arquitectura:

  • Por defecto se compila la imagen de arquitectura amd64 (adecuada para la mayoría de servidores x86_64)

  • Para compilar la arquitectura arm64 (Apple Silicon, Raspberry Pi, etc.), configura la variable de entorno:

    export DOCKER_ARCH=arm64
    docker compose build

Actualización de imágenes

# 方式一:手动更新(爬虫 + 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

Imágenes disponibles:

Nombre de la imagen

Uso

Descripción

wantcat/trendradar

Servicio de notificaciones de noticias

Captura programada de noticias, envío de notificaciones

wantcat/trendradar-mcp

Servicio MCP

Función de análisis de IA (opcional)

Comandos de gestión del servicio

# 查看运行状态
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

💡 Nota sobre el servidor web:

  • Se inicia automáticamente en modo cron; accede a http://localhost:8080 desde el navegador para ver los informes más recientes

  • Navega por los informes históricos mediante el directorio (por ejemplo: http://localhost:8080/2025-xx-xx/)

  • El puerto se puede configurar con el parámetro WEBSERVER_PORT en el archivo .env

  • Detener manualmente: docker exec -it trendradar python manage.py stop_webserver

  • Iniciar manualmente: docker exec -it trendradar python manage.py start_webserver

  • Nota de seguridad: solo proporciona acceso a archivos estáticos, limitado al directorio output, y solo vinculado a acceso local

Persistencia de datos

Los informes y datos generados se guardan por defecto en el directorio ./output. Los datos se conservan incluso si el contenedor se reinicia o se elimina.

📊 Rutas de acceso a los informes web:

El informe HTML resumido del día generado por TrendRadar se guarda simultáneamente en dos ubicaciones:

Ubicación del archivo

Método de acceso

Escenario de uso

output/index.html

Acceso directo desde el host

Despliegue con Docker (visible en el host mediante montaje de volumen)

index.html

Acceso desde el directorio raíz

GitHub Pages (directorio raíz del repositorio, Pages lo detecta automáticamente)

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

Acceso a informes históricos

Todos los entornos (archivado por fecha)

Ejemplo de acceso local:

# 方式 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

¿Por qué hay dos index.html?

  • output/index.html: montado en el host mediante volumen de Docker, se puede abrir directamente localmente

  • index.html: enviado al repositorio por GitHub Actions, GitHub Pages lo despliega automáticamente

💡 Consejo: ambos archivos tienen contenido idéntico, puedes acceder a cualquiera de ellos.

Solución de problemas

# 检查容器状态
docker inspect trendradar

# 查看容器日志
docker logs --tail 100 trendradar

# 进入容器调试
docker exec -it trendradar /bin/bash

# 验证配置文件
docker exec -it trendradar ls -la /app/config/

Despliegue del servicio MCP (función de análisis de IA)

Si necesitas usar la función de análisis de IA, puedes desplegar un contenedor de servicio MCP independiente.

Descripción de la arquitectura:

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

Inicio rápido:

Si ya has completado el despliegue siguiendo Método 1: usar docker compose, solo necesitas iniciar el servicio MCP:

cd TrendRadar/docker
docker compose up -d trendradar-mcp

# 查看运行状态
docker ps | grep trendradar-mcp

Iniciar el servicio MCP por separado (sin usar 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

⚠️ Nota: al ejecutarlo por separado, asegúrate de que en el directorio actual existan las carpetas config/ y output/, y que contengan los archivos de configuración y los datos de noticias.

Verificar el servicio:

# 检查 MCP 服务健康状态
curl http://127.0.0.1:3333/mcp

# 查看 MCP 服务日志
docker logs -f trendradar-mcp

Configuración en el cliente de IA:

Una vez iniciado el servicio MCP, configúralo según el cliente que uses:

Cherry Studio (recomendado, configuración con GUI):

  • Configuración → Servidores MCP → Añadir

  • Tipo: streamableHttp

  • URL: http://127.0.0.1:3333/mcp

Claude Desktop / Cline (configuración JSON):

{
  "mcpServers": {
    "trendradar": {
      "url": "http://127.0.0.1:3333/mcp",
      "type": "streamableHttp"
    }
  }
}

💡 Consejo: el servicio MCP solo escucha en el puerto local (127.0.0.1) para garantizar la seguridad. Si necesitas acceso remoto, configura tú mismo un proxy inverso y autenticación.

7. ¿Cómo se muestran las notificaciones?

Ubicación de configuración: secciones report y display de 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 分析区域

Descripción de las opciones de configuración más comunes

Qué quiero ajustar

Qué parámetro modificar

Valor predeterminado

Descripción

Modo de notificación

mode

daily

Determina cuándo y qué se envía; consulta Explicación detallada de los modos de notificación

Forma de agrupación

display_mode

keyword

keyword=agrupar por palabra clave (ej. "IA"), platform=agrupar por plataforma (ej. "Weibo")

Resaltar lo importante

rank_threshold

5

Las noticias en el top 5 se muestran en negrita para ver lo más popular de un vistazo

Regla de ordenación

sort_by_position_first

false

false=las más populares primero, true=las palabras que configuraste primero

Límite de cantidad

max_news_per_keyword

0

¿Cuántas noticias como máximo por palabra clave? 0 significa sin límite

Orden de visualización

display.region_order

Ver configuración anterior

Ajusta el orden de la lista para controlar la posición de visualización de cada sección

Comparación de modos de agrupación (display_mode)

¿Quieres ver "qué noticias hay sobre este tema" o "qué noticias hay en esta plataforma"?

Modo

Forma de agrupación

Prefijo del título

Escenario de uso

keyword (predeterminado)

Agrupado por palabra clave

[Nombre de plataforma]

Me interesa "IA", quiero ver noticias sobre IA en todas las plataformas

platform

Agrupado por plataforma

[Palabra clave]

Me interesa "Weibo", quiero ver noticias sobre mis palabras de interés en Weibo

Orden de visualización de secciones (region_order)

Ajustando el orden de la lista display.region_order, puedes controlar la posición de cada sección en el mensaje de notificación.

Orden predeterminado: Nuevos temas de tendencia → Ranking de tendencias → RSS → Sección de visualización independiente → Análisis de IA

Ejemplo personalizado: ¿Quieres que el análisis de IA aparezca primero?

display:
  region_order:
    - ai_analysis                  # 移到第一行
    - new_items
    - hotlist
    - rss
    - standalone

Nota: una sección solo se muestra si cumple ambas condiciones:

  1. Está en la lista region_order

  2. Su interruptor correspondiente en display.regions está en true

Interruptores de sección (regions)

Usa display.regions para controlar si cada sección se muestra en las notificaciones:

display:
  regions:
    hotlist: true                    # 热榜区域(关键词匹配的热点新闻)
    new_items: false                 # 新增热点区域(含热榜新增 + RSS 新增)
    rss: true                       # RSS 订阅区域(关键词匹配的 RSS 内容)
    standalone: false                # 独立展示区(完整热榜/RSS,不受关键词过滤)
    ai_analysis: true                # AI 分析区域

Sección

Clave de configuración

Valor predeterminado

Descripción

Ranking de tendencias

hotlist

true

Agregación de noticias de tendencia que coinciden con palabras clave

Nuevos temas de tendencia

new_items

false

Temas de tendencia nuevos en esta ronda (incluye nuevos del ranking + nuevos de RSS). Nota: el marcador 🆕 en la sección del ranking no se ve afectado por este interruptor

RSS

rss

true

Contenido de suscripción RSS que coincide con palabras clave. Si se desactiva, se omite el análisis RSS, pero el RSS de la sección de visualización independiente no se ve afectado

Sección de visualización independiente

standalone

false

Visualización completa del contenido de plataformas/RSS específicos, sin filtrado por palabras clave

Análisis de IA

ai_analysis

true

Resumen de análisis de temas de tendencia generado por IA

Prioridad de ordenación (sort_by_position_first)

Supongamos que configuraste las palabras clave: 1. Tesla, 2. BYD. Popularidad real: BYD (10 noticias), Tesla (3 noticias).

Valor de configuración

Resultado de ordenación

Tu intención

false (predeterminado)

BYD (10 noticias) → Tesla (3 noticias)

"Lo más popular va primero"

true

Tesla (3 noticias) → BYD (10 noticias)

"El orden que configuré es la prioridad, sin importar la popularidad"

Sección de visualización independiente (standalone)

Escenario: hay algunas plataformas (como el ranking de Zhihu, HackerNews) que quiero ver completas, sin importar si coinciden con mis palabras clave.

display:
  regions:
    standalone: true                  # 推送中展示独立展示区(关闭不影响 AI 分析)

  standalone:
    platforms: ["zhihu", "weibo"]     # 这些平台的热榜给我完整显示
    rss_feeds: ["hacker-news"]        # 这些RSS源的内容给我完整显示
    max_items: 20                     # 最多显示多少条

💡 Control independiente entre visualización de notificaciones y análisis de IA: regions.standalone solo controla si la sección de visualización independiente se muestra en las notificaciones. Incluso si desactivas la visualización en las notificaciones, siempre que en la configuración de IA tengas activado include_standalone: true, la IA seguirá analizando los datos completos de estas plataformas. Ideal para usuarios que quieren que la IA haga un análisis profundo pero no quieren mensajes de notificación demasiado largos.

8. ¿Cuándo me envía las notificaciones?

Ubicación de configuración: sección schedule de config/config.yaml + config/timeline.yaml

Inicio rápido

Solo necesitas elegir una plantilla predefinida en config.yaml, no es necesario editar timeline.yaml:

schedule:
  enabled: true
  preset: "morning_evening"     # 改这里就行

Plantillas predefinidas disponibles

Nombre de la plantilla

Descripción

Comportamiento de notificaciones

morning_evening

Incremental todo el día + resumen nocturno (recomendado)

Notifica cuando hay novedades durante todo el día + resumen diario de 19:00-21:00

always_on

Monitoreo 24/7

Notifica cuando hay novedades durante todo el día, sin dividir por franjas horarias

office_hours

Horario laboral

Tres franjas en días laborables (resumen matutino → tendencias del mediodía → resumen de cierre), notificaciones libres de novedades los fines de semana

night_owl

Trasnochador

Resumen de la tarde + resumen diario de madrugada (22:00-01:00, cruza la medianoche)

custom

Totalmente personalizado

Edita la sección custom al final de timeline.yaml

Personalización total

Si ninguna plantilla predefinida satisface tus necesidades, puedes editar la sección custom al final de config/timeline.yaml para definir libremente franjas horarias, planes diarios y mapeo semanal. Consulta los comentarios dentro del archivo timeline.yaml para más detalles.

Avisos importantes

⚠️ Nota para usuarios que actualizan desde versiones anteriores:

  • v6.0.0 eliminó las configuraciones antiguas notification.push_window y ai_analysis.analysis_window

  • Usa el nuevo sistema de programación schedule + timeline.yaml

  • El antiguo "notificar una vez al día" se puede reemplazar con la plantilla morning_evening

  • El antiguo "notificar en horario laboral" se puede reemplazar con la plantilla office_hours

⚠️ Nota para usuarios de GitHub Actions:

  • El tiempo de ejecución de GitHub Actions no es estable, puede tener una desviación de ±15 minutos

  • Se recomienda dejar al menos 2 horas de margen en los rangos de tiempo

  • Si quieres notificaciones programadas precisas, se recomienda usar despliegue con Docker en un servidor personal

9. ¿Cada cuánto se ejecuta?

Ubicación de configuración: sección schedule de .github/workflows/crawler.yml

on:
  schedule:
    - cron: "0 * * * *"  # 每小时运行一次

¿Cómo modificar la frecuencia de ejecución?

GitHub Actions usa un formato de tiempo llamado "Cron". No necesitas entenderlo a fondo, solo copia y reemplaza el código siguiente.

Ubicación de configuración: sección schedule del archivo .github/workflows/crawler.yml

Quiero...

Copia esta línea de código

Descripción

Cada hora

- cron: "0 * * * *"

Configuración predeterminada, se ejecuta en el minuto 0

Cada 30 minutos

- cron: "*/30 * * * *"

Se ejecuta cada 30 minutos

Todos los días a las 8 a. m.

- cron: "0 0 * * *"

⚠️ Se escribe 0 porque la hora UTC (0:00) = hora de Pekín (8:00)

Cada media hora en horario laboral

- cron: "*/30 0-14 * * *"

Corresponde a 8:00 - 22:00 hora de Pekín

Tres veces al día (comidas)

- cron: "0 0,6,12 * * *"

Corresponde a 8:00, 14:00, 20:00 hora de Pekín

⚠️ Dos avisos importantes

  1. Diferencia horaria: los servidores de GitHub están en el extranjero y usan la hora UTC.

    • Un cálculo sencillo: la hora de Pekín que quieres configurar menos 8 horas = la hora que debes escribir.

    • Ejemplo: si quieres que se ejecute a las 20:00 hora de Pekín, escribe 12:00 en la configuración

  2. No demasiado frecuente: se recomienda que el intervalo no sea inferior a 30 minutos.

    • Los recursos gratuitos de GitHub son limitados; ejecutarlo demasiado a menudo puede hacer que la cuenta sea restringida oficialmente.

    • Además, Actions tiene un retraso de varios minutos al iniciarse, así que un control demasiado preciso no tiene sentido.

Pasos de modificación paso a paso

  1. En tu repositorio de GitHub, encuentra el archivo .github/workflows/crawler.yml

  2. Haz clic en el botón ✏️ (Editar) en la esquina superior derecha

  3. Encuentra la línea cron: "..." y reemplaza el contenido entre comillas con el "código" anterior

  4. Haz clic en el botón verde Commit changes en la esquina superior derecha para guardar

10. Enviar a varios grupos/dispositivos

⚠️ La seguridad es lo primero

¡No escribas contraseñas/Tokens directamente en config.yaml! Si subes un archivo con contraseñas a GitHub, todo el mundo podrá verlo.

La forma correcta:

  • Usuarios de GitHub Actions: añádelos en Settings -> Secrets

  • Usuarios de Docker: escríbelos en el archivo .env (este archivo no se sube)

¿Cómo enviar a varios lugares a la vez?

Muy sencillo: separa las múltiples direcciones con punto y coma ; en la configuración.

Por ejemplo: Supongamos que tienes dos grupos de Feishu y quieres que ambos reciban las notificaciones:

  • Dirección del grupo 1: https://.../webhook/aaa

  • Dirección del grupo 2: https://.../webhook/bbb

En la configuración escribe: https://.../webhook/aaa;https://.../webhook/bbb

Plataformas que admiten múltiples cuentas

Plataforma

Método de configuración

Notas

Feishu/DingTalk/WeCom

Separa varias URL de Webhook con ;

Lo más sencillo, solo conéctalas en cadena

Bark (iOS)

Separa varias URL de Key con ;

Envía a varios iPhone

Telegram

Tanto el Token como el ChatID deben separarse con ;

⚠️ Ten en cuenta que el orden debe coincidir:Token1 corresponde a ChatID1Token2 corresponde a ChatID2

ntfy

Tanto el Topic como el Token deben separarse con ;

Si algún Topic no necesita Token, déjalo vacío:token1;;token3 (el del medio está vacío)

Ejemplos de configuración habituales (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

Consejo: Para evitar abusos, por defecto se limita el envío a un máximo de 3 cuentas por plataforma. Si necesitas más, puedes modificar la configuración de MAX_ACCOUNTS_PER_CHANNEL.

11. ¿Dónde se guardan los datos?

¿Dónde se guardarán los datos?

El sistema elegirá automáticamente el lugar más adecuado, normalmente no tendrás que preocuparte:

Tu entorno de ejecución

Dónde se guardan los datos

Explicación

Docker / Ejecución local

Disco duro local

Se guardan en la carpeta output/ dentro del directorio del proyecto, puedes consultarlos en cualquier momento.

GitHub Actions

Almacenamiento en la nube

Como GitHub Actions destruye el entorno al terminar de ejecutarse, es obligatorio configurar almacenamiento en la nube (por ejemplo, Cloudflare R2).

¿Cómo configurar el almacenamiento en la nube? (Imprescindible para usuarios de GitHub Actions)

Si ejecutas con GitHub Actions, necesitas un "disco duro en la nube" para guardar los datos. Por ejemplo, puedes usar Cloudflare R2 (porque tiene cuota gratuita).

Añade estas 5 variables en GitHub Secrets:

Nombre de la variable

Qué poner

STORAGE_BACKEND

remote

S3_BUCKET_NAME

El nombre de tu bucket

S3_ACCESS_KEY_ID

Tu Access Key

S3_SECRET_ACCESS_KEY

Tu Secret Key

S3_ENDPOINT_URL

La URL del endpoint de tu R2

💡 Tutorial detallado: ¿Cómo solicitar R2? Consulta Inicio rápido - Configuración de almacenamiento remoto

¿Cuánto tiempo se conservan los datos?

Por defecto, no eliminamos tus datos automáticamente. Pero si crees que los datos ocupan demasiado espacio, puedes configurar una "limpieza automática".

Ubicación de configuración: config/config.yaml

storage:
  local:
    retention_days: 30    # 本地数据只保留 30 天 (0 表示永久)
  remote:
    retention_days: 30    # 云端数据只保留 30 天

¿La hora de envío no es correcta? (Configuración de zona horaria)

Si vives en el extranjero, o descubres que la hora de envío no coincide con tu hora local, puedes modificar la zona horaria.

Ubicación de configuración: config/config.yaml

app:
  timezone: "Asia/Shanghai"  # 默认是中国时间
  • Por ejemplo, si estás en Los Ángeles (EE. UU.), cámbialo a: America/Los_Angeles

  • Por ejemplo, si estás en Londres (Reino Unido), cámbialo a: Europe/London

12. Deja que la IA analice las tendencias por ti

¿Qué puede hacer la IA por mí?

Al activar esta función, la IA actuará como un analista profesional. En cada lote de noticias que se envíe:

  1. Lectura automática: lee todas las noticias de tendencias que coinciden

  2. Reflexión profunda: analiza las conexiones entre noticias que originalmente estaban aisladas

  3. Redacción de informes: al final del mensaje enviado, adjunta un breve y profundo "informe de perspectivas"

Contenido incluido: resumen de tendencias de temas candentes, evaluación de la dirección de la opinión pública, análisis de correlaciones entre plataformas, evaluación de impacto potencial, etc.

¿Cómo activar el análisis con IA?

La forma más sencilla es configurarlo mediante variables de entorno (se recomienda GitHub Secrets o .env).

Elementos de configuración obligatorios:

Nombre de la variable

Qué poner

Explicación

AI_ANALYSIS_ENABLED

true

Interruptor de activación

AI_API_KEY

sk-xxxxxx

Tu API Key

AI_MODEL

deepseek/deepseek-chat

Identificador del modelo (formato: provider/model)

Proveedores de IA compatibles (basado en LiteLLM, compatible con más de 100 proveedores):

Proveedor

Qué poner en AI_MODEL

Explicación

DeepSeek (recomendado)

deepseek/deepseek-chat

Relación calidad-precio excelente, ideal para análisis de alta frecuencia

OpenAI

openai/gpt-4oopenai/gpt-4o-mini

Serie GPT-4o

Google Gemini

gemini/gemini-1.5-flashgemini/gemini-1.5-pro

Serie Gemini

API personalizada

Cualquier formato

Se usa junto con AI_API_BASE

💡 Novedad: Ahora se basa en la interfaz unificada de LiteLLM, compatible con más de 100 proveedores de IA, configuración más sencilla y mejor gestión de errores.

Elementos de configuración opcionales:

Nombre de la variable

Valor por defecto

Explicación

AI_API_BASE

(automático)

Dirección de API personalizada (como OneAPI, modelos locales)

AI_TEMPERATURE

1.0

Temperatura de muestreo (0-2, cuanto más alto, más aleatorio)

AI_MAX_TOKENS

5000

Número máximo de tokens generados

AI_TIMEOUT

120

Tiempo de espera de la solicitud (segundos)

AI_NUM_RETRIES

2

Número de reintentos en caso de error

Funcionalidad avanzada: traducción con IA

Si sigues fuentes RSS extranjeras (como Hacker News), la IA puede traducir el contenido al chino y enviártelo.

Ubicación de configuración: config/config.yaml

ai_translation:
  enabled: true          # 开启翻译
  language: "Chinese"    # 翻译成什么语言 (Chinese, English, Japanese...)

Funcionalidad avanzada: personalizar la "personalidad" de la IA

¿Crees que la IA habla de forma demasiado oficial? Puedes modificar su prompt para que adopte el estilo que prefieras (por ejemplo, "comentarista mordaz", "asesor de inversiones senior").

  • Archivo a modificar: config/ai_analysis_prompt.txt

  • Método de modificación: ábrelo directamente con el bloc de notas y edítalo, dile a la IA qué estilo de análisis quieres.

✨ Análisis inteligente con IA

TrendRadar v3.0.0 incorpora una nueva función de análisis con IA basada en MCP (Model Context Protocol), que te permite conversar con los datos de noticias mediante lenguaje natural para realizar análisis en profundidad.

⚠️ Lectura obligatoria antes de usar

Aviso importante: la función de IA requiere datos de noticias locales

La función de análisis con IA no consulta directamente datos tiempo real de la red, sino que analiza los datos de noticias que ya has acumulado localmente (almacenados en la carpeta output)

Instrucciones de uso:

  1. El proyecto incluye datos de prueba: el directorio output contiene por defecto los datos de noticias de tendencias de una semana, del 2025-12-21 al 2025-12-27, que puedes usar para probar rápidamente la función de IA

  2. Límites de consulta:

    • ✅ Solo se pueden consultar datos dentro del rango de fechas existente (21-27 de diciembre, 7 días en total)

    • ❌ No se pueden consultar noticias en tiempo real ni fechas futuras

  3. Obtener datos actualizados:

    • Los datos de prueba son solo para una experiencia rápida, se recomienda desplegar el proyecto por tu cuenta para obtener datos en tiempo real

    • Despliega y ejecuta el proyecto siguiendo el Inicio rápido

    • Espera al menos 1 día para acumular datos de noticias y podrás consultar las últimas tendencias

1. Despliegue rápido

Cherry Studio ofrece una interfaz gráfica de configuración, despliegue rápido en 5 minutos, y las partes complejas se instalan con un solo clic.

Tutorial de despliegue con imágenes: ya actualizado en mi cuenta pública, responde "mcp" para obtenerlo

Tutorial de despliegue detallado: README-Cherry-Studio.md

Explicación de los modos de despliegue:

  • Modo STDIO (recomendado): una vez configurado, no es necesario repetir la configuración. El tutorial de despliegue con imágenes solo usa este modo como ejemplo.

  • Modo HTTP (alternativa): si tienes problemas con la configuración del modo STDIO, puedes usar el modo HTTP. La configuración de este modo es básicamente igual que la de STDIO, pero el contenido a copiar y pegar es solo una línea, por lo que es difícil cometer errores. La única precaución es que debes iniciar el servicio manualmente antes de cada uso. Consulta la explicación del modo HTTP al final de README-Cherry-Studio.md para más detalles.

2. Aprende a conversar con la IA

Tutorial detallado de conversación: README-MCP-FAQ.md

💡 Consejo: En realidad, no se recomienda hacer varias preguntas a la vez. Si el modelo de IA que eliges no puede ni siquiera realizar las llamadas en orden como en la imagen siguiente, te recomendamos cambiar de modelo.

🔌 Clientes MCP

El servicio MCP de TrendRadar es compatible con el protocolo estándar Model Context Protocol (MCP) y puede conectarse a varios clientes de IA compatibles con MCP para realizar análisis inteligentes.

Clientes compatibles

Notas importantes:

  • Sustituye /path/to/TrendRadar por la ruta real de tu proyecto

  • En Windows, usa doble barra invertida: C:\\Users\\YourName\\TrendRadar

  • Recuerda reiniciar después de guardar

Método 1: Modo HTTP

  1. Inicia el servicio HTTP:

    # Windows
    start-http.bat
    
    # Mac/Linux
    ./start-http.sh
  2. Configura Cursor:

    Configuración a nivel de proyecto (recomendada): Crea .cursor/mcp.json en el directorio raíz del proyecto:

    {
      "mcpServers": {
        "trendradar": {
          "url": "http://localhost:3333/mcp",
          "description": "TrendRadar 新闻热点聚合分析"
        }
      }
    }

    Configuración global: Crea ~/.cursor/mcp.json en el directorio de usuario (mismo contenido)

  3. Pasos de uso:

    • Reinicia Cursor después de guardar el archivo de configuración

    • Consulta las herramientas conectadas en "Available Tools" de la interfaz de chat

    • Empieza a usar: busca noticias relacionadas con "IA" de hoy

Método 2: Modo STDIO (recomendado)

Crea .cursor/mcp.json:

{
  "mcpServers": {
    "trendradar": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/TrendRadar",
        "run",
        "python",
        "-m",
        "mcp_server.server"
      ]
    }
  }
}

Configuración de Cline

Añade en la configuración MCP de Cline:

Modo HTTP:

{
  "trendradar": {
    "url": "http://localhost:3333/mcp",
    "type": "streamableHttp",
    "autoApprove": [],
    "disabled": false
  }
}

Modo STDIO (recomendado):

{
  "trendradar": {
    "command": "uv",
    "args": [
      "--directory",
      "/path/to/TrendRadar",
      "run",
      "python",
      "-m",
      "mcp_server.server"
    ],
    "type": "stdio",
    "disabled": false
  }
}

Configuración de Continue

Edita ~/.continue/config.json:

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "uv",
          "args": [
            "--directory",
            "/path/to/TrendRadar",
            "run",
            "python",
            "-m",
            "mcp_server.server"
          ]
        }
      }
    ]
  }
}

Ejemplo de uso:

分析最近7天"特斯拉"的热度变化趋势
生成今天的热点摘要报告
搜索"比特币"相关新闻并分析情感倾向

MCP Inspector es la herramienta de depuración oficial, se usa para probar la conexión MCP:

Pasos de uso

  1. Inicia el servicio HTTP de TrendRadar:

    # Windows
    start-http.bat
    
    # Mac/Linux
    ./start-http.sh
  2. Inicia MCP Inspector:

    npx @modelcontextprotocol/inspector
  3. Conéctate en el navegador:

    • Accede a: http://localhost:3333/mcp

    • Prueba la función "Ping Server" para verificar la conexión

    • Comprueba si "List Tools" devuelve 17 herramientas:

      • Consultas básicas: get_latest_news, get_news_by_date, get_trending_topics

      • Búsqueda inteligente: search_news, find_related_news

      • Análisis avanzado: analyze_topic_trend, analyze_data_insights, analyze_sentiment, aggregate_news, compare_periods, generate_summary_report

      • Consultas RSS: get_latest_rss, search_rss, get_rss_feeds_status

      • Administración del sistema: get_current_config, get_system_status, resolve_date_range

Cualquier cliente compatible con Model Context Protocol puede conectarse a TrendRadar:

Modo HTTP

Dirección del servicio: http://localhost:3333/mcp

Plantilla de configuración básica:

{
  "name": "trendradar",
  "url": "http://localhost:3333/mcp",
  "type": "http",
  "description": "新闻热点聚合分析"
}

Modo STDIO (recomendado)

Plantilla de configuración básica:

{
  "name": "trendradar",
  "command": "uv",
  "args": [
    "--directory",
    "/path/to/TrendRadar",
    "run",
    "python",
    "-m",
    "mcp_server.server"
  ],
  "type": "stdio"
}

Notas importantes:

  • Sustituye /path/to/TrendRadar por la ruta real del proyecto

  • En Windows, usa barras invertidas con escape: C:\\Users\\...

  • Asegúrate de haber instalado las dependencias del proyecto (haber ejecutado el script de configuración)

Preguntas frecuentes

Pasos de comprobación:

  1. Confirma que el puerto 3333 no está ocupado:

    # Windows
    netstat -ano | findstr :3333
    
    # Mac/Linux
    lsof -i :3333
  2. Comprueba si las dependencias del proyecto están instaladas:

    # 重新运行安装脚本
    # Windows: setup-windows.bat 或者 setup-windows-en.bat
    # Mac/Linux: ./setup-mac.sh
  3. Consulta los registros de errores detallados:

    uv run python -m mcp_server.server --transport http --port 3333
  4. Intenta usar un puerto personalizado:

    uv run python -m mcp_server.server --transport http --port 33333

Soluciones:

  1. Modo STDIO:

    • Confirma que la ruta de UV es correcta (ejecuta which uv o where uv)

    • Confirma que la ruta del proyecto es correcta y no contiene caracteres chinos

    • Consulta los registros de errores del cliente

  2. Modo HTTP:

    • Confirma que el servicio está iniciado (accede a http://localhost:3333/mcp)

    • Comprueba la configuración del firewall

    • Intenta usar 127.0.0.1 en lugar de localhost

  3. Comprobaciones generales:

    • Reinicia la aplicación del cliente

    • Consulta los registros del servicio MCP

    • Usa MCP Inspector para probar la conexión

Posibles causas:

  1. Los datos no existen:

    • Confirma que ya has ejecutado el rastreador (que hay datos en el directorio output)

    • Comprueba si hay datos en el rango de fechas consultado

    • Consulta las fechas disponibles en el directorio output

  2. Error de parámetros:

    • Comprueba el formato de fecha: YYYY-MM-DD

    • Confirma que el ID de la plataforma es correcto: zhihu, weibo, etc.

    • Consulta la descripción de parámetros en la documentación de la herramienta

  3. Problemas de configuración:

    • Confirma que config/config.yaml existe

    • Confirma que config/frequency_words.txt existe

    • Comprueba si el formato del archivo de configuración es correcto

📚 Sobre el proyecto

4 artículos:

Desarrollo con IA:

  • Si tienes necesidades específicas, puedes desarrollar por tu cuenta basándote en mi proyecto, incluso sin conocimientos de programación puedes intentarlo

  • Todos mis proyectos de código abierto utilizan en mayor o menor medida mi propio software de asistencia con IA para mejorar la eficiencia de desarrollo, y esta herramienta es de código abierto

  • Función principal: filtra rápidamente el código del proyecto para alimentar a la IA, solo necesitas añadir tus necesidades personales

  • Dirección del proyecto: https://github.com/sansan0/ai-code-context-helper

Otros proyectos

📍 Mapa de huellas del Presidente Mao - visualización interactiva y dinámica de la trayectoria completa de 1893-1976. Los camaradas son bienvenidos a contribuir con datos

Software de análisis y visualización de datos de comentarios de bilibili

Star History Chart

📄 Licencia

Licencia GPL-3.0


🔝 Volver arriba

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