向外部api发出GET请求时出现非常奇怪/不一致的行为

时间:2017-05-28 18:02:06

标签: rest angular

我正忙于使用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'));
}

0 个答案:

没有答案