Próbuję napisać natywną aplikację, która przesyła strumieniowo niektóre utwory z Soundcloud. Jako test bawiłem się interfejsem API przy użyciu Pythona i jestem w stanie wysyłać żądania rozwiązania adresu URL, pobierania list odtwarzania / utworów i wszystkiego, czego potrzebuję.
Powiedziawszy to, kiedy przesyłam żądanie do stream_url dowolnej ścieżki, otrzymuję błąd 401.
Aktualny adres URL to: https://api.soundcloud.com/tracks/699691660/stream?client_id=PGBAyVqBYXvDBjeaz3kSsHAMnr1fndq1
Próbowałem bez? Client_id ..., próbowałem zastąpić? z &, próbowałem uzyskać inny identyfikator_klienta, wypróbowałem go z parametrami allow_redirects jako prawdą i fałszem, ale nic nie działa. Każda pomoc byłaby bardzo mile widziana.
Właściwość do przesyłania strumieniowego każdej ścieżki ma wartość True, więc nie powinna to być kwestia uprawnień.
Edytować:
Po przeprowadzeniu drobnych badań znalazłem częściowo udane obejście. Punkt końcowy / stream interfejsu API nadal nie działa, ale jeśli zmienisz docelowy punkt końcowy na http://feeds.soundcloud.com/users/soundcloud:users : /sounds.rss, otrzymasz kanał RSS, który (głównie) to samo, co można uzyskać za pomocą punktu końcowego interfejsu API ścieżek lub list odtwarzania.
Link w nim zawarty może być przesyłany strumieniowo.
źródło
Odpowiedzi:
Okej, myślę, że znalazłem uogólnione rozwiązanie, które będzie działać dla większości ludzi. Chciałbym, żeby było łatwiej, ale to najprostsza rzecz, jaką do tej pory znalazłem.
Użyj interfejsu API, aby pobrać ścieżki od użytkownika. Możesz użyć link_partitioning i właściwości next_href, aby zebrać wszystko, ponieważ istnieje maksymalny limit 200 ścieżek na połączenie.
Korzystając z danych pobranych w JSON, możesz użyć klucza permalink_url, aby uzyskać to samo, co wpiszesz w przeglądarce.
Złóż wniosek na permalink_url i uzyskaj dostęp do HTML. Musisz parsować, ale adres URL, którego potrzebujesz, będzie miał wpływ na:
„ https://api-v2.soundcloud.com/media/soundcloud:tracks:488625309/c0d9b93d-4a34-4ccf-8e16-7a87cfaa9f79/stream/progressive ”
Prawdopodobnie możesz użyć wyrażenia regularnego, aby to parsować po prostu.
Poproś o dodanie tego adresu URL? Client_id = ... a otrzymasz JESZCZE INNY adres URL w zwrocie json.
Korzystając z adresu URL zwróconego z poprzedniego kroku, możesz połączyć się bezpośrednio z tym w przeglądarce, a to zabierze Cię do zawartości ścieżki. Sprawdziłem VLC, wprowadzając link, który przesyła poprawnie.
Mam nadzieję, że pomoże to niektórym z was w rozwoju.
źródło
Ponieważ mam ten sam problem, odpowiedź z @Default zmotywowała mnie do poszukiwania rozwiązania. Ale nie zrozumiałem obejścia opisanego
permalink_url
w krokach 2 i 3. Łatwiejszym rozwiązaniem może być:api-v2
punktu końcowego:client_id
jako parametr zapytania, a otrzymasz inny adres URL, za pomocą którego możesz przesyłać strumieniowo / pobierać ścieżkęPamiętaj, że
api-v2
nadal nie jest to publiczne, a żądanie Twojego klienta prawdopodobnie zostanie zablokowane przez CORS.źródło
Jak wspomniano w @ user208685, rozwiązanie może być nieco prostsze przy użyciu SoundCloud API v2:
Uwaga : ten link jest ważny tylko przez ograniczony czas i można go zregenerować, powtarzając kroki od 3 do 5.
Przykład w
node
(znode-fetch
):Aby znaleźć podobne rozwiązanie w Pythonie, sprawdź ten problem GitHub: https://github.com/soundcloud/soundcloud-python/issues/87
źródło