Парсинг соцсетей для криптоаналитики: 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 постов/мес | Нет | Нет |
| Pro | 1M твитов/мес | Да | Нет |
| Enterprise | Firehose | Да | Да |
Для crypto sentiment подходит Pro — даёт 1M твитов в месяц и доступ к Filtered Stream.
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, но он быстро упирается в лимит. Enterprise — для full archive и firehose, цена обсуждается индивидуально. Мы помогаем подобрать оптимальный тариф под ваши задачи — оцените проект бесплатно.
Telegram: MTProto API
Telegram — основная площадка крипто-анонсов. Сообщения здесь появляются на минуты раньше, чем в 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.
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 весит больше, чем с 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 месяц после сдачи
Сроки: 2–4 недели на базовый pipeline (Twitter + Telegram + sentiment) и до 6 недель с Discord и ML-доработками. Стоимость рассчитывается индивидуально — получите оценку вашего проекта за 1 день. Свяжитесь с нами для консультации — расскажем, какой подход лучше для ваших задач. Наш опыт: 10+ лет в крипторазработке, более 50 реализованных проектов по сбору данных.







