Как сделать яндекс музыку бесплатно через телеграм
Ситуация с музыкой в Telegram очень печальна, все что предлагает мессенджер (боты и каналы) являются нелегальными.
И получилось так, что у меня есть большой паблик в VK с музыкой и есть аналогичные каналы в Telegram, но когда я публикую музыку в ВК у меня нет страха, что мой паблик заблокируют, в Telegram же ситуация совершенно иная, и я уже лишился одного канала (был заблокирован по просьбе правообладателей, хотя контент был сразу удален, а по итогу поддержка молчит уже более месяца), а на другом канале пришлось уйти с этой тематики, чтобы сохранить его и его аудиторию.
Исходя из такой ситуации, у меня возник вопрос, почему команда Telegram не легализует музыку\фильмы? Не создаст свои библиотеки на разных языках с разной доступностью для регионов? Чтобы по итогу все каналы публиковали, то что легально в самом Telegram, как это сейчас происходит в ВКонтакте с музыкой.
Они могли бы это запросто монетизировать, вставляя рекламу и давая доступ по подписке, этакий Telegram+ (отсылка к Яндекс плюсу)
Так же я заметил интересный факт (возможно просто совпадение):
— Дуров ушел с поста гендиректора ВКонтакте в Апреле 2016 года.
— Музыку легализовали в Октябре 2016 года
И так как сейчас блокируются боты и каналы с музыкой налево и направо, а сами каналы по итогу разблокировать не возможно, так как поддержка молчит. В данной ситуации я решил проявить инициативу и дать каждому пользователю Telegram свой островок с музыкой, в надежде которую в будущем легализуют.
По факту, без какого-либо программирования, вы создаете бота, который будете использовать либо как свой личный плейлист, который никто не найдет, либо заниматься его продвижением, наращивать аудиторию и зарабатывать на рекламе в боте.
В созданном боте у вас будет доступно 4 пункта меню:
Популярное — В этом разделе у вас будут отображаться песни из рейтинга VK, то есть все что сейчас популярно у пользователей этой соц.сети
Новинки — Здесь же все просто, все что выпустили исполнители за последнее время, все и доступно у вас.
VK-плейлист — Можно сказать это сокровище этого бота, при помощи этого функционала, вы сможете мгновенно перенести весь свой плейлист со своего профиля VK в Телеграм
Давайте разберем по порядку:
Первое и наверное самое важно, этот бот ваш и знаете о нем только вы, получается так, что все остальные музыкальные боты и каналы публичны, то есть на виду у всех пользователей Telegram, именно поэтому рано или поздно такого бота прикроют правообладатели и вам придется искать другого бота и создавать там заново плейлист.
Второе, это продвижение своего канала. То есть если вы ведете какой-либо канал в Telegram, вы можете внутри вашего созданного бота рекламировать канал, какие-то посты и прочее.
Если у вас появятся постоянные слушатели\пользователи вашего бота, то вы сможете на нем заработать (скриншот статистики одного из ботов). Например продать бота вместе с его аудиторией или разместить рекламные посты, какие именно возможности для рекламных креативов у вас есть:
- Текст под музыкой — в описание каждого трека, вы можете разместить любую рекламную ссылку или информацию, что этот трек был найден при помощи вашего бота.
- Информация после запуска бота — как только пользователь запустит ваш бот, в центре экрана появится окно с текстом, в котором, вы можете описать функционал вашего бота, а также добавить любую рекламную ссылку.
- Кнопка в меню — как и у любого другого бота, у вас есть меню, где есть стандартный функционал кнопок, как я уже говорил, в этом боте это кнопки - новинки, популярное, поиск и VK Playlist, помимо этих кнопок, вы можете добавить свою кнопку, в которой сможете разместить ЛЮБУЮ рекламную информацию, либо рекламу ваших групп или контактные данные вашего рекламного менеджера.
- Рекламный пост — помимо всего этого, вы можете разместить полноценный рекламный пост (картинка+текст+кнопка), который будет появляться у пользователей, которые пользуются вашим ботом.
При помощи все этих рекламных размещений, вы можете также отправлять аудиторию на какой-то свой канал
Привет, Хабр! Вновь я с уже второй статьей, затрагивающей API Яндекс.Музыки. Дело запланированное и упоминалось в первой статье.
Руки дошли, дело сделано. Сегодня я расскажу об интересных, на мой взгляд, моментах, которые присутствуют в кодовой базе моего Telegram бота, позиционирующего себя как полноценный клиент я.музыки. Ещё мы затронем API для распознавания музыки от Яндекс.
Перед тем, как приступить к попунктному рассказу реализации той или иной вещи, стоило бы иметь представление о самом боте и его функциональных возможностях.
В основной части я расскажу про следующее:
Основная часть
1. Авторизация в аккаунт
Для авторизации используется полученный OAuth токен, который передаётся обратно в бота через deep linking.
Конечная ссылка для перенаправления выглядит так: t.me/music_yandex_bot?start=
Так же, среди факторов низкой авторизации, оказалась недоступность зеркал для t.me в России и поддержка только пользователей с подпиской (об этом в заметках, 7 пункт).
Первый пункт решился использованием URI (tg://), и в крайнем случае уже ссылка на зеркало (если не сработал автоматический редирект, и кнопка не помогла), а про второй опять же есть в 7 пункте.
2. Формат данных
Для этого бота я решил первый раз использовать NoSQL БД — MongoDB. Разобрался: когда embed документ, когда нет. Понравилось работать с mongoengine. Но я уж никак не хотел хранить все данные кнопок у себя, а у клиента только ID записи в базе. Меня ужасало количество данных, а я ведь хотел взять бесплатный сервер монго с ограничением в 512 мб для хранения данных. Придумывать красивое переиспользование записей, если данные совпадают в нескольких кнопках и заниматься чисткой устаревших — куда сложнее, чем хранить всё в самих кнопках. Проанализировав размер желаемых для хранения данных, сделал вывод, что это легко поместится.
На первых порах я просто использовал JSON, но уж очень быстро от него отказался, когда упёрся в лимит. У Telegram содержимое данных кнопки может быть только не больше 64 байт в UTF-8.
Поэтому, с подсказки друга, я начал смотреть на pack из модуля struct. Так и родились типы запросов, примитивный формат, упаковка и распаковка. Теперь это используется в боте абсолютно везде.
Формат очень прост. Первый байт — тип, второй — версия. Всё остальное является данными для определенного типа. Типы хранятся как Enum, имеют ID, который и является первый байтом. Помимо ID, у каждого типа лежит формат для упаковки и распаковки данных. Например: тип SHOW_TRACK_MENU, у которого формат имеет значение «s?», где «s» — уникальный идентификатор трека, а "?" — имеется ли у трека текст.
У треков используется строковый тип, потому что: во-первых, ID трека может быть конкатенацией ID альбома и ID трека через двоеточие, а во-вторых, может быть UUID. Треки с UUID — самозагруженные треки, доступные только пользователю, который их загрузил.
Так как данные не всегда соответствуют формату, например, тот же ID трека может быть представлен просто числом, то перед упаковкой надо скастовать его в тип под формат. В данном случае s. Поэтому в классе присутствует метод, нормализующий переданные данные для упаковки, чтобы не делать этого самому при передаче в конструктор.
Строки являются самодостаточными и способны указать свою длину при упаковке и учесть эту длину при распаковке.
Поддержка старых версий не планировалась, поэтому при несоответствии версий выбрасывается исключение. При обработке апдейтов, о которых я расскажу в следующем пункте, вызывается необходимая логика.
Так как Telegram ест исключительно UTF-8, то упакованные данные кодируются в base85. Да, я теряю тут скорость и экономлю самую малость в размере, не используя base64, но, учитывая малые данные, считаю использование base85 уместным.
3. Роутинг апдейтов и контекст
В проекте используется библиотека python-telegram-bot для работы с Telegram Bot API. В ней уже присутствует система регистраций обработчиков на определенные типы пришедших апдейтов, фильтры по регулярным выражениям, командам и так далее. Но, учитывая мой собственный формат данных и свои типы, пришлось унаследоваться от TelegramHandler и реализовать свой Handler.
В каждый обработчик через аргументы передаётся апдейт и контекст. В данном случае контекст у меня свой и именно в Handler’e идёт его формирование, а это: получение и/или добавление пользователя в базу, проверка актуальности токена для получения доступа к музыке, инициализация клиента Яндекс.Музыки в зависимости от статуса авторизации и наличии подписки.
Далее от моего Handler’a идут более специфичные обработчики, например, CallbackQueryHandler. С помощью него происходит регистрация обработчика для определенного типа апдейта (моего типа, с форматом данных). Для проверки, подходит ли данный апдейт под текущий обработчик, распаковка происходит не всех данных, а только первых двух байт. На этом этапе и сверяется необходимость запуска коллбека. Только если запуск коллбека необходим — происходит полная распаковка данных и их передача как kwargs в конечный обработчик. Тут же и происходит отправка аналитических данных на ChatBase.
Логика обработки устаревшей версии проста — сообщить об этом пользователю и прислать обновлённые данные, если возможно.
4. Сервисы
Все сервисы инициализируются при запуске бота в одном управляющем классе, который потом повсеместно используется в любом месте бота (DJ).
У каждого сервиса свой ThreadPoolExecutor с определённым количеством воркеров, в который сабмитятся задачи.
Перезаливка трека в Telegram
На данный момент этот сервис не переписан на User Bot’a для обхода ограничения на размер загружаемого файла в Telegram. Как оказалось, в Яндекс.Музыке есть файлы размером больше 50 мб — подкасты.
Сервис проверяет размер файла и, в случае превышения, — кидает алерт пользователю. Благодаря системе кэширования, описанной в пункте 5, тут происходит проверка наличия и получение текста песни. Кэшируются также и треки. Хэш файла хранится в базе. При наличии такового — идёт отправка аудио с известным кэшем.
При отсутствии файла в базе, происходит прямое получение ссылки с Яндекс.Музыки. Хотя в данный момент возможности менять настройки качества у пользователей нет, но всем выставлены стандартные значения. Происходит поиск файла по битрейту и кодеку из настроек пользователя.
Файл и его обложка загружаются как tempfile.TemporaryFile(), после чего загружаются в Telegram. Стоит отметить, что TG не всегда корректно распознает длительность трека, а про исполнителя и название я вообще молчу. Поэтому эти данные берутся у Яндекса, благо, есть возможность их передать в телегу.
Сервис «подписок» на получение треков и отправка статуса загрузки
В архитектурном решении владелец трека также является подписчиком, но с определённой отметкой, так как способы отправки трека отличаются.
5. Кэширование запросов
Как мы помним из моей прошлой статьи, запросы в API Яндекс.Музыки очень тяжелые. Список треков может быть и 3, и 5 мб. Более того, запросов просто много. С каждой обработкой апдейта на Яндекс отправляется минимум 2 запроса: на инициализацию клиента и на определенное действие. Местами, для сбора достаточного количества информации (например для плейлиста), необходимо сделать запрос на получение плейлиста, на получение его треков, на информации с лендинга (если это умный плейлист), а еще не забываем про инициализацию клиента. В общем, тихий ужас по количеству запросов.
Хотелось чего-то очень универсального, а не делать какие-то хранилища для определенных объектов, тех же клиентов.
Так как библиотека позволяет указать свой собственный экземпляр для выполнения запросов, поверх requests, то этим я и воспользовался.
Суть проста. Сам класс кэша является синглтоном. У него есть всего два параметра: время жизни кэша, размер. При выполнении запроса вызывается враппер. Он и переопределён. Проверка наличия в кэше происходит по хешу замороженных аргов и кваргов. У кэша есть время добавления. При проверке необходимости обновления данных либо достаются данные с LimitedSizeDict, либо делается реальный запрос и добавление в кэш.
Некоторые запросы нельзя кэшировать, например, установку лайка/дизлайка. Если пользователь прожмёт следующую последовательность: лайк, дизлайк, лайк, то в конечном итоге лайк поставлен не будет. Для таких случаев, при отправке запроса, нужно передать аргумент use_cache со значением равным False. Собственно, это единственное место, где кэш не используется.
Благодаря этому я делаю максимально жирные запросы, чтобы они были закэшированы. Не пытаюсь разбить на мелкие и нужные только для текущей страницы. Я беру сразу всё, а при переходе между страницами имею огромную скорость переключения (в сравнении со старым подходом).
Как по мне, то класс кэшируемого запроса получился красиво и элементарно был интегрирован.
Теперь по поводу API. В последнее время в Яндексе всё чаще используют вебсокеты. Встретил их использование в управлении я.модулем и я.станцией. Сервис по распознаванию музыки тоже работает на нём. Я накидал минимальное рабочее решение у себя в боте, но в библиотеку реализацию не добавлял.
Отправляются .ogg файлы с ENCODER=SpeechKit Mobile SDK v3.28.0. Я не проверял то, как оно работает с другими encoder’ами, просто изменяю его в файле, записанном Telegram’ом.
Хоть я и занимался ревёрсом сам, под конец мне скинули уже готовый.
7. Мелкие заметки
Изначально ботом пользоваться могли только пользователи с подпиской по причине того, что сервис можно использовать в ограниченном количестве стран (без подписки), а сервер с ботом находится в Европе. Проблема решена использованием прокси, для выполнения запросов от пользователей без подписки. Сервер с прокси находится в Москве.
Выбор страниц есть, но он ограничен 100 (нельзя больше кнопок добавить, ограничение Telegram). В некоторых общих запросах страниц куда больше.
При форварде аудио в Telegram’e теряется автор и присваивается тому, кто сделал форвард. Поэтому все треки отправляются с подписью юзернейма бота.
Заключение
Несмотря на то, что это очередная статья про Telegram бота, вы дочитали аж до сюда, скорее всего потому, что вас заинтересовал один из пунктов в кате и это замечательно, спасибо Вам большое!
К сожалению, я не открыл исходный код бота целиком (потому что местами надо порефакторить). Многое описано в этой статье, но некоторые аспекты, например, с виртуальными клавиатурами и их генерацией не затронуты. По большей части то, чего нет в статье — просто работа с моей библиотекой, ничего интересного.
Классы, вокруг которых всё вертится, я показал в том виде, в котором они сейчас. Я допускаю наличие там багов, но это всё работает продолжительное время. Местами мне нравится свой код, местами нет — и это нормально. Не забываем, что работа с WS для распознавания — решение на коленке. Готов почитать аргументированную критику в комментариях.
Хоть бот и планировался ещё тогда, когда я начинал писать библиотеку, потом я от этой идеи открестился, но, как видно, вернулся (было скучно).
Яндекс.Музыка Бот — проект, доказывающий пригодность использования библиотеки для работы с API в проектах.
Большое спасибо Маме, Яне, Сане, Славе. Кому за вычитку ошибок, кому за подсказки, без которых некоторых пунктов в этой статье могло и не быть, а кому и просто за оценку статьи перед публикацией. Артуру за пикчи для статьи, Lyod’у за логотип.
Боты в телеграмме дают пользователям возможность насладиться мессенджером по полной. Они позволяют скачивать абсолютно бесплатно музыку, фильмы и даже книги мировых авторов. Например, существует большое количество ботов электронной музыки, которую вы можете слушать и скачивать прямиком из телеграмма. О том, какие есть боты в телеграмме для музыки, мы сегодня поговорим.
Боты для поиска музыки
Прежде, чем я расскажу вам какие боты сейчас популярны, рассмотрим, как ими пользоваться на примере «fmusbot».
- Итак, открываем телеграмм и вводим в поисковой запрос «fmusbot».
- Выбираем первый запрос и открываем его. В открывшемся окне нажимаем кнопку «Старт».
- Затем вводим название песни или просто кликаем на одни из предложенных вариантов: «Популярное» или «Новинки».
- Затем мы можем скачать или прослушать песню. Для начала кликаем по ней, а потом выбираем воспроизведение или скачивание файла.
Надеюсь, вы поняли принцип поиска и загрузки музыки в телеграмме. А теперь уже рассмотрим лучших ботов по музыке в телеграмме.
- @YaMelodyBot – отличный бот для распознавания музыки. Подойдет как хороший поисковик в режиме live.
- @muzikrobot – этот бот выдаст вам список отличных русских и зарубежных музыкальных групп.
- @audio_vk_bot – хороший бот для поиска музыки в социальной сети VK.
- @fmusbot – один из самых популярных поисковиков музыки в телеграмме.
- @GetMusicBot– этот бот найдет всю музыку в SoundCloud и YouTube.
- @Get_Me_This_Song_Bot – позвляет находить, а также слушать и загружать аудиофайлы.
- @MususBot – отличный бот для поиска музыки в телеграмме.
- @Scloud_Bot – бот для поиска музыки на популярном музыкальном сайте SoundCloud.
- @AudioOrgasm_Bot – если вы меломан, то этот бот точно для вас.
- @AUX Music – с помощью этого бота вы сможете найти подходящею подборку и прослушать ее.
Боты для скачивания музыки
- @Get_Me_This_Song_Bot – легкий способ скачать любую музыку и ВК.
- @Scloud_Bot – загрузка любой музыки из SoundCloud.
- @FinderMusic– легкий способ скачать любую музыку.
- @lovehousebot– бот для любителей хаус музыки.
- @moodmusicbot – музыка под любое настроение.
- @YtbAudioBot – легкий бот для скачивания музыки из YouTube.
- @yandex_music_save_bot – этот бот поможет вам скачать любую музыку из яндекса.
- @audio_vk_bot – с помощью этого бота вы сможете загрузить любую музыку из вк в КЭШ и слушать ее оффлайн.
- @radiobot – возможность скачать аудиоэфиры до 15МБ.
- @dipmusic – загрузка электронной музыки.
Боты для прослушивания музыки
- @audiobot – прослушивание музыки в вк.
- @vkmusic_bot – еще один бот для прослушивания музыки в вк.
- @radioarchivebot – радио актив.
- @audioorgasm – еще одно радио.
- @bignoisebot – альтернативная музыка в прямом эфире.
- @GikRadioBot – радио
- @rrecordbot – различные радио станции.
- @Scloud_Bot – музыка в SoundCloud.
- @AUX Music – хорошая подборка музыки.
- @muzikrobot – русская и зарубежная музыка.
Итак, мы рассмотрели десяток ботов различных музыкальных стилей. Рекомендую послушать несколько каналов и определить какие боты в телеграмме для музыки подходят по вкусу.
Боты в телеграмме дают пользователям возможность насладиться мессенджером по полной. Они позволяют скачивать абсолютно бесплатно музыку, фильмы и даже книги мировых авторов. Например, существует большое количество ботов электронной музыки, которую вы можете слушать и скачивать прямиком из телеграмма. О том, какие есть боты в телеграмме для музыки, мы сегодня поговорим.
Боты для поиска музыки
Прежде, чем я расскажу вам какие боты сейчас популярны, рассмотрим, как ими пользоваться на примере «fmusbot».
- Итак, открываем телеграмм и вводим в поисковой запрос «fmusbot».
- Выбираем первый запрос и открываем его. В открывшемся окне нажимаем кнопку «Старт».
- Затем вводим название песни или просто кликаем на одни из предложенных вариантов: «Популярное» или «Новинки».
- Затем мы можем скачать или прослушать песню. Для начала кликаем по ней, а потом выбираем воспроизведение или скачивание файла.
Надеюсь, вы поняли принцип поиска и загрузки музыки в телеграмме. А теперь уже рассмотрим лучших ботов по музыке в телеграмме.
- @YaMelodyBot – отличный бот для распознавания музыки. Подойдет как хороший поисковик в режиме live.
- @muzikrobot – этот бот выдаст вам список отличных русских и зарубежных музыкальных групп.
- @audio_vk_bot – хороший бот для поиска музыки в социальной сети VK.
- @fmusbot – один из самых популярных поисковиков музыки в телеграмме.
- @GetMusicBot– этот бот найдет всю музыку в SoundCloud и YouTube.
- @Get_Me_This_Song_Bot – позвляет находить, а также слушать и загружать аудиофайлы.
- @MususBot – отличный бот для поиска музыки в телеграмме.
- @Scloud_Bot – бот для поиска музыки на популярном музыкальном сайте SoundCloud.
- @AudioOrgasm_Bot – если вы меломан, то этот бот точно для вас.
- @AUX Music – с помощью этого бота вы сможете найти подходящею подборку и прослушать ее.
Боты для скачивания музыки
- @Get_Me_This_Song_Bot – легкий способ скачать любую музыку и ВК.
- @Scloud_Bot – загрузка любой музыки из SoundCloud.
- @FinderMusic– легкий способ скачать любую музыку.
- @lovehousebot– бот для любителей хаус музыки.
- @moodmusicbot – музыка под любое настроение.
- @YtbAudioBot – легкий бот для скачивания музыки из YouTube.
- @yandex_music_save_bot – этот бот поможет вам скачать любую музыку из яндекса.
- @audio_vk_bot – с помощью этого бота вы сможете загрузить любую музыку из вк в КЭШ и слушать ее оффлайн.
- @radiobot – возможность скачать аудиоэфиры до 15МБ.
- @dipmusic – загрузка электронной музыки.
Боты для прослушивания музыки
- @audiobot – прослушивание музыки в вк.
- @vkmusic_bot – еще один бот для прослушивания музыки в вк.
- @radioarchivebot – радио актив.
- @audioorgasm – еще одно радио.
- @bignoisebot – альтернативная музыка в прямом эфире.
- @GikRadioBot – радио
- @rrecordbot – различные радио станции.
- @Scloud_Bot – музыка в SoundCloud.
- @AUX Music – хорошая подборка музыки.
- @muzikrobot – русская и зарубежная музыка.
Итак, мы рассмотрели десяток ботов различных музыкальных стилей. Рекомендую послушать несколько каналов и определить какие боты в телеграмме для музыки подходят по вкусу.
Читайте также: