Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Артем Бородатюк
Added 14 Jul 2024 🌐 UK

Артем Бородатюк

@artemborodatiuk
Number of subscribers: 26 700
Photos: 1,060
Videos: 52
Links: 704
Description:
Про бізнес, менеджмент і розбори власних помилок. Новини: t.me/WorldIn5 Економіка: t.me/EconomyIn5 Наука: t.me/ScienceIn5 Подкасти: t.me/icereadspodcastsua Бізнес-моделі, IPO: https://t.me/IceReadsS1 Музика: t.me/ice_listens Жарти: t.me/eshenesmeshnee
Source

Артем Бородатюк | Кейс ШІзації №5. 🎧 Зробив собі AI-бота, який перетворює лайк у Spotify...

Telegram community logo - Артем Бородатюк Артем Бородатюк @artemborodatiuk
4 790 Views/Reach 2026-10-02 12:16 Message №1813
🤖 Кейс ШІзації №5.

🎧 Зробив собі AI-бота, який перетворює лайк у Spotify на повноцінну картку треку та додає його до плейлістів за стилями та лейблами

⚡️ Як це виглядає

Тисну лайк у Spotify — і в Telegram прилітає інформація:

▪️ стиль (Beatport + Discogs, окремо);
▪️ лейбл і рік;
▪️ BPM і тональність;
▪️ звідки артист (із прапорцем);
▪️ хто заснував лейбл, коли, в якому місті.

Окремим блоком — у які плейлісти трек уже розкладено.

Кожен плейліст — це назва стилю. Окремо — плейлісти по лейблах, оскільки я паралельно їх вивчаю. Це головна перевага: бот не просто пише — він одразу сортує.

Якщо потрібного плейліста немає, бот його створює. Якщо є — додає й пише, скільки в ньому треків.

Бібліотека розкладається сама, поки я просто слухаю музику, і дає мені контент по лейблах, який я вивчаю та паралельно прокачую себе.

🧰 Що потрібно

1. Бот у Telegram — токен у @BotFather за хвилину.

2. Cloudflare Workers — там крутиться вся логіка, cron смикає Spotify що 2 хвилини. Потрібен платний план $5/міс: на безкоштовному встановлено ліміт — 10 мс процесорного часу, а один пост — це ~50 секунд зовнішніх запитів.

3. Spotify Web API — безплатно. Потрібен свій додаток і refresh-токен зі скоупами на читання лайків і запис у плейлісти. Платного тарифу не існує взагалі, а розширена квота вимагає зареєстрованого бізнесу і 250 000 користувачів — особистому боту це не потрібно.

4. Discogs API — безплатно, але обов'язково з персональним токеном. Без нього ліміт рахується за IP, а в Cloudflare вони спільні, і ти ловиш 429 одразу.

5. Beatport — публічного API немає з 2016 року. Дані дістаються з __NEXT_DATA__ на сторінці пошуку. Важливо: з локальної машини Beatport повертає 403, а з воркера відповідає нормально.

6. Claude API — описи артиста й лейбла пише модель, живою мовою, а не копіпастом з Discogs. Копійки за пост.

💡Чим корисний бот

1. Навчає через лейбли. Замість «о, файний трек» ти поступово бачиш систему: хто це видає, звідки вони, що ще в них є. Через місяць починаєш упізнавати саунд лейбла з першого такту.

2. Готовий пост для каналу. Картка одразу оформлена — можна переслати без правок.

3. Плейлісти наповнюють самі себе. Жодного ручного розкладання за теками.

4. Перевірка на росію. Бот дивиться профіль артиста і зазначає, якщо це рф. Мені це важливо.

5. Архів рішень. Через півроку видно, які лейбли реально тримають планку, а які були разовим збігом.

👇 Промт для збірки:
Зроби Telegram-бота на Cloudflare Worker, який реагує на нові лайки у Spotify.

ЛОГІКА
1. Cron кожні 2 хвилини читає GET /me/tracks?limit=10 (лайки, найновіші зверху).
2. Стан зберігай як ПОЗНАЧКУ ЧАСУ останнього обробленого added_at + список id за цю ж мітку. Не тримай масив усіх бачених треків — він росте нескінченно.
3. Обробляй РІВНО ОДИН новий трек за прохід.
4. Для треку збери: стиль, лейбл, рік, BPM, тональність, країну артиста.
- Стиль і BPM — з Beatport: витягни __NEXT_DATA__ зі сторінки /search/tracks?q=<артист+трек>, знайди об'єкт із track_name і bpm.
- Якщо на Beatport немає — Discogs search API (потрібен персональний токен).
- Якщо немає ніде — пиши «не знайдено». НЕ ВГАДУЙ.
5. Описи артиста і лейбла згенеруй LLM-ом, живою мовою, 1-2 абзаци: хто заснував, коли, місто, чим відомий.
6. Додай трек у плейліст за кожним стилем і в плейліст за назвою лейбла. Немає — створи, є — додай.
7. Запость картку в Telegram (parse_mode HTML), плейлісти — окремим блоком з клікабельними назвами.

ГРАБЛІ, НА ЯКИХ Я ВЖЕ НАСТУПИВ

⚠️ Spotify змінив API в лютому 2026. Старі ендпойнти віддають 403 усім:
POST /users/{id}/playlists → POST /me/playlists
/playlists/{id}/tracks → /playlists/{id}/items
поле tracks у відповідях → items
Ще: limit=12 валить 400 «Invalid limit», валідні 10/20/50.

⚠️ У scheduled() роби await, а НЕ ctx.waitUntil(). З waitUntil планувальник вважає крон
завершеним одразу і вбиває роботу на півдорозі: трек додається в плейлісти,
але мітка не ставиться — і наступний крон бере той самий трек по колу.

⚠️ Постав замок у KV з TTL ~180 с. Робота триває довше за інтервал крона,
без замка два запуски хапають один трек і дублюють пост.

⚠️ Кеш списку плейлістів НЕ МОЖНА зберігати недочитаним. Якщо пагінація обірвалась
на 429 — не пиши результат у сховище. Інакше бот перестане бачити наявні плейлісти
і почне плодити дублі з тими самими назвами.

⚠️ На 429 від Spotify не роби нескінченних ретраїв. Retry-After може бути в ГОДИНАХ.
Чекай тільки якщо там кілька секунд, інакше виходь і чекай наступного крона.

⚠️ Не роби масових догонів по історії лайків. Саме це вибиває денну квоту
і дає бан на багато годин.

⚠️ Перевірку на країну роби через LLM, а не регуляркою по тексту профілю.
Регулярка ловить фрази типу «Russian hardbass scene» і хибно позначає
українських артистів.

До речі, найкращі треки я додаю потім у канал «Айc слухає», підписуйтесь.

Більше — в інших дописах рубрики:

🤖 Кейс ШІзації №1.

Зібрав собі редакцію: 25 корисних подкастів, 13 світових медіа.
🤖 Кейс ШІзації №2. Створюємо власноруч AI-бот, який робить зустріч із переписки.
🤖 Кейс ШІзації №3.

Створив персонального AI-коуча: він контролює мене, щоб я виконував власні цілі.
🤖 Кейс ШІзації №4. Бот, що робить із войса гарно оформлені пости, які приємно читати.

III > I

ask digital me: artemborodatiukbot
watch: YouTube
services and products of FRACTAL: BDO
join: managers community
work with me: Вакансії
my experience in algorithms: «Книга Для менеджерів»
follow: TikTok • Instagram •

Threads