Vai al contenuto principale

Telegram::GroupScraper - Scraper di canali e gruppi pubblici Telegram

Telegram

Panoramica dello scraper

Lo scraper raccoglie tutti i post e i messaggi da canali e gruppi pubblici Telegram.

La logica di funzionamento differisce dagli altri scraper: esso scansiona automaticamente i messaggi nel canale o nel gruppo. Per questo motivo, non è possibile utilizzarlo insieme ad altri scraper nella stessa attività.

L'ordine delle righe nel risultato non è garantito in base al numero del post (dipende dai thread). I metadati della chat/canale vengono caricati una volta per canale e duplicati in ogni riga del post.

Il salvataggio dei risultati è possibile nel formato e nella struttura necessari, grazie al potente motore di modelli integrato Template Toolkit che consente di applicare logica aggiuntiva ai risultati e di esportare i dati in vari formati, tra cui JSON, SQL e CSV.

Casi d'uso dello scraper

Dati raccolti

Funziona con canali e gruppi pubblici.

Messaggio

  • Link al post (url)
  • ID del post (post_id)
  • Username del canale/gruppo senza @ (channel)
  • Testo del post con HTML (message_text)
  • Lo stesso testo senza HTML (message_text_plain) — per filtri, ricerca e output
  • Data in formato ISO (message_date)
  • Visualizzazioni (views) — come in Telegram: 15.5K, 1.2M ecc.; solo per i canali, per i gruppi è vuoto
  • Avviso video (message_video_notice) — se nel post è presente un video, ma nell'array message_videos non c'è l'URL, e questo campo è compilato: il video può essere visualizzato solo in Telegram con il proprio account (è richiesta l'autorizzazione), non c'è un link diretto al file. Questo non è un errore di raccolta — Telegram non fornisce tali video senza aver effettuato l'accesso all'account

Autore del post

  • Link al profilo (user_link)
  • Nome (user_name)
  • URL dell'avatar (user_avatar)

Inoltro

  • Da dove è stato inoltrato (forward_from)
  • Link alla fonte (forward_from_url) — URL dell'originale, se disponibile
  • Nota in assenza di link (forward_from_notice) — compilato se forward_from_url è vuoto (ad esempio, "Source link not available in embed"): non c'è un link diretto, l'originale potrebbe essere stato eliminato, nascosto o non disponibile per altri motivi. Non è un errore dello scraper

Risposta (reply)

  • URL del messaggio a cui si risponde (reply_to_url)
  • ID del post dall'URL (reply_to_post_id)
  • Autore del messaggio originale (reply_to_author)
  • Testo del messaggio originale, plain (reply_to_text)

Reazioni

  • Somma di tutte le reazioni (reactions_total) — numero come stringa; K/M/B vengono convertiti

Metadati della chat/canale

Caricati una volta per canale, duplicati in ogni riga del post.

  • Titolo (chat_title)
  • Numero di iscritti/membri (chat_members)
  • Online (chat_online) — solo per i gruppi; numero di utenti online al momento dell'inizio della raccolta per il canale, non viene aggiornato durante lo scraping. Per i canali è vuoto
  • Descrizione, plain text (chat_description)
  • Contatori media e link (chat_photos, chat_videos, chat_files, chat_links) — solo per i canali

Array

reactions — campi emoji, count (come in Telegram: 16, 1.2K). Chi ha messo la reazione non viene raccolto: sono disponibili solo il tipo di emoji e il numero totale

message_photos — campo url; album — righe multiple.

message_videos — campo url. Se l'URL non è presente, ma nel post c'è un video — vedere message_video_notice (visualizzazione solo dopo l'accesso a Telegram)

links — campo url; link esterni dal testo del post. I link del tipo t.me/username senza path non rientrano qui (sono menzioni).

mentions — campo username (@username); dai link t.me/username e dal testo @username in <a>.

Funzionalità

  • Normalizzazione flessibile delle query (vedi Query)
  • Filtri per data (dateFrom, dateTo) e messaggi inoltrati (skipForwards)
  • Album di foto e video — più URL in un unico post

Casi d'uso

  • Raccolta del contenuto dei post di un canale o gruppo
  • Monitoraggio di reazioni, visualizzazioni e inoltri

Query

Sono supportati canali e gruppi pubblici. Tutti i formati vengono convertiti in https://t.me/{username}:

QueryComportamento
@usernamecanale o gruppo, inizio da Start message number
usernamelo stesso
https://t.me/usernamelo stesso
t.me/usernamelo stesso
https://t.me/s/usernamelo stesso
https://t.me/username/123canale o gruppo, inizio dal post #123 (Start message number viene ignorato)

Query non valida → riga nel log Unknown query, risultato vuoto.

Esempi:

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

Esempi di output dei risultati

A-Parser supporta la formattazione flessibile dei risultati grazie al motore di modelli integrato Template Toolkit, che gli consente di produrre risultati in forma libera o strutturata, come CSV o JSON

Output predefinito

Formato del risultato:

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

Esempio di risultato:

a_parser/1234: questi sono filtri) ( views, 0 reactions)
a_parser/85962: Google ha rilasciato qualcosa di nuovo per la protezione) ( views, 2 reactions)

Output in tabella CSV

Formato del risultato:

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

Esempio di risultato:

a_parser,1234,"questi sono filtri)",,0
a_parser,85962,"Google ha rilasciato qualcosa di nuovo per la protezione)",,2

Filtrazione e salto dei post

Una riga non finisce nel risultato se:

  1. La data è fuori dall'intervallo Date from / Date to
  2. È attivo Skip forwards e il post è inoltrato

Con il filtro per data o forward, il post è considerato trovato, la scansione del canale continua.

La scansione del canale si ferma quando:

  • dopo l'ultimo post trovato, sono stati controllati consecutivamente Max empty posts ID senza nuovi ritrovamenti;
  • oppure una serie di post vuoti dall'inizio (se non è stato ancora trovato alcun post).

Elaborazione dei risultati

A-Parser consente di elaborare i risultati direttamente durante lo scraping; in questa sezione abbiamo riportato i casi più popolari per lo scraper Telegram

Filtrare i risultati per occorrenza di parole nel messaggio

Esempio

È necessario aggiungere un filtro e selezionare nel menu a discesa $message_text - Message text. Selezionare il tipo RegEx match. Nel campo per la regex inserire la regex con le parole necessarie:

\bscraper\b|\bGoogle\b|\byandex\b|\bscraper\b|\bProxy\b|\bDork\b

\b - confine della parola

| - OPPURE

is - flag della regex

Scarica esempio

Come importare un esempio in 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=

Impostazioni possibili

ParametroValore predefinitoDescrizione
Max empty posts1000Quanti ID vuoti consecutivi provare dopo l'ultimo post trovato, prima di interrompere la scansione del canale. Non è il limite dei post salvati
Start message number1Numero del post da cui iniziare la scansione (se nella query non è presente /123)
Skip forwardsNon salvare i messaggi inoltrati
Date fromData da, inclusa. Formato YYYY-MM-DD
Date toData fino a, esclusa. Formato YYYY-MM-DD