Approfondimento tecnico su tgadsspy: classificatore e pipeline di ingestione dati
Documentazione tecnica del pipeline di dati tgadsspy — integrazione API gramesh, architettura del classificatore di nicchie (regex + pesi), pipeline geo-classificatore a 3 passi, archiviazione con indirizzamento per contenuto SHA256 e cache di aggregazione. Per sviluppatori, ricercatori e team di conformità.
Scopo e pubblico#
Questo documento è un approfondimento tecnico su come Telegram Ads Spy raccoglie, classifica e serve i dati pubblicitari di Telegram. Integra la panoramica su /about con dettagli a livello di implementazione. Pubblico principale: sviluppatori che costruiscono sull'API pubblica, ricercatori che devono comprendere la provenienza dei dati per le citazioni, e team di conformità che valutano la metodologia OSINT del sistema.
1. Fonte dati: API gramesh#
Tutti i dati pubblicitari in Telegram Ads Spy provengono da un'unica fonte: l'API HTTP gramesh su api.wall.systems/gramesh. gramesh è uno strato di proxy/aggregazione sul protocollo MTProto di Telegram, che espone endpoint REST che restituiscono JSON strutturato. Telegram Ads Spy usa gramesh esclusivamente — nessuna implementazione MTProto diretta, nessun scraping.
Endpoint chiave utilizzati#
POST /channels.getSponsored
- Input:
{ channel_id: <int>, dc_id: <int> } - Output: array di oggetti messaggi sponsorizzati per il canale dato nella regione del data center Telegram specificata
- Include:
title,text,ctaUrl,ctaLabel,accentColor,mediaType,mediaUrl,ctaTargetUsername - URL media: firmati, TTL 1 ora (
/files/photo/<id>?sig=&exp=)
POST /channels.getInfo
- Input:
{ username: <string> | id: <int> } - Output: metadati del canale —
id,title,username,description,memberCount,avatarUrl
POST /contacts.search
- Input:
{ q: <string> } - Output: array di oggetti canale corrispondenti alla query
POST /channels.getSimilar
- Input:
{ channel_id: <int> } - Output: canali simili secondo il modello di similarità interno di Telegram
2. Pool di canali e livelli#
| Livello | Numero di membri | Intervallo di ingestione |
|---|---|---|
| S (Super) | 1M+ | 30 minuti |
| A | 100k–1M | 2 ore |
| B | 10k–100k | 8 ore |
| C | 1k–10k | 72 ore |
| Placeholder | Sconosciuto | Nessuna ingestione |
3. Deduplicazione dei creativi#
impronta del creativo = sha256(title + text + ctaUrl + ctaLabel + accentColor)
Un creativo è considerato nuovo solo se la sua impronta non è stata vista prima. Questo significa:
- Lo stesso annuncio in 100 canali produce un solo record
AdCreative(non 100) - Ogni apparizione in un canale produce un record
SponsoredImpression
4. Classificazione delle nicchie#
Passo 1: Rilevamento dei brand Una consultazione contro un dizionario di ~400 brand di inserzionisti noti. Esempi:
binance→crypto1xbet→gamblingexness→forex
Passo 2: Punteggio per parole chiave Pattern regex vengono valutati per ogni nicchia con regole di specificità, negazione e varianti multilingua.
Tassonomia delle nicchie#
crypto, trading, forex, fintech, gambling, betting, vpn, dating, news, education, gaming, retail, tech, bots, adult, signals, remittance, ai, other
5. Classificazione geografica#
Passo 1: Analisi del TLD dell'URL CTA
.ru → RU, .com.br → BR, .pk → PK, ecc.
Passo 2: Rilevamento della lingua sul testo del creativo Arabo → AR, cirillico → RU/CIS, devanagari → HI, hangul → KR, hiragana/katakana → JP, tailandese → TH.
Passo 3: Aggregazione geo a livello di canale
Il canale in cui è apparso il creativo ha il proprio segnale geo. Un creativo con dominio .com in inglese che appare prevalentemente in canali di lingua russa viene classificato come RU.
6. Mirror dei media#
Il cron Telegram Ads Spy-media-mirror (ogni 5 minuti):
- Fetch: HTTP GET all'URL media firmato da gramesh
- Hash: SHA-256 del contenuto binario grezzo
- Archiviazione: Scrive in
/var/www/tgadsspy-media/<prefisso>/<sha256-hex>.<ext> - Aggiornamento:
AdCreative.mediaUrlviene aggiornato a/m/<prefisso>/<sha256-hex>.<ext>
Nginx serve i percorsi /m/ con Cache-Control: public, immutable, max-age=31536000.
7. Estrazione degli inserzionisti#
- Inserzionista di dominio: se
ctaUrlè un URL esterno, il dominio registrato diventa un recordAdvertisercontype: domain - Inserzionista Telegram: se
ctaUrlè un URLt.me/<username>, il nome utente diventa un recordAdvertisercontype: telegram
8. Cache di aggregazione#
Telegram Ads Spy:home:agg (TTL 120s): conteggio totale di creativi, inserzionisti, canali, nicchie principali, 20 creativi recenti, statistiche del giorno.
Telegram Ads Spy:pool:stats (TTL 600s): conteggio canali per livello, conteggio idonei per sponsorizzazione, paesi rappresentati.
9. Spider BFS discover-similar#
- Selezione anchor:
Channel.lastSimilarCheckAt IS NULL OR < NOW()-1h - Fan-out: 30 canali per tick (ogni minuto in processo)
- Cooldown anchor: 1 ora per evitare di ri-spidrare lo stesso canale
10. Completezza dei dati e lacune note#
Copertura stimata: Per i messaggi sponsorizzati del cabinet EUR, la copertura è stimata al 65–75% di tutti i creativi unici del periodo.
Lacune note: pubblicità nei gruppi, messaggi bot-a-utente, risultati bot inline, canali molto nuovi, canali con < 1k iscritti.
11. Licenza dei dati e citazione#
Tutti i dati sono sotto CC-BY-4.0:
Fonte: tgadsspy.com · tgadsspy.com/blog/tgadsspy-classifier-pipeline-technical-deep-dive · CC-BY-4.0
Also available in:
Cite this article
tgadsspy research (2026). Approfondimento tecnico su tgadsspy: classificatore e pipeline di ingestione dati. tgadsspy.com. Retrieved from https://tgadsspy.com/blog/it-tgadsspy-approfondimento-tecnico-classificatore-pipeline-2026
Licensed CC-BY-4.0 — reuse allowed including commercial, attribution required.