Крипто-рынок реагирует на новости быстрее, чем tradfi: от публикации статьи о регуляторных действиях до движения цены — иногда секунды. Для трейдинговых систем, мониторинга рисков или sentiment-анализа нужен структурированный поток новостей с минимальной latency. Мы — блокчейн-инженеры с 5+ летним опытом в production — берём на себя организацию такого потока под ключ. За время нашей работы мы реализовали 7 агрегаторов для фондов и трейдеров, сократив среднюю задержку до 3 секунд.
Почему latency критична?
Задержка в 30 секунд может стоить тысяч долларов при арбитраже импульсных стратегий. Один из наших клиентов потерял около $500 на одной сделке из-за устаревших данных — после перехода на наш pipeline latency упала с 40 до 2 секунд. Источники новостей различаются по скорости: RSS-фиды CoinDesk обновляются каждые 5–10 минут, CryptoPanic API — в реальном времени, парсинг HTML добавляет ещё 10–30 секунд. Мы проектируем pipeline так, чтобы новость попадала в вашу систему с минимальной задержкой и гарантированной доставкой.
Какие источники использовать и как?
Сравнение трёх подходов:
| Метод | Скорость | Надёжность | Сложность | Примеры |
|---|---|---|---|---|
| RSS/Atom фиды | Средняя | Высокая | Низкая | CoinDesk, CoinTelegraph, The Block |
| Official API | Высокая | Высокая | Средняя | CryptoPanic, Messari, Santiment |
| HTML парсинг | Низкая | Низкая | Высокая | Blockworks, новости бирж |
RSS/Atom фиды (самое надёжное)
CoinDesk, Cointelegraph, The Block, Decrypt — все имеют RSS. Это официальный, стабильный канал:
import Parser from "rss-parser" const parser = new Parser({ customFields: { item: [["media:content", "media", { keepArray: false }]], }, }) const feeds: Record<string, string> = { coindesk: "https://www.coindesk.com/arc/outboundfeeds/rss/", cointelegraph: "https://cointelegraph.com/rss", theblock: "https://www.theblock.co/rss.xml", decrypt: "https://decrypt.co/feed", } async function fetchFeed(source: string, url: string): Promise<NewsItem[]> { const feed = await parser.parseURL(url) return feed.items.map((item) => ({ source, title: item.title ?? "", url: item.link ?? "", publishedAt: new Date(item.pubDate ?? ""), summary: item.contentSnippet ?? "", guid: item.guid ?? item.link ?? "", })) } Polling каждые 5 минут — разумный баланс между freshness и нагрузкой на источник. Дедупликация по guid.
Official APIs
CryptoPanic API — агрегатор новостей с sentiment scoring:
GET https://cryptopanic.com/api/v1/posts/?auth_token={key}¤cies=BTC,ETH&kind=news Отдаёт структурированные данные с bullish/bearish голосами сообщества. Messari API — качественные новости с asset-тегами:
GET https://data.messari.io/api/v1/news?page=1&limit=50 Santiment — новости + on-chain данные + social metrics в одном API.
HTML парсинг (когда API нет)
Для источников без RSS — cheerio (Node.js) или BeautifulSoup (Python). Хрупкий подход: любое изменение разметки ломает парсер. Для критичных источников — мониторинг успешности парсинга и быстрый alert при падении extraction rate ниже 95%.
import * as cheerio from "cheerio" async function scrapeBlockworks(html: string): Promise<NewsItem[]> { const $ = cheerio.load(html) return $("article.post-card").map((_, el) => ({ title: $(el).find("h2.post-title").text().trim(), url: $(el).find("a").attr("href") ?? "", publishedAt: new Date($(el).find("time").attr("datetime") ?? ""), summary: $(el).find("p.excerpt").text().trim(), })).get() } Как дедуплицировать новости эффективно?
Дедупликация критична — одна новость может появиться в нескольких источниках. Мы используем двухуровневый подход: сначала точное совпадение по external_id (GUID от RSS), затем fuzzy match по заголовку (косинусная близость с порогом 0.85). Это отсекает 99% дублей. Для хранения используем PostgreSQL:
CREATE TABLE news_items ( id BIGSERIAL PRIMARY KEY, source VARCHAR(50) NOT NULL, external_id VARCHAR(255) NOT NULL, title TEXT NOT NULL, url TEXT NOT NULL, published_at TIMESTAMPTZ NOT NULL, summary TEXT, raw_content TEXT, tags TEXT[], UNIQUE (source, external_id) ); CREATE INDEX idx_news_published ON news_items (published_at DESC); CREATE INDEX idx_news_tags ON news_items USING GIN (tags); Asset tagging — определяем какие криптоактивы упомянуты в новости по списку тикеров и названий. Простой regex-based подход даёт 80–90% точности для основных активов. Для сложных случаев используем NLP-модель с точностью 95%.
Что важно в production
Мониторинг freshness: если последняя новость от источника старше 30 минут — алерт. RSS может зависнуть без явной ошибки. Extraction rate — процент успешно распарсенных элементов: снижение ниже 90% — критический алерт. Robots.txt и rate limiting: уважать правила источника, не генерировать избыточную нагрузку. Jitter между запросами (не ровные интервалы). User-Agent: идентифицировать себя корректно. Некоторые источники блокируют headless browser user-agents.
Как настроить парсинг новостей: пошаговый план
- Анализ источников и выбор подходящих методов (RSS, API, HTML).
- Проектирование схемы данных и pipeline.
- Реализация модулей с unit-тестами.
- Настройка дедупликации и asset tagging.
- Развёртывание в Docker/Kubernetes с мониторингом.
- Документация и интеграция с клиентской системой.
Сравнение инструментов для sentiment-анализа
| Инструмент | Тип | Точность | Скорость |
|---|---|---|---|
| CryptoPanic голосование | community-based | 70–80% | реальное время |
| Santiment social trends | on-chain + social | 85–90% | 5-10 мин |
| Vader / TextBlob | lexicon-based | 75–85% | миллисекунды |
| FinBERT | NLP-модель | 90–95% | секунды |
Что входит в работу
- Проектирование архитектуры сбора данных (схема данных, выбор источников, балансировка нагрузки)
- Реализация модулей парсинга (RSS, API, HTML) с unit-тестами и интеграционными тестами
- Настройка дедупликации и asset tagging
- Развёртывание в Docker/Kubernetes с мониторингом и алертингом
- Документация API доступа к данным и инструкция по добавлению новых источников
- Гарантия поддержки после запуска: чиним парсер при изменении разметки в течение 24 часов
Реалистичный срок для агрегатора 10–15 источников с API + хранением: 2–3 недели. Получите консультацию — оценим ваш проект бесплатно. Закажите оценку — мы подберём оптимальную архитектуру под ваш бюджет и требования.







