Привет, Хабр, недавно я решил написать свой аудио плеер, используя разные платформы и фреймворки.
Но, сегодня статья не совсем об этом. На этапе требований к технической составляющей проекта я решил, что нужно какой-то место откуда можно "подтаскивать" мелодии. Пересмотрел я много api и остановился на SoundCloud из-за ряда преимуществ:
1. Бесплатно
2. Удобно(по крайне мере я так думал в начале)
Выбор сделан, а значит пора почитать документацию и составить парочку get, post запросов. Для базового функционала в виде скачивания и поиска музыки требуется всего 3 запроса. Но если бы то по какому пути отправлять запрос, какие параметры должны присутствовать в запросе и.т.д было бы известно сразу то эта статья не вышла бы. Как я уже говорил документацию я прочитал и выяснил несколько вещей:
1. Вот так выглядит запрос на поиск
2. У SoundCloud api нельзя просто так взять и скачать трек(например в формате .mp3)
Забегая наперёд(т.к эта статья не об этой теме) 2 проблему можно решить используя FFmpeg. Дело в том что, хоть SoundCloud Api не поддерживает скачивание, но за то он позволяет использовать потоковое вещание(то есть формат .m3u8). Соответственно мы можем скачать музыку в виде такого файла и конвертировать его с помощью FFmpeg.
ffmpeg -i "ссылка полученная с 3 запроса" -c copy -f mp3 "путь к папке куда будете сохронять + имя.формат"
Пока что всё идёт идеально до первого тестового запроса.
Как видите сервер вернул 403. Я стал искать на различных форумах почему так происходит и выяснил что у api SoundCloud есть 2 версии. Отличаются они не многим, разве что во второй версии нет эндпоинтов, посвящённых получению oauth токенов. Но тот факт что 2 версия никак не задокументирована заставил:
A) ,,злиться и ругаться’’
B) Долго искать по разным форумам отрывки нужных мне эндпоинтов.
В ходе поисков помимо того что я нашёл нужные мне эндпоинты, я смог выяснить что вторая версия api не задокументирована потому что до сих пор находится в разработке(с 2019 года) и может изменятся. Подробнее тут.
После того как вы получите oauth токен на сайте, то смело можете составлять ниже приведённые запросы(p.s я использую Postman и все запросы get):
Для поиска:
https://api-v2.soundcloud.com/search?q=название трека&limit=количество ответов
В ответ вы получите json в котором вам нужен вот такой блок:
"media": {
"transcodings": [
{
"url": "тут будет нужный вам uri",
"preset": "",
"duration": "",
"snipped": false,
"format": {
"protocol": "hls",
"mime_type": "audio/mpeg"
},
"quality": ""
},
]
},
Далее используйте полученный uri, чтобы получить ещё один uri:
И вот уже этот Uri используйте для команды в ffmpeg
ffmpeg -i "ссылка полученная с 2 запроса" -c copy -f mp3 "путь к папке куда будете сохронять + имя.формат"
Поздравляю нужный вам трек у вас.
В конце хотел бы сказать что искренне надеюсь что смог кому-то помочь.