Ga naar de hoofdinhoud

Telegram::GroupScraper - Scraper voor publieke Telegram-kanalen en groepen

Telegram

Overzicht van de scraper

De scraper verzamelt alle posts en berichten uit publieke Telegram-kanalen en groepen.

De werkingslogica verschilt van andere scrapers: hij doorloopt automatisch de berichten in een kanaal of groep. Hierdoor kan deze niet worden gebruikt in combinatie met andere scrapers in dezelfde taak.

De volgorde van de regels in het resultaat wordt niet gegarandeerd op basis van het postnummer (afhankelijk van de threads). Metadata van de chat/het kanaal worden één keer per kanaal geladen en gekopieerd in elke regel van een post.

Het opslaan van resultaten is mogelijk in de vorm en structuur die u nodig heeft, dankzij de ingebouwde krachtige sjabloon-engine Template Toolkit waarmee u extra logica op de resultaten kunt toepassen en gegevens in verschillende formaten kunt uitvoeren, waaronder JSON, SQL en CSV.

Casussen voor het gebruik van de scraper

Verzamelde gegevens

Werkt met publieke kanalen en groepen.

Bericht

  • Link naar de post (url)
  • ID van de post (post_id)
  • Gebruikersnaam van het kanaal/de groep zonder @ (channel)
  • Tekst van de post met HTML (message_text)
  • Dezelfde tekst zonder HTML (message_text_plain) — voor filters, zoeken en uitvoer
  • Datum in ISO (message_date)
  • Weergaven (views) — zoals in Telegram: 15.5K, 1.2M enz.; alleen voor kanalen, bij groepen leeg
  • Melding over video (message_video_notice) — als er een video in de post staat, maar er in de array message_videos geen URL staat en dit veld ingevuld is: de video kan alleen in Telegram onder het eigen account worden bekeken (autorisatie vereist), er is geen directe link naar het bestand. Dit is geen fout bij het verzamelen — Telegram geeft dergelijke video's niet vrij zonder in te loggen op een account

Auteur van de post

  • Link naar profiel (user_link)
  • Naam (user_name)
  • URL van avatar (user_avatar)

Doorsturen

  • Waarvandaan doorgestuurd (forward_from)
  • Link naar bron (forward_from_url) — URL van het origineel, indien beschikbaar
  • Toelichting bij ontbreken van link (forward_from_notice) — wordt ingevuld als forward_from_url leeg is (bijv. "Source link not available in embed"): er is geen directe link, het origineel kan verwijderd, verborgen of om een andere reden niet beschikbaar zijn. Geen fout van de scraper

Antwoord (reply)

  • URL van het bericht waarop geantwoord wordt (reply_to_url)
  • ID van de post uit de URL (reply_to_post_id)
  • Auteur van het oorspronkelijke bericht (reply_to_author)
  • Tekst van het oorspronkelijke bericht, plain (reply_to_text)

Reacties

  • Totaal aantal reacties (reactions_total) — getal als string; K/M/B worden omgerekend

Metadata van chat/kanaal

Worden één keer per kanaal geladen, gedupliceerd in elke regel van de post.

  • Naam (chat_title)
  • Aantal abonnees/deelnemers (chat_members)
  • Online (chat_online) — alleen voor groepen; aantal gebruikers online op het moment van start van de verzameling per kanaal, wordt tijdens de gegevensextractie niet bijgewerkt. Bij kanalen leeg
  • Beschrijving, plain text (chat_description)
  • Tellers voor media en links (chat_photos, chat_videos, chat_files, chat_links) — alleen voor kanalen

Arrays

reactions — velden emoji, count (zoals in Telegram: 16, 1.2K). Wie de reactie heeft geplaatst wordt niet verzameld: alleen het type emoji en het totaal aantal zijn beschikbaar

message_photos — veld url; album — meerdere regels.

message_videos — veld url. Als er geen URL is, maar er wel een video in de post staat — zie message_video_notice (bekijken alleen mogelijk na inloggen bij Telegram)

links — veld url; externe links uit de tekst van de post. Links in de vorm t.me/username zonder path komen hier niet in terecht (dit zijn mentions).

mentions — veld username (@username); uit links t.me/username en tekst @username in <a>.

Mogelijkheden

  • Flexibele normalisatie van query's (zie Query's)
  • Filters op datum (dateFrom, dateTo) en doorgestuurde berichten (skipForwards)
  • Foto- en videoalbums — meerdere URL's in één post

Toepassingen

  • Verzamelen van de inhoud van posts van een kanaal of groep
  • Monitoring van reacties, weergaven en doorsturingen

Query's

Publieke kanalen en groepen worden ondersteund. Alle formaten worden omgezet naar https://t.me/{username}:

QueryGedrag
@usernamekanaal of groep, start vanaf Start message number
usernamehetzelfde
https://t.me/usernamehetzelfde
t.me/usernamehetzelfde
https://t.me/s/usernamehetzelfde
https://t.me/username/123kanaal of groep, start vanaf bericht #123 (Start message number wordt genegeerd)

Ongeldige query → regel in log Unknown query, resultaat leeg.

Voorbeelden:

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

Opties voor resultaatuitvoer

A-Parser ondersteunt flexibele formattering van resultaten dankzij de ingebouwde sjabloon-engine Template Toolkit, waardoor resultaten in een willekeurige vorm kunnen worden uitgevoerd, evenals in gestructureerde formaten zoals CSV of JSON.

Standaarduitvoer

Resultaatformaat:

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

Voorbeeld van resultaat:

a_parser/1234: dit zijn filters) ( views, 0 reactions)
a_parser/85962: Google heeft iets nieuws qua beveiliging uitgerold) ( views, 2 reactions)

Uitvoer naar CSV-tabel

Resultaatformaat:

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

Voorbeeld van resultaat:

a_parser,1234,"dit zijn filters)",,0
a_parser,85962,"Google heeft iets nieuws qua beveiliging uitgerold)",,2

Filtering en overslaan van posts

Een regel komt niet in het resultaat terecht als:

  1. De datum buiten het bereik Date from / Date to valt
  2. Skip forwards is ingeschakeld en de post is doorgestuurd

Bij een filter op datum of forward wordt de post als gevonden beschouwd, de scan van het kanaal gaat door.

De scan van het kanaal stopt wanneer:

  • na de laatst gevonden post achtereenvolgens Max empty posts ID's zijn gecontroleerd zonder nieuwe vondsten;
  • of een reeks lege posts vanaf het begin (als er nog geen enkele post gevonden was).

Verwerking van resultaten

A-Parser maakt het mogelijk om resultaten direct tijdens de gegevensextractie te verwerken. In deze sectie hebben we de meest populaire casussen voor de Telegram scraper verzameld.

Filteren van resultaten op voorkomen van woorden in het bericht

Voorbeeld

U moet een filter toevoegen en in de vervolgkeuzelijst $message_text - Message text selecteren. Kies het type RegEx match. Voer in het veld voor de regex de regex in met de benodigde woorden:

\bscraper\b|\bGoogle\b|\byandex\b|\bscraper\b|\bProxy\b|\bDorks\b

\b - woordgrens

| - OF

is - regex-vlag

Voorbeeld downloaden

Hoe een preset te importeren 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=

Mogelijke instellingen

ParameterStandaardwaardeBeschrijving
Max empty posts1000Hoeveel lege ID's achter elkaar proberen na de laatst gevonden post voordat de kanaalscan stopt. Dit is geen limiet voor opgeslagen berichten
Start message number1Nummer van de post waarmee de scan moet beginnen (als er geen /123 in de query staat)
Skip forwardsDoorgestuurde berichten niet opslaan
Date fromDatum vanaf, inclusief. Formaat YYYY-MM-DD
Date toDatum tot, niet inclusief. Formaat YYYY-MM-DD