Разработка мобильного приложения для крипто-новостного агрегатора
Крипто-новостной агрегатор — это несколько потоков данных одновременно: RSS-фиды, API новостных сервисов (CryptoCompare News, CoinGecko, Messari), Twitter/X API, данные о ценах. Задача: собрать всё, дедуплицировать, отранжировать по релевантности и показать пользователю без задержки. Мы занимаемся этой задачей с момента появления спроса на агрегаторы — создаём надёжные мобильные решения для FinTech. Наш опыт — более 5 лет и 15+ запущенных приложений. Существенная экономия на серверных ресурсах достигается за счёт кеширования и дедупликации. Свяжитесь с нами для консультации — обсудим ваш проект.
Источники данных: сравнение и выбор
| Источник | Тип | Бесплатный лимит | Особенности |
|---|---|---|---|
| CryptoCompare News | REST API | 100k запросов/мес | Категории и теги |
| Messari | REST API | Пробный tier | Аналитический контент |
| RSS (CoinDesk, Decrypt) | XML | Неограниченно | Стандартный парсинг |
CryptoCompare News API — бесплатный tier даёт 100k запросов/месяц, поддерживает фильтрацию по категориям (Bitcoin, Ethereum, DeFi, NFT) и языкам. Messari API — более аналитический контент, хорош для серьёзного финансового контента, но платный tier для полного доступа. RSS-фиды — CoinDesk, Decrypt, The Block — публикуют RSS; парсинг на сервере через feedparser (Python) или собственный RSS-парсер.
Как избежать дублирования новостей?
Дублирование возникает, когда одна и та же новость приходит из разных источников (CryptoCompare и Messari). Мы применяем серверную дедупликацию: сравниваем заголовки через difflib (Python) или Levenshtein distance. Порог схожести — 0.85, что позволяет отлавливать 95% дубликатов. Это очищает ленту и уменьшает число запросов к клиенту. Python Software Foundation рекомендует difflib для сравнения последовательностей.
Как обеспечить real-time обновления?
Новости появляются постоянно. Polling каждые 60 секунд — разумный компромисс для большинства пользователей. WebSocket для real-time обновлений — если нужна реакция в секунды (например, breaking news).
| Метод | Задержка | Ресурсы сервера | Сложность |
|---|---|---|---|
| Polling (60s) | до 60 с | Низкая | Простая |
| WebSocket | <1 с | Высокая | Средняя |
WebSocket в 10 раз быстрее polling для real-time, но требует больше ресурсов сервера. Выбор зависит от бюджета и требований к актуальности. Если вам нужно real-time решение, свяжитесь с нами — мы подберём оптимальную архитектуру.
class NewsWebSocketClient: ObservableObject {
@Published var latestNews: [NewsItem] = []
private var webSocketTask: URLSessionWebSocketTask?
func connect() {
let url = URL(string: "wss://api.yourservice.com/news/stream")!
var request = URLRequest(url: url)
request.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
webSocketTask = URLSession.shared.webSocketTask(with: request)
webSocketTask?.resume()
listen()
}
private func listen() {
webSocketTask?.receive { [weak self] result in
if case .success(.string(let text)) = result,
let item = try? JSONDecoder().decode(NewsItem.self, from: Data(text.utf8)) {
DispatchQueue.main.async {
self?.latestNews.insert(item, at: 0)
if self?.latestNews.count ?? 0 > 200 {
self?.latestNews.removeLast()
}
}
}
self?.listen()
}
}
}
Персонализация и фильтрация
Пользователь следит за конкретными монетами — BTC, ETH, SOL. Фильтрация по тегам на стороне клиента работает только если все новости уже загружены. При большом объёме — серверная фильтрация с параметрами запроса. Мы гарантируем, что лента загружается за 1–2 секунды даже при 10 000 новостей в кеше. Оптимизация затрат на API — мы подбираем тариф под объём трафика.
AI-суммаризация: для каждой новости — краткое резюме в 2–3 предложения, сгенерированное через GPT-4o mini на сервере при индексировании. Это дороже, чем показывать оригинальный лид, но пользователь получает суть без открытия статьи. Стоимость суммаризации — экономичная, мы подбираем оптимальную модель под ваш бюджет.
Анализ тональности заголовка (Positive / Neutral / Negative) — быстрый сигнал рынка. ML Kit Sentiment на Android или NLTagger.sentimentScore на iOS, либо специализированные crypto sentiment модели (CryptoNewsScore).
Как показывать котировки рядом с новостями?
Показывать текущую цену монеты рядом с новостью — стандарт для крипто-агрегаторов. CoinGecko free API позволяет получить цены 250+ монет одним запросом /simple/price?ids=bitcoin,ethereum&vs_currencies=usd,rub. Кеш на 30 секунд, чтобы не частить.
// Android: корреляция новости с ценовым виджетом
data class NewsWithPrice(
val news: NewsItem,
val relatedCoin: CoinPrice? // null если монета не определена
)
fun enrichNewsWithPrices(
news: List<NewsItem>,
prices: Map<String, CoinPrice>
): List<NewsWithPrice> {
return news.map { item ->
val coin = item.tags.firstOrNull { prices.containsKey(it.lowercase()) }
NewsWithPrice(news = item, relatedCoin = coin?.let { prices[it.lowercase()] })
}
}
Push-уведомления для breaking news
Уведомления о breaking news — по ключевым словам или по монетам из watchlist пользователя. Firebase Cloud Messaging с topic-подпиской: /topics/bitcoin-news, /topics/ethereum-news. Пользователь подписывается в настройках приложения. Рекомендуем не более 3–5 push в день, иначе отписки. Background fetch (iOS) или WorkManager (Android) для тихого обновления ленты. Мы настраиваем уведомления так, чтобы они были полезными, а не навязчивыми.
Процесс работы
- Аналитика — согласовываем источники, требования по персонализации, объём данных.
- Проектирование — архитектура сервера, API, схемы данных.
- Реализация — серверная агрегация, дедупликация, AI-суммаризация, мобильный клиент.
- Тестирование — нагрузочное тестирование при 1000+ новостях в день, проверка задержек.
- Деплой — публикация в App Store и Google Play, настройка мониторинга.
Архитектура сервера
Агрегатор состоит из парсера (Python/Scrapy), очереди сообщений (RabbitMQ) и базы данных (PostgreSQL). Микросервис AI-суммаризации обрабатывает статьи асинхронно при индексации. API сервера отдаёт готовые фиды через REST и WebSocket.Что входит в работу (deliverables)
- Документация по API сервера.
- Доступы к Firebase, CoinGecko, выбранным источникам.
- Исходный код под NDA.
- Обучение команды заказчика работе с админкой.
- Поддержка 2 недели после запуска.
Ориентиры по срокам
Базовый агрегатор с несколькими источниками и фильтрами — 4–6 недель. Полная система с AI-суммаризацией, sentiment, персонализацией и push-уведомлениями — 10–16 недель. Сроки варьируются в зависимости от требований.
Оценим ваш проект бесплатно — свяжитесь с нами для консультации. Разработка под ключ гарантирует прозрачность и соблюдение сроков. Обсудите ваш проект с нашим инженером — мы подберём оптимальное решение.







