Граббінг даних з крипто-новинних агрегаторів

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Граббінг даних з крипто-новинних агрегаторів
Простий
від 1 дня до 3 днів
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1286
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1122
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    859

Парсинг даних з крипто-новинних агрегаторів

Крипто-ринок реагує на новини швидше, ніж tradfi: від публікації статті про регуляторні дії до руху ціни — іноді секунди. Для трейдинговых систем, моніторингу рисків або sentiment-аналізу потрібен структурований потік новин з мінімальною latency.

Джерела й методи отримання даних

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}&currencies=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.

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();
}

Обробка й зберігання

Дедупліцккація критична — одна новина може появитися в кількох джерелах. Нормалізований URL (видалення UTM параметрів) + title similarity (cosine similarity або Levenshtein distance) для обнаруження дублів.

CREATE TABLE news_items (
  id           BIGSERIAL PRIMARY KEY,
  source       VARCHAR(50)  NOT NULL,
  external_id  VARCHAR(255) NOT NULL,  -- guid від RSS
  title        TEXT         NOT NULL,
  url          TEXT         NOT NULL,
  published_at TIMESTAMPTZ  NOT NULL,
  summary      TEXT,
  raw_content  TEXT,
  tags         TEXT[],      -- ['bitcoin', 'regulation', 'SEC']
  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% точності для основних активів.

Що важливо у production

Robots.txt й rate limiting: дотримуємось правил джерела, не генеруємо надмірну нагрузку. Jitter між запитами (не рівномірні інтервали, це виглядає як бот).

User-Agent: ідентифіцюємось коректно. Деякі джерела блокують headless browser user-agents.

Моніторинг freshness: якщо остання новина від джерела старіша за 30 хвилин — alert. RSS може зависнути без явної помилки.

Реалістичний срок для агрегатора 10–15 джерел з API + зберіганням: 2–3 тижні.