Zum Hauptinhalt springen

Telegram::GroupScraper - Parser für öffentliche Telegram-Kanäle und -Gruppen

Telegram

Übersicht über den Parser

Der Parser sammelt alle Posts und Nachrichten aus öffentlichen Telegram-Kanälen und -Gruppen.

Die Funktionslogik unterscheidet sich von anderen Scrapern: Er durchläuft automatisch die Nachrichten in einem Kanal oder einer Gruppe. Aus diesem Grund kann er nicht zusammen mit anderen Scrapern in derselben Aufgabe verwendet werden.

Die Reihenfolge der Zeilen im Ergebnis ist nach Post-Nummer nicht garantiert (abhängig von den Threads). Chat-/Kanal-Metadaten werden einmal pro Kanal geladen und in jeder Zeile des Posts dupliziert.

Das Speichern der Ergebnisse ist in der von Ihnen benötigten Form und Struktur möglich, dank der integrierten leistungsstarken Template-Engine Template Toolkit, die es ermöglicht, zusätzliche Logik auf die Ergebnisse anzuwenden und Daten in verschiedenen Formaten auszugeben, einschließlich JSON, SQL und CSV.

Anwendungsbeispiele für den Parser

Gesammelte Daten

Funktioniert mit öffentlichen Kanälen und Gruppen.

Nachricht

  • Link zum Post (url)
  • Post-ID (post_id)
  • Username des Kanals/der Gruppe ohne @ (channel)
  • Text des Posts mit HTML (message_text)
  • Derselbe Text ohne HTML (message_text_plain) — für Filter, Suche und Ausgabe
  • Datum in ISO (message_date)
  • Aufrufe (views) — wie in Telegram: 15.5K, 1.2M usw.; nur für Kanäle, bei Gruppen leer
  • Hinweis zum Video (message_video_notice) — wenn im Post ein Video vorhanden ist, aber im Array message_videos keine URL vorhanden ist und dieses Feld ausgefüllt ist: Das Video kann nur in Telegram unter dem eigenen Account angesehen werden (Autorisierung erforderlich), es gibt keinen direkten Link zur Datei. Dies ist kein Fehler bei der Datenerfassung — Telegram gibt solche Videos nicht ohne Anmeldung im Account frei

Autor des Posts

  • Link zum Profil (user_link)
  • Name (user_name)
  • URL des Avatars (user_avatar)

Weiterleitung

  • Woher weitergeleitet (forward_from)
  • Link zur Quelle (forward_from_url) — URL des Originals, falls verfügbar
  • Erläuterung bei fehlendem Link (forward_from_notice) — wird ausgefüllt, wenn forward_from_url leer ist (z. B. „Source link not available in embed“): Es gibt keinen direkten Link, das Original könnte gelöscht, ausgeblendet oder aus einem anderen Grund nicht verfügbar sein. Kein Fehler des Parsers

Antwort (reply)

  • URL der Nachricht, auf die geantwortet wurde (reply_to_url)
  • Post-ID aus der URL (reply_to_post_id)
  • Autor der ursprünglichen Nachricht (reply_to_author)
  • Text der ursprünglichen Nachricht, plain (reply_to_text)

Reaktionen

  • Summe aller Reaktionen (reactions_total) — Zahl als String; K/M/B werden umgerechnet

Metadaten des Chats/Kanals

Werden einmal pro Kanal geladen und in jeder Zeile des Posts dupliziert.

  • Name (chat_title)
  • Anzahl der Abonnenten/Mitglieder (chat_members)
  • Online (chat_online) — nur für Gruppen; Anzahl der Online-Nutzer zum Zeitpunkt des Beginns der Datenerfassung für den Kanal, wird während der Datenerfassung nicht aktualisiert. Bei Kanälen leer
  • Beschreibung, Plain Text (chat_description)
  • Zähler für Medien und Links (chat_photos, chat_videos, chat_files, chat_links) — nur für Kanäle

Arrays

reactions — Felder emoji, count (wie in Telegram: 16, 1.2K). Wer die Reaktion gesetzt hat, wird nicht erfasst: Nur der Emoji-Typ und die Gesamtzahl sind verfügbar

message_photos — Feld url; Album — mehrere Zeilen.

message_videos — Feld url. Wenn keine URL vorhanden ist, aber im Post ein Video existiert — siehe message_video_notice (Anzeige nur nach Login bei Telegram)

links — Feld url; externe Links aus dem Post-Text. Links wie t.me/username ohne Pfad werden hier nicht erfasst (dies sind Mentions).

mentions — Feld username (@username); aus Links t.me/username und Text @username in <a>.

Funktionen

  • Flexible Normalisierung von Abfragen (siehe Abfragen)
  • Filter nach Datum (dateFrom, dateTo) und weitergeleiteten Nachrichten (skipForwards)
  • Foto- und Videoalben — mehrere URLs in einem Post

Anwendungsfälle

  • Erfassung von Inhalten aus Kanal- oder Gruppenposts
  • Monitoring von Reaktionen, Aufrufen und Weiterleitungen

Abfragen

Öffentliche Kanäle und Gruppen werden unterstützt. Alle Formate werden in https://t.me/{username} umgewandelt:

AbfrageVerhalten
@usernameKanal oder Gruppe, Start bei Start message number
usernamedasselbe
https://t.me/usernamedasselbe
t.me/usernamedasselbe
https://t.me/s/usernamedasselbe
https://t.me/username/123Kanal oder Gruppe, Start bei Post #123 (Start message number wird ignoriert)

Ungültige Abfrage → Zeile im Log Unknown query, Ergebnis leer.

Beispiele:

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

Ausgabeoptionen für Ergebnisse

A-Parser unterstützt eine flexible Formatierung der Ergebnisse dank der integrierten Template-Engine Template Toolkit, was es ermöglicht, Ergebnisse in beliebiger Form sowie strukturiert, zum Beispiel als CSV oder JSON, auszugeben.

Standardausgabe

Format des Ergebnisses:

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

Beispiel für ein Ergebnis:

a_parser/1234: das sind Filter) ( views, 0 reactions)
a_parser/85962: Google hat etwas Neues zum Schutz herausgebracht) ( views, 2 reactions)

Ausgabe in eine CSV-Tabelle

Format des Ergebnisses:

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

Beispiel für ein Ergebnis:

a_parser,1234,"das sind Filter)",,0
a_parser,85962,"Google hat etwas Neues zum Schutz herausgebracht)",,2

Filterung und Überspringen von Posts

Eine Zeile gelangt nicht in das Ergebnis, wenn:

  1. Das Datum außerhalb des Bereichs Date from / Date to liegt
  2. Skip forwards aktiviert ist und der Post weitergeleitet wurde

Bei einem Filter nach Datum oder Forward wird der Post als gefunden gezählt, die Durchsuchung des Kanals wird fortgesetzt.

Die Durchsuchung des Kanals stoppt, wenn:

  • nach dem letzten gefundenen Post nacheinander Max empty posts IDs ohne neue Funde geprüft wurden;
  • oder eine Serie leerer Posts von Anfang an (falls noch kein einziger Post gefunden wurde).

Verarbeitung der Ergebnisse

A-Parser ermöglicht es, Ergebnisse direkt während der Datenerfassung zu verarbeiten. In diesem Abschnitt haben wir die beliebtesten Anwendungsfälle für den Telegram-Parser aufgeführt.

Filtern der Ergebnisse nach Vorkommen von Wörtern in der Nachricht

Beispiel

Es muss ein Filter hinzugefügt und in der Dropdown-Liste $message_text - Message text ausgewählt werden. Wählen Sie den Typ RegEx match. Geben Sie im Feld für den regulären Ausdruck den Ausdruck mit den erforderlichen Wörtern ein:

\bparser\b|\bGoogle\b|\byandex\b|\bparser\b|\bProxy\b|\bDorks\b

\b - Wortgrenze

| - ODER

is - Flag für regulären Ausdruck

Beispiel herunterladen

So importieren Sie ein Beispiel 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=

Mögliche Einstellungen

ParameterStandardwertBeschreibung
Max empty posts1000Wie viele leere IDs hintereinander nach dem letzten gefundenen Post versucht werden sollen, bevor das Crawlen des Kanals gestoppt wird. Dies ist kein Limit für gespeicherte Posts
Start message number1Nummer des Posts, mit dem der Crawl beginnen soll (wenn die Abfrage kein /123 enthält)
Skip forwardsWeitergeleitete Nachrichten nicht speichern
Date fromDatum ab, einschließlich. Format YYYY-MM-DD
Date toDatum bis, nicht einschließlich. Format YYYY-MM-DD