2013-11-25 2 views
0

В настоящее время я использую узел для очистки блога, в котором хранятся выбранные данные в файле JSON. При очистке сообщения в блоге, которое содержит встроенный трек из Soundcloud, я, похоже, могу только собрать iframe src, а не ссылку на фактическую дорожку (либо звуковую ссылку, либо ссылку на канал).Soundcloud embed stream URL (Node, JSON)

Когда я скрести IFrame Src URL я, кажется, только быть в состоянии получить ссылку, которая находится в следующем формате: https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/120261008&color=000000&auto_play=false&show_artwork=false

Если я не в состоянии очистить URL дорожки есть способ я m умеет манипулировать тем, как указанная ссылка хранится в массиве? Чтобы эта ссылка была пригодной для использования, мне нужно только сохранить url = https% 3A // api.soundcloud.com/tracks/120261008 (минус url =).

Но тогда проблема состоит в том, что% 3A нуждается в замене к:

Какой самый лучший способ манипулировать URL для достижения желаемого выходного URL либо, когда он хранится или когда его называют?

ответ

1

Я не совсем уверен, что вы планируете делать с URL-адресом трека, только когда у вас есть это, но чтобы получить URL-адрес постоянной ссылки для трека/плейлиста, вам понадобится двухэтапный подход. Во-первых, вы будете нуждаться, чтобы разобрать параметр url в строке запроса в IFrame ЦСИ:

CLIENT_ID = 'client_id=b45b1aa10f1ac2941910a7f0d10f8e28'; 
var src = 'https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/120261008&color=000000&auto_play=false&show_artwork=false', 
    match = src.match(/url=([^&]*)/), 
    resource = match[0], 
    stream = decodeURIComponent(match[1])+'/stream/?'+CLIENT_ID; 

Тогда вы будете нуждаться, чтобы сделать запрос HTTP, чтобы решить API SoundCloud на самом деле превратить этот ресурс в постоянная ссылка URL:

var url = 'http://api.soundcloud.com/resolve.json?'+resource+'&'+CLIENT_ID; 
var xhr = new XMLHttpRequest(); 
xhr.open('GET', url, true); 
xhr.onload = function(){ 
    var data = JSON.parse(xhr.responseText); 
    // do something with the data 
    console.log(data.permalink_url); 
}; 
xhr.send(); 
+0

Каков наилучший способ передать данные за пределами функции xhr.onload, чтобы я мог передать ее через массив, который я создаю? Я хотел бы иметь возможность передать data.permalink_url в массив, который находится за пределами xhr.onload ... – leaksterrr

+0

Вы * можете * изменить строку на 'xhr.open ('GET', url, false)'. Однако я не рекомендую его, так как он сделает запрос ** синхронным ** и предотвратит запуск всего остального до тех пор, пока запрос не завершится. Это позволит вам получить доступ к 'xhr.responseText', не дожидаясь функции onload. – idbehold

Смежные вопросы