Завдання
Крипто-клуб «Ситий хомʼяк» хотів щодня давати спільноті зріз ринку однією картинкою, бо картинку в Telegram відкривають і з телефона, і з компʼютера. Склад плашки зафіксували на старті і не міняємо без окремого рішення: капіталізація ринку, домінація BTC і USDT, індекс страху і жадності, індекс альтсезону, і сім рядків праворуч: BTC, ETH, SOL, BNB, S&P 500, золото, нафта WTI. Збирати це руками щоранку нікому, а помилятися в цифрах не можна: їх читають люди, які торгують.
Навіщо і яка ідея
Ідея: не сервіс і не бот, а щоденна автозадача з агентом. Цифри беруть скрипти, картинку малює браузер, а агент робить те, що скриптам не під силу: знімає індекси з сайту, який не пускає автоматичні запити, дивиться на попередження скриптів і пише коротку підпись, що виросло і що впало. Формат вертикальний, темне тло, блакитний акцент, у шапці логотип клубу.
Головне рішення по дорозі: звідки брати добові відсотки. У TradingView поле change для крипти рахується від півночі UTC, а не за добу: у перший день по BTC воно давало +0,43%, тоді як доба була -2,09%. Для монет узяли поле чесних 24 годин (звірено з CoinGecko: -2,09% проти -2,08%). У капіталізації і домінацій такого поля нема, тому скрипт сам кладе сьогоднішні значення у файл стану і завтра порівнює з ними. Із золотом і нафтою спочатку перейшли на фʼючерси, бо спот брехав зі знаком, потім вирішили давати тільки спотові котирування і повернули золото на спот. З нафтою так не вийшло: публічного спот-ринку WTI нема, і «ціна нафти» з новин це фронт-фʼючерс. Нафта лишилася фʼючерсом.
Хід роботи
| Етап | Що відбувалося |
|---|---|
| День 1 | Скрипти збору і рендеру, логотип клубу в шапку, перший бойовий прогін. Верхній ряд показав +0,01% / 0,00% / -0,01%: база для порівняння була від налагоджувального прогону того ж ранку. У підписі до картинки це сказано прямо, інше число не підставляли |
| День 2 | Відсотки верхнього ряду стали справжніми самі: база від учорашнього прогону. Віджети CryptoRank переїхали, числа зняли з повного скриншота. Того ж дня спіймали золото: +1,06% на плашці проти -0,82% за реальну добу. Перехід на фʼючерс |
| День 3 | Розбір, звідки беруться золото і нафта і чому їхні відсотки іншої природи: у фʼючерсів зміна від закриття попередньої сесії, а не за 24 години |
| День 4 | Золото повернуто на спот за правилом «тільки спотові котирування». Перебрано сім спотових символів нафти: шість не існують у цьому API, єдиний робочий висить повз ринок на 3,4%. Нафта лишилася фʼючерсом |
| День 5 | Автозадача пропустила слот, плашку зібрали руками, потім автозадача таки стартувала і зібрала другу за добу. Файл стану вже містив ранкові числа, справжні добові відсотки витягли з ранкового HTML |
| Далі щодня | Прогони штатні, попереджень скриптів нуль. Віджети CryptoRank зʼїжджають ще чотири рази, числа щоразу з повного скриншота |
| Через шість тижнів | Після переходу на зимовий час запуск перенесено з 09:00 на 08:00 за Києвом |
Чим робили
Скрипт збору забирає значення з безкоштовного scanner API TradingView без ключа: CRYPTOCAP:TOTAL, BTC.D і USDT.D для верхнього ряду, CRYPTO:BTCUSD і решта монет, SP:SPX, TVC:GOLD, NYMEX:CL1!. Три спроби на символ; якщо джерело не відповіло, скрипт пише попередження, а не мовчить. Індекси страху і жадності й альтсезону з cryptorank.io: Cloudflare віддає curl 403, тому агент відкриває сайт у Chrome, знімає числа з екрана і передає їх скрипту параметрами.
Скрипт рендеру збирає HTML з даними і знімає його headless Chrome: вертикальний формат 2160 на 3664 при подвійному масштабі, темне тло, блакитний акцент, обидві шкали заповнюються за годинниковою стрілкою, у Solana і BNB офіційні контури логотипів. Логотип клубу скрипт сам обрізає від підкладки і вписує в шапку, дата в шапці підставляється сама.
Автозадача щоранку: агент знімає індекси, запускає обидва скрипти, перевіряє попередження і віддає картинку з коротким текстом. Сервер не потрібен, усе крутиться на одній машині.
Результат
47 плашок за 47 днів, по одній на день, без пропусків. Кожна 2160 на 3664, близько 470 КБ, читається з телефона. Після правки по золоту і виходу на чесні 24 години числа звіряли з незалежними джерелами: BTC +0,78% у нас проти +0,88% у CoinGecko, ETH +1,91 проти +1,93, SOL +2,86 проти +2,90, BNB +1,87 проти +1,87.
Чого не робили і чому. Захисту від повторного запуску за день у скрипті досі нема: він перезаписує файл стану при кожному запуску, і другий прогін за добу обнулив би відсотки верхнього ряду. Дірка відома, один раз спрацювала, обхід описаний, правка чекає рішення. Домінація BTC у нас і в шапці CryptoRank різна, у трьох перевірках на 2,3-2,5 пункту: це різні методики, не помилка, плашка тримається TradingView і джерела не змішує. S&P 500 вранці за Києвом показує вчорашнє закриття, бо біржа США ще закрита, а у вихідні S&P, золото і нафта повторюють пʼятничне закриття.
Помилки і що винесли





