401 त्रुटि देने वाला साउंडक्लाउड एपीआई / स्ट्रीम एंडपॉइंट


13

मैं एक प्रतिक्रिया मूल एप्लिकेशन लिखने की कोशिश कर रहा हूं जो साउंडक्लाउड से कुछ पटरियों को स्ट्रीम करेगा। एक परीक्षण के रूप में, मैं अजगर का उपयोग करते हुए एपीआई के साथ खेल रहा हूं, और मैं url को हल करने, प्लेलिस्ट / ट्रैक्स को खींचने के लिए अनुरोध करने में सक्षम हूं, और बाकी सब कुछ जो मुझे चाहिए।

इसके साथ ही, किसी भी ट्रैक के stream_url के लिए अनुरोध करते समय, मुझे एक 401 त्रुटि मिलती है।

वर्तमान url विचाराधीन है: https://api.soundcloud.com/tracks/699691660/stream?client_id=PGBAyVqBYXvDBjeaz3kSsHAMnr1fndh1

मैंने इसे ग्राहक के बिना आज़माया है? ग्राहक_ ..., मैंने बदलने की कोशिश की है? के साथ और, मैंने एक और ग्राहक_ प्राप्त करने की कोशिश की है, मैंने इसे सही और गलत दोनों के रूप में allow_redirects के साथ आज़माया है, लेकिन कुछ भी काम नहीं करता है। किसी भी तरह की सहायता का स्वागत किया जाएगा।

हर ट्रैक की स्ट्रीम करने योग्य संपत्ति ट्रू है, इसलिए इसे परमिशन इश्यू नहीं होना चाहिए।

संपादित करें:

थोड़ा शोध करने के बाद, मैंने एक अर्ध-सफल वर्कअराउंड ढूंढ लिया है। API का / स्ट्रीम एंडपॉइंट अभी भी काम नहीं कर रहा है, लेकिन यदि आप अपना गंतव्य समापन बिंदु http://feeds.soundcloud.com/users/soundcloud:users : /sounds.rss में बदलते हैं, तो यह आपको RSS फ़ीड देगा। (ज्यादातर) वही जो आप पटरियों या प्लेलिस्ट एपीआई एंडपॉइंट का उपयोग करके प्राप्त करेंगे।

उसमें मौजूद लिंक को स्ट्रीम किया जा सकता है।


1
मैं थोड़ी देर के लिए एपीआई का उपयोग कर रहा हूं, मुझे हाल ही में 401 त्रुटि भी मिली है, यह सिर्फ आप नहीं है।
r3verse

जावास्क्रिप्ट के साथ मेरे मामले में, एपीआई कुछ दिनों के लिए काम नहीं कर रहा है।
डैनियल

सभी ऐप जो मैं इस्तेमाल करता हूं, जो साउंडक्लाउड एपीआई को हिट करते हैं, वे सभी अब हफ्तों से नीचे हैं। लगता है जैसे साउंडक्लाउड ने थर्ड पार्टी डेवलपमेंट को छोड़ दिया है जो वास्तव में बेकार है
oriyentel

जवाबों:


7

ठीक है, मुझे लगता है कि मुझे एक सामान्यीकृत समाधान मिला है जो ज्यादातर लोगों के लिए काम करेगा। काश यह आसान होता, लेकिन यह सबसे आसान काम है जो मैंने अभी तक पाया है।

  1. उपयोगकर्ता से ट्रैक खींचने के लिए API का उपयोग करें। आप सब कुछ इकट्ठा करने के लिए लिंक्डइन_पार्टिशनिंग और नेक्स्ट_फर्ट प्रॉपर्टी का उपयोग कर सकते हैं क्योंकि कॉल की अधिकतम सीमा 200 ट्रैक्स है।

  2. JSON में नीचे खींचे गए डेटा का उपयोग करके, आप उसी चीज़ को प्राप्त करने के लिए permalink_url कुंजी का उपयोग कर सकते हैं जिसे आप ब्राउज़र में टाइप करेंगे।

  3. Permalink_url के लिए अनुरोध करें और HTML तक पहुँचें। आपको कुछ पार्सिंग करने की आवश्यकता होगी, लेकिन आप जो यूआरएल चाहते हैं, वह प्रभाव के लिए कुछ होगा:

    " https://api-v2.soundcloud.com/media/soundcloud:tracks:488625309/c0d9b93d-4a34-4ccf-8e16-7a87cfaa9f79/stream/progressive "

    आप शायद इसे बाहर पार्स करने के लिए एक रेगेक्स का उपयोग कर सकते हैं।

  4. इस url को जोड़ने के लिए एक अनुरोध करें? Client_id = ... और यह आपको इसके रिटर्न json में YET ANOTHER url देगा।

  5. पिछले चरण से लौटाए गए url का उपयोग करके, आप सीधे ब्राउज़र में उस से लिंक कर सकते हैं, और यह आपको आपकी ट्रैक सामग्री पर ले जाएगा। मैंने लिंक को इनपुट करके वीएलसी पर चेक किया और यह सही तरीके से स्ट्रीम हो गया।

उम्मीद है कि यह आपके विकास में मदद करता है।


1
क्या तुमने कभी सिर्फ v2 एपीआई का उपयोग कर माना जाता है? ऐसा लगता है कि उनके पास api-v2.soundcloud.com/tracks?id=<song_id>&client_id= लिंक है जो वे उपयोग करते हैं
user208685

यह अच्छा फैसला है। लेकिन जब आप डायरेक्ट स्ट्रीम यूआरएल प्राप्त करते हैं और इसे खेलने की कोशिश करते हैं, तो साउंडक्लाउड प्ले काउंटर इस नाटक को गिनता है।
एलेक्स

6

चूंकि मुझे एक ही समस्या है, @Default के जवाब ने मुझे एक समाधान खोजने के लिए प्रेरित किया। लेकिन मुझे permalink_url चरण 2 और 3 में वर्कअराउंड समझ में नहीं आया। 3. आसान समाधान हो सकता है:

  1. उदाहरण के लिए उपयोगकर्ता ट्रैक प्राप्त करना api-v2इस तरह समापन बिंदु का उपयोग करना पसंद करता है :
https://api-v2.soundcloud.com/users/<user_id>/track_likes?client_id=<client_id>
  1. प्रतिक्रिया में हम उसके उत्तर में @Default से उल्लेखित आवश्यक URL पा सकते हैं:
collection: [
   {
      track: {
         media: {
            transcodings:[
                   ...
                  {
                     url: "https://api-v2.soundcloud.com/media/soundcloud:tracks:713339251/0ab1d60e-e417-4918-b10f-81d572b862dd/stream/progressive"
                  ...
                  }
               ]
            }

         }
...
]
  1. इस URL को client_idक्वेरी परम के रूप में अनुरोध करें और आपको एक और URL मिलता है जिसके साथ आप ट्रैक को स्ट्रीम / डाउनलोड कर सकते हैं

ध्यान दें कि api-v2अभी भी सार्वजनिक नहीं है और आपके ग्राहक से अनुरोध संभवतः CORS द्वारा अवरुद्ध किया जाएगा।


3
एक उपयोगकर्ता से ट्रैक है: / उपयोगकर्ता / <user_id> / एक उपयोगकर्ता से पटरियों पसंद है: / उपयोगकर्ताओं / <user_id> / track_likes बस एक ही ट्रैक है: / पटरियों / <track_id>
r3verse 13

@ r3verse ने सही किया, मेरे उत्तर को संपादित किया, लेकिन अलग-अलग समापन बिंदुओं के लिए ट्रैक प्रतिनिधित्व समान होना चाहिए
सर्ग

हां लगभग, @Serg, सिंगल ट्रैक के लिए आपके पास नेस्टेड संग्रह ऑब्जेक्ट नहीं है, लेकिन ट्रैक प्रतिनिधित्व समान है। बहुत अच्छा तरीका है।
r3verse

5

जैसा कि @ user208685 द्वारा उल्लेख किया गया है , साउंडक्लाउड एपीआई v2 का उपयोग करके समाधान थोड़ा सरल हो सकता है:

  1. ट्रैक आईडी प्राप्त करें (उदाहरण के लिए https://developers.soundcloud.com/docs पर सार्वजनिक एपीआई का उपयोग करके )
  2. JSON को https://api-v2.soundcloud.com/tracks/TRACK_ID?client_id=CLINENTIDID से प्राप्त करें
  3. JSON पार्स एमपी 3 प्रगतिशील स्ट्रीम URL से
  4. स्ट्रीम URL से MP3 फ़ाइल URL प्राप्त करें
  5. एमपी 3 फ़ाइल URL से मीडिया चलाएं

नोट : यह लिंक सीमित समय के लिए ही मान्य है और चरण 3 से 5 को दोहराकर इसे फिर से बनाया जा सकता है।

उदाहरण के nodeसाथ ( node-fetch):

const clientId = 'YOUR_CLIENT_ID';

(async () => {
  let response = await fetch(`https://api.soundcloud.com/resolve?url=https://soundcloud.com/d-o-lestrade/gabriel-ananda-maceo-plex-solitary-daze-original-mix&client_id=${clientId}`);
  const track = await response.json();
  const trackId = track.id;

  response = await fetch(`https://api-v2.soundcloud.com/tracks/${trackId}?client_id=${clientId}`);
  const trackV2 = await response.json();
  const streamUrl = trackV2.media.transcodings.filter(
    transcoding => transcoding.format.protocol === 'progressive'
  )[0].url;

  response = await fetch(`${streamUrl}?client_id=${clientId}`);
  const stream = await response.json();
  const mp3Url = stream.url;

  console.log(mp3Url);
})();

पायथन में एक समान समाधान के लिए, इस GitHub मुद्दे की जाँच करें: https://github.com/soundcloud/soundcloud-python/issues/87

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.