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 "путь к папке куда будете сохронять + имя.формат" 

Пока что всё идёт идеально до первого тестового запроса.

c8746a3d909306d53f90270479fb5880.png

Как видите сервер вернул 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:

f781387d185927fc0dfdda2130ba1fe4.png

И вот уже этот Uri используйте для команды в ffmpeg

ffmpeg -i "ссылка полученная с 2 запроса" -c copy -f mp3 "путь к папке куда будете сохронять + имя.формат" 

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

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

© Habrahabr.ru