MusicNews новости по странам и жанрам
Агрегатор мировых музыкальных новостей. Тянет ленты RSS из профильных изданий и Google News по 47 странам, определяет упомянутых в заголовках исполнителей через MusicBrainz и выводит для каждой новости страну и жанр — чтобы ленту можно было сортировать по стране, жанру и источнику. Рядом — лента физических релизов: винил, CD и кассеты из Bandcamp, Discogs (включая 20 стран отдельно) и Toolbox Records, с фильтрами по формату и источнику. Придумал и проектирую его сам.
01 / что это
Музыкальные новости разбросаны по десяткам изданий — MusicNews собирает их в одну ленту, которую можно сортировать
Обычно, чтобы следить за музыкой, приходится обходить Pitchfork, Billboard, Rolling Stone, NME и ещё десяток сайтов. MusicNews складывает их ленты в один поток и добавляет то, чего у них нет: для каждой новости определяет страну исполнителя и жанр. В итоге можно смотреть, например, «только техно», «только из Японии» или «только из Resident Advisor» — и переключаться между этими срезами в один клик. А отдельная лента собирает свежие физические релизы — винил, CD и кассеты — с теми же фильтрами по формату и источнику.
Ленту новостей расширил Google News Music: 47 стран — от США, Британии и России до Японии, Кореи, Бразилии, Индии, Китая, Турции и стран Ближнего Востока — каждая на своём языке, с корректной кодировкой запроса для японского, корейского, китайского, арабского и русского. Для релизов Discogs теперь опрашивается отдельно по 20 странам и трём форматам (винил, CD, кассета), а RSS-парсер справляется с некорректными датами публикации, не роняя весь импорт. Google News даёт кратно более широкий охват, чем редакционные издания, но и больше шума — поэтому вместо тегов качества источника решение получилось надёжнее: каждая новость из Google News сначала попадает в очередь модерации и публикуется только после подтверждения.
02 / интерфейс
Экраны сервиса



03 / как это работает
От заголовка новости — к стране и жанру: конвейер классификации
Самое сложное — не собрать RSS, а понять, о ком новость, и не ошибиться. Заголовки пишут в Title Case, поэтому наивная эвристика «слова с большой буквы = имя» ловит «Manager», «Live» или «Various Artists» — это реальные (пусть и мусорные) сущности в MusicBrainz. Поэтому перед распознаванием работает список исключений общих слов и известных заглушек.
- RSS. Раз в 15 минут собираются свежие статьи из 167 источников (RSS, Google News, Discogs), дубли отсекаются.
- Извлечение имён. Из заголовка выделяются кандидаты в исполнители (эвристический NER), общие слова отсеиваются по блок-листу.
- MusicBrainz. Каждое имя резолвится в базе — получаем MBID, страну и жанровые теги.
- Нормализация жанров. Сырые теги приводятся к канонической таксономии из 35 жанров.
- Уверенность. Стране и жанру присваивается оценка; в отсортированные срезы попадают только совпадения выше порога — слабые догадки не мусорят ленту.
04 / модерация
Google News даёт охват, модерация — качество
Раз источник настолько широкий, между лентой и читателем встала
очередь проверки: новости из Google News не публикуются
автоматически, а сначала попадают в /admin/review,
где решение принимает человек.
- Очередь. Материал из Google News сначала лежит в
/admin/review, а не в публичной ленте. - Publish / Block. По каждой статье — решение опубликовать или заблокировать; заблокированное в публичных лентах не появляется.
- BlockRule. Правило по домену или ключевому слову блокирует будущие совпадения без ручной проверки каждой новости.
- Массовые действия. Можно выбрать несколько статей и нажать
Publish selected/Block selected, а в шапке очереди — домены с числом материалов и кнопкиPublish domain/Block domain. - Артворк. В
/releases— фильтрWith artwork/Missing artwork, чтобы быстро отделить релизы без обложки.
Заодно подчистил связку с Discogs: релизы теперь хранят
externalProvider/externalId, а тайтлы вида
«Artist — Release» точнее привязывают релиз к исполнителю.
05 / охват и стек
Реальные данные и предсказуемая инфраструктура
Источники: Pitchfork, Stereogum, Consequence, Billboard, Rolling Stone, NME, The Quietus, Resident Advisor, Brooklyn Vegan, Zvuki.ru и InterMedia. Сборка на Next.js и TypeScript, данные — через Prisma: SQLite для локальной разработки без настройки, Postgres в продакшене. Обход лент идемпотентен и запускается по крону, поэтому лента обновляется сама.
06 / дальше
Роадмап
- Реальный Postgres в проде — как только будут доступы к базе; миграция уже описана в
docs/postgres-migration.md. - API-источники помимо RSS: YouTube Data, Spotify, NewsAPI.
- LLM-классификатор как запасной вариант для неоднозначных заголовков.
- Отдельные страницы по исполнителю, стране и жанру; мультиязычность.
- Выборочные лицензированные источники из соцсетей.
07 / next projects