Ir al contenido principal

Telegram::GroupScraper - Extractor de canales y grupos públicos de Telegram

Telegram

Información general del extractor

El extractor recopila todas las publicaciones y mensajes de canales y grupos públicos de Telegram.

La lógica de funcionamiento difiere de otros extractores: itera automáticamente a través de los mensajes en el canal o grupo. Debido a esto, no se puede utilizar junto con otros extractores en la misma tarea.

El orden de las líneas en el resultado no está garantizado por el número de publicación (depende de los hilos). Los metadatos del chat/canal se cargan una vez por canal y se duplican en cada línea de la publicación.

Es posible guardar los resultados en la forma y estructura que necesite, gracias al potente motor de plantillas integrado Template Toolkit que permite aplicar lógica adicional a los resultados y exportar datos en varios formatos, incluyendo JSON, SQL y CSV.

Casos de uso del extractor

Datos recopilados

Funciona con canales y grupos públicos.

Mensaje

  • Enlace al post (url)
  • ID del post (post_id)
  • Username del canal/grupo sin @ (channel)
  • Texto del post con HTML (message_text)
  • El mismo texto sin HTML (message_text_plain) — para filtros, búsqueda y salida
  • Fecha en ISO (message_date)
  • Vistas (views) — como en Telegram: 15.5K, 1.2M, etc.; solo para canales, para grupos está vacío
  • Aviso de video (message_video_notice) — si el post tiene video, pero en el array message_videos no hay URL, y este campo está lleno: el video solo se puede ver en Telegram con su propia cuenta (requiere autorización), no hay enlace directo al archivo. Esto no es un error de extracción — Telegram no entrega tales videos sin iniciar sesión

Autor del post

  • Enlace al perfil (user_link)
  • Nombre (user_name)
  • URL del avatar (user_avatar)

Reenvío

  • Desde dónde se reenvió (forward_from)
  • Enlace a la fuente (forward_from_url) — URL del original, si está disponible
  • Explicación ante la falta de enlace (forward_from_notice) — se completa si forward_from_url está vacío (por ejemplo, «Source link not available in embed»): no hay enlace directo, el original pudo ser eliminado, oculto o no estar disponible por otra razón. No es un error del extractor

Respuesta (reply)

  • URL del mensaje al que se responde (reply_to_url)
  • ID del post desde la URL (reply_to_post_id)
  • Autor del mensaje original (reply_to_author)
  • Texto del mensaje original, plain (reply_to_text)

Reacciones

  • Suma de todas las reacciones (reactions_total) — número como cadena; K/M/B se recalculan

Metadatos del chat/canal

Se cargan una vez por canal, se duplican en cada línea del post.

  • Título (chat_title)
  • Número de suscriptores/miembros (chat_members)
  • En línea (chat_online) — solo para grupos; número de usuarios en línea al momento de iniciar la recolección por canal, no se actualiza durante la extracción de datos. Para canales está vacío
  • Descripción, plain text (chat_description)
  • Contadores de media y enlaces (chat_photos, chat_videos, chat_files, chat_links) — solo para canales

Arrays

reactions — campos emoji, count (como en Telegram: 16, 1.2K). Quién puso la reacción no se recopila: solo están disponibles el tipo de emoji y el número total

message_photos — campo url; álbum — varias líneas.

message_videos — campo url. Si no hay URL, pero hay video en el post — vea message_video_notice (visualización solo después de entrar en Telegram)

links — campo url; enlaces externos del texto del post. Los enlaces tipo t.me/username sin path no entran aquí (son menciones).

mentions — campo username (@username); de enlaces t.me/username y texto @username en <a>.

Características

  • Normalización flexible de consultas (ver Consultas)
  • Filtros por fecha (dateFrom, dateTo) y mensajes reenviados (skipForwards)
  • Álbumes de fotos y videos — varias URL en un solo post

Variantes de uso

  • Recopilación del contenido de posts de un canal o grupo
  • Monitoreo de reacciones, vistas y reenvíos

Consultas

Se admiten canales y grupos públicos. Todos los formatos se convierten a https://t.me/{username}:

ConsultaComportamiento
@usernamecanal o grupo, inicio desde Start message number
usernamelo mismo
https://t.me/usernamelo mismo
t.me/usernamelo mismo
https://t.me/s/usernamelo mismo
https://t.me/username/123canal o grupo, inicio desde la publicación #123 (Start message number se ignora)

Consulta no válida → línea en el log Unknown query, resultado vacío.

Ejemplos:

https://t.me/a_parser
@a_parser
https://t.me/a_parser/100

Variantes de salida de resultados

A-Parser admite un formateo flexible de los resultados gracias al motor de plantillas integrado Template Toolkit, lo que le permite mostrar los resultados en forma libre, así como estructurada, por ejemplo CSV o JSON.

Salida por defecto

Formato del resultado:

$channel/$post_id: $message_text_plain ($views views, $reactions_total reactions)

Ejemplo de resultado:

a_parser/1234: esto son filtros) ( views, 0 reactions)
a_parser/85962: Google ha lanzado algo nuevo en cuanto a protección) ( views, 2 reactions)

Salida en tabla CSV

Formato del resultado:

[% tools.CSVline(channel, post_id, message_text_plain, views, reactions_total) %]

Ejemplo de resultado:

a_parser,1234,"esto son filtros)",,0
a_parser,85962,"Google ha lanzado algo nuevo en cuanto a protección)",,2

Filtrado y omisión de posts

La línea no entra en el resultado si:

  1. La fecha está fuera del rango Date from / Date to
  2. Está activado Skip forwards y el post es reenviado

Con el filtro por fecha o forward, el post se considera encontrado, el recorrido del canal continúa.

El recorrido del canal se detiene cuando:

  • después del último post encontrado se han verificado consecutivamente Max empty posts IDs sin nuevos hallazgos;
  • o una serie de posts vacíos desde el principio (si aún no se ha encontrado ningún post).

Procesamiento de resultados

A-Parser permite procesar los resultados directamente durante la extracción de datos; en esta sección presentamos los casos más populares para el extractor de Telegram.

Filtrado de resultados por la presencia de palabras en el mensaje

Ejemplo

Es necesario añadir un filtro y seleccionar en la lista desplegable $message_text - Message text. Seleccionar el tipo RegEx match. En el campo para la expresión regular, escriba la expresión regular con las palabras necesarias:

\bextractor\b|\bGoogle\b|\byandex\b|\bextractor\b|\bProxy\b|\bDorks\b

\b - límite de palabra

| - O

is - bandera de expresión regular

Descargar ejemplo

Cómo importar un ejemplo a A-Parser

eJyVVN1v2jAQ/18sHjaJ8qFSacobRaLaxEpX6BOg6oovqVfH9myHgTL+952dkMC6
PewhVu53v/v2uWQe3Jt7sOjQO5asSmbiP0uYR4mZhfyK6+0V7iE3ElmXGbAObeCu
2LKmJMmd1YVZbC0YtETimEIhPeuWzB8MkrdUSB9V5D5oEpajc5Dhs8c9EWvCsmJb
zMFvXwnegSwCsl6/rIvB6DqN5yCco+ocRuSmRtYvv+i70zqTWAsHUBz3tfAfToIw
TFvSNcYTzgw+nVNHLak2gIZElWjjhVZUinDsuNmcOuGm2lKxhHfMsFd3v1EuYIdL
XfUPW3hK0j3koTEdDh6DtpdGRx8+9nxsKHAuQkSQVYQwsjbqkxI/YmOVJi79WoFu
anUeJx8dBPBwym7FOlFm5KKItt8qG5akIB12maNUp0CJ8D81ggYLXtt57ADhJdNq
LOUMdyhbWvR/WwjJ6X6NUzL6XBv+nTJ/5+PYlHceaof2p6UcGi9Rup1/ba24numM
KudhUFLkwpPsJrpQYTADAt8QTdOz+9CzXFtswnhbYBOc1smg4kRsJzY2LXRRxcVU
LsGtVqnI5pS/FRxPzEItaWfnaqLDRoayVCElTcXhY3s7xq6eQhCayt8ZT2KIUPlp
Y5nXWroviypVYwXdvpuQYE6NPI9au9yClE+Ps3MNa28UCa/eG5f0+76XYx+eq/eD
BUOPmaYbRWUdN83D0rxF5b+el6Q80si+u4fKIBQY6IRRp1zcseHxN9yRrow=

Configuraciones posibles

ParámetroValor por defectoDescripción
Max empty posts1000Cuántos ID vacíos seguidos intentar después del último post encontrado, luego se detiene el recorrido del canal. No es un límite de posts guardados
Start message number1Número del post desde el cual comenzar el recorrido (si no hay /123 en la consulta)
Skip forwardsNo guardar mensajes reenviados
Date fromFecha desde, inclusive. Formato YYYY-MM-DD
Date toFecha hasta, no inclusive. Formato YYYY-MM-DD