我目前正在使用Node来抓取一个将所选数据存储在JSON文件中的博客。当从Soundcloud中抓取包含嵌入式轨道的博客文章时,我似乎只能收集iframe src而不是实际的跟踪链接(声音云链接或流链接)。
当我刮取iframe src网址时,我似乎只能获得以下格式的链接: https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/120261008&color=000000&auto_play=false&show_artwork=false
如果我无法抓取曲目网址,我是否有办法操纵上述链接如何存储到数组中?为了使这个链接可用,我只需要存储url = https%3A // api.soundcloud.com / tracks / 120261008(减去url =)。
但问题是%3A需要替换为:
在存储或调用url时,操作url以获得所需输出url的最佳方法是什么?
答案 0 :(得分:2)
我不确定您计划使用跟踪网址后计划的内容,但要获得跟踪/播放列表的永久链接网址,您需要采用两步法。首先,您需要解析iframe src中查询字符串中的url
参数:
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;
然后,您需要向SoundCloud的解析API发出HTTP请求,以实际将该资源转换为永久链接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();