Розробка мобільного застосунку для крипто-новинного агрегатора
Крипто-новини надходять з десятків джерел одночасно: 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 тижнів. Терміни варіюються залежно від вимог.
Оцінимо ваш проект безкоштовно — зв'яжіться з нами для консультації. Розробка під ключ гарантує прозорість та дотримання термінів. Обговоріть ваш проект з нашим інженером — ми підберемо оптимальне рішення.







