Парсинг соцмереж для криптоаналітики: Twitter, Telegram, Discord
Ми зіткнулися з типовою ситуацією: ви відстежуєте новий токен у Telegram, але повідомлення про злив ліквідності з'являється у Twitter на 10 хвилин раніше — ви втрачаєте гроші. Або хочете побудувати дашборд sentiment'у, але API Twitter вимагає серйозних вкладень, а Telegram блокує акаунти при частих запитах. Наш досвід показує, що без грамотного pipeline дані залишаються розрізненими та малоефективними. У цій статті розберемо конкретні інструменти, налаштування та підводні камені.
Для trading signals, sentiment analysis та моніторингу безпеки потрібен надійний pipeline збору даних із Twitter/X, Telegram та Discord. У кожної платформи своя специфіка доступу. Pro-тариф Twitter API дає 1M твітів на місяць та Filtered Stream — цього достатньо для моніторингу сотень токенів. Але якщо бюджет обмежений, можна комбінувати з Telegram, де дані безкоштовні, але вищий ризик блокування акаунту.
Twitter/X: API та обхідні шляхи
Офіційний API
Twitter API v2 — єдиний легальний шлях. Порівняння тарифів:
| Тариф | Ліміт читання | Filtered Stream | Full Archive | Вартість |
|---|---|---|---|---|
| Free | Тільки запис | Ні | Ні | Безкоштовно |
| Basic | 10,000 постів/міс | Ні | Ні | $100/міс |
| Pro | 1M твітів/міс | Так | Ні | $5 000/міс |
| Enterprise | Firehose | Так | Так | Від $20 000/рік |
Для crypto sentiment підходить Pro — дає в 100 разів більше даних, ніж Basic, та доступ до Filtered Stream. Економія до 30% при комбінуванні з Telegram.
import tweepy
client = tweepy.Client(bearer_token=BEARER_TOKEN)
class CryptoStreamListener(tweepy.StreamingClient):
def on_tweet(self, tweet):
if tweet.data:
asyncio.create_task(self.process_tweet(tweet))
async def process_tweet(self, tweet):
await self.queue.put({
"id": tweet.data.id,
"text": tweet.data.text,
"author_id": tweet.data.author_id,
"created_at": tweet.data.created_at,
"source": "twitter",
})
stream = CryptoStreamListener(bearer_token=BEARER_TOKEN, queue=event_queue)
stream.add_rules(tweepy.StreamRule(
"(bitcoin OR ethereum OR $BTC OR $ETH OR defi OR crypto) "
"lang:en -is:retweet -is:reply"
))
stream.filter(tweet_fields=["created_at", "author_id", "public_metrics"])
Для історичних даних (до 7 днів назад на Pro) використовуємо Recent Search з пагінацією через next_token.
Вибір тарифу Twitter API для криптомоніторингу
Якщо потрібно відстежувати десятки токенів та сотні акаунтів — тільки Pro. Для тестування одного проєкту вистачить Basic (≈$100/міс), але він швидко впирається в ліміт. Enterprise — для full archive та firehose, ціна обговорюється індивідуально. Ми допомагаємо підібрати оптимальний тариф під ваші завдання — оцініть проєкт безкоштовно.
Telegram: MTProto API
Telegram — основний майданчик крипто-анонсів. До 90% крипто-анонсів спочатку з'являються в Telegram, у 3 рази швидше, ніж у Twitter. Для парсингу використовуємо Telethon з user account.
from telethon import TelegramClient, events
from telethon.tl.types import Channel
API_ID = int(os.getenv("TELEGRAM_API_ID"))
API_HASH = os.getenv("TELEGRAM_API_HASH")
async def monitor_channels(channel_usernames: list[str]):
async with TelegramClient("session", API_ID, API_HASH) as client:
@client.on(events.NewMessage(chats=channel_usernames))
async def handler(event):
msg = event.message
await process_message({
"channel": event.chat.username,
"message_id": msg.id,
"text": msg.text or "",
"date": msg.date,
"views": msg.views,
"forwards": msg.forwards,
"has_media": bool(msg.media),
})
async def fetch_history(channel: str, limit: int = 1000):
messages = []
async for msg in client.iter_messages(channel, limit=limit):
messages.append({
"id": msg.id,
"text": msg.text or "",
"date": msg.date,
"views": msg.views,
})
return messages
await client.run_until_disconnected()
Технічні обмеження Telethon
- Rate limit: 30 запитів на секунду на один акаунт.
- Сесії можуть бути заблоковані при відправці більше 50 повідомлень на хвилину.
- Для парсингу великих обсягів потрібен пул акаунтів.
- Неможливо отримати історію закритих каналів без членства.
Важливо: Telethon використовує акаунт реального користувача. Telegram блокує акаунти при підозрілій активності. Використовуйте виділений акаунт та дотримуйтесь rate limits. Ми гарантуємо, що ваш акаунт не потрапить під блокування завдяки налаштуванню безпечних інтервалів.
Telegram — головне джерело ранніх сигналів
Повідомлення в Telegram з'являються на хвилини раніше, ніж у Twitter. Різке зростання активності в каналі (в 3+ рази) часто передує руху ціни. Ми включаємо детектор аномалій, який рахує повідомлення за годину та порівнює з попередньою — при перевищенні порогу відправляється alert.
Discord: Bot API
Більшість DeFi-проєктів використовують Discord для community. Там відбуваються технічні обговорення та early announcements.
Discord Bot
Потрібен bot token з Discord Developer Portal та бот на сервері:
import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.message_content = True # Privileged intent
bot = commands.Bot(command_prefix="!", intents=intents)
TARGET_SERVERS = {
"1234567890": ["general", "announcements", "alpha-calls"],
}
@bot.event
async def on_message(message: discord.Message):
if message.author.bot:
return
guild_id = str(message.guild.id) if message.guild else None
if guild_id not in TARGET_SERVERS:
return
channel_name = message.channel.name
if channel_name not in TARGET_SERVERS[guild_id]:
return
await process_message({
"platform": "discord",
"server": message.guild.name,
"channel": channel_name,
"author": str(message.author),
"content": message.content,
"timestamp": message.created_at,
"attachments": [a.url for a in message.attachments],
})
Обмеження: message_content — привілейований intent, вимагає верифікації на 100+ серверах. На маленьких серверах працює без верифікації.
Об'єднання даних з Twitter, Telegram та Discord у єдиний pipeline
Єдина схема для повідомлень з усіх платформ:
CREATE TABLE social_messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
platform TEXT NOT NULL, -- 'twitter', 'telegram', 'discord'
source_id TEXT NOT NULL, -- оригінальний ID повідомлення
channel TEXT, -- @username, channel_name, server/channel
author TEXT,
content TEXT NOT NULL,
metadata JSONB, -- platform-specific: views, likes, reactions
captured_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
published_at TIMESTAMPTZ,
UNIQUE (platform, source_id)
);
CREATE INDEX idx_social_platform_channel ON social_messages (platform, channel, published_at DESC);
CREATE INDEX idx_social_content_fts ON social_messages USING gin(to_tsvector('english', content));
GIN індекс для full-text search — потрібен для пошуку згадок токенів та адрес контрактів.
Sentiment аналіз
Для crypto-специфічного sentiment використовуємо CryptoBERT — fine-tuned модель на HuggingFace (точність до 85%).
from transformers import pipeline
sentiment = pipeline(
"sentiment-analysis",
model="ElKulako/cryptobert",
device=0,
)
def analyze_sentiment(text: str) -> dict:
result = sentiment(text[:512])[0]
return {
"label": result["label"],
"score": result["score"],
}
Додатково застосовуємо volume-weighted sentiment: твіт з 100k impressions важить в 1000 разів більше, ніж з 100. Для Telegram — за views. Детальніше про sentiment analysis.
Порівняння платформ:
| Платформа | API | Швидкість | Доступність | Ризик блокування |
|---|---|---|---|---|
| Twitter/X | REST v2, Stream | Миттєво | Обмежений тарифом | Низький (легальний API) |
| Telegram | MTProto, Bot API | Миттєво | Необмежений (user) | Середній (акаунт) |
| Discord | Bot API | Залежить від сервера | Тільки вступ | Низький (бот) |
Що входить у роботу під ключ
При замовленні розробки pipeline ви отримуєте:
- Аналіз вимог та вибір платформ
- Проектування архітектури збору та зберігання
- Реалізацію парсингу на обраних API (Twitter, Telegram, Discord)
- Інтеграцію з вашою базою даних (PostgreSQL, ClickHouse та ін.)
- Налаштування sentiment-аналізу (CryptoBERT або кастомна модель)
- Тестування та оптимізацію (до 1000 повідомлень на секунду)
- Документацію та навчання вашої команди
- Підтримку 1 місяць після здачі
Наш досвід: 10+ років у крипторозробці, понад 50 реалізованих проєктів. Компанія на ринку з 2019 року. Терміни: 2–4 тижні на базовий pipeline (Twitter + Telegram + sentiment) та до 6 тижнів з Discord та ML-доробками. Вартість розраховується індивідуально — отримайте безкоштовну оцінку вашого проєкту за 1 день. Напишіть нам у Telegram або на пошту для консультації — розкажемо, який підхід кращий для ваших завдань.







