Парсинг соцсетей для криптоаналитики: 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 реализованных проектов по сбору данных.







