我正忙于使用youtubeInMp3 API的angular4网络应用。使用API下载mp3文件时一切正常,但它并不适用于所有视频,我不确定哪些视频会出现问题,我注意到当YouTube视频ID包含_字符时经常会发生这种情况。当它出现时,我得到以下错误...我知道问题不在于视频,因为它在我测试时工作http://www.youtubeinmp3.com我已经尝试过urlEncoding id,然后再将其传递给API,替换_使用 - 并用%20替换_但没有成功。知道这里可能出现什么问题/如何解决它?
我的错误(来自Chrome开发者控制台)
core.es5.js:3046 Angular正在开发模式下运行。呼叫 enableProdMode()启用生产模式。
main.bundle.js:368 id:t0sS60Jx51c main.bundle.js:788 url main.bundle.js:789 http://www.youtubeinmp3.com/fetch/?format=JSON&video=https://www.youtube.com/watch?v=t0sS60Jx51c main.bundle.js:376 SyntaxError:意外的标记<在JSON的位置 0 在Object.parse() 在Response.Body.json(vendor.bundle.js:37736) 在MapSubscriber.project(main.bundle.js:791) 在MapSubscriber._next(vendor.bundle.js:22171) 在MapSubscriber.Subscriber.next(vendor.bundle.js:242) 在XMLHttpRequest.onLoad(vendor.bundle.js:38165) 在ZoneDelegate.webpackJsonp.576.ZoneDelegate.invokeTask(polyfills.bundle.js:2496) at Object.onInvokeTask(vendor.bundle.js:5501) 在ZoneDelegate.webpackJsonp.576.ZoneDelegate.invokeTask(polyfills.bundle.js:2495) 在Zone.webpackJsonp.576.Zone.runTask(polyfills.bundle.js:2263)
当我提出这个让我在失眠REST客户端出错的请求时,我得到以下回复:
metahttp-equiv =“refresh”content =“0”url =“http://www.youtubeinmp3.com/download/?video=https://www.youtube.com/watch?v=t0sS60Jx51cautostart=1n = X =“
对youtubeInMp3 Api的响应成功请求的示例,控制台中记录的ID是YouTube视频ID:
id:bjLorSJAB70 main.bundle.js:788 url main.bundle.js:789 http://www.youtubeinmp3.com/fetch/?format=JSON&video=https://www.youtube.com/watch?v=bjLorSJAB70 main.bundle.js:371对象长度:“199”链接: “http://www.youtubeinmp3.com/download/get/?i=fOzuoPTm06oBoLw3aidWejXF7Yc2JB3T&e=33” 标题: “Santo Daime EU CHAMO A CURA” proto :Object main.bundle.js:373 http://www.youtubeinmp3.com/download/get/?i=fOzuoPTm06oBoLw3aidWejXF7Yc2JB3T&e=33
我的代码:
//function that passes the video id to a restService for downloading:
download(id: string) {
console.log("id: " + id);
this.restService.yDownload(id)
.subscribe(
(res) => {
console.log(res);
let url = res.link;
console.log(url);
window.location.href = `${url}target="_blank"`;
}, (res) => {
console.log(res)
});
}
//rest service function for getting the download link from youtubeInMp3 api
yDownload(id: string) : Observable<any> {
let params = [
`format=JSON`,
`video=https://www.youtube.com/watch?v=${id}`
].join('&');
let queryUrl = `${this.Y_DOWNLOAD_URL}?${params}`;
console.log("url");
console.log(queryUrl);
return this.http.get(queryUrl)
.map((res: Response) => res.json())
.catch((err: any) => Observable.throw(err || 'server error'));
}