SoundCloud Api или как пример «плохой» документации

от автора

Привет, Хабр, недавно я решил написать свой аудио плеер, используя разные платформы и фреймворки.

Но, сегодня статья не совсем об этом. На этапе требований к технической составляющей проекта я решил, что нужно какой-то место откуда можно «подтаскивать» мелодии. Пересмотрел я много 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 "путь к папке куда будете сохронять + имя.формат" 

Поздравляю нужный вам трек у вас.

В конце хотел бы сказать что искренне надеюсь что смог кому-то помочь.


ссылка на оригинал статьи https://habr.com/ru/articles/850116/