gpt4 book ai didi

typescript - 我怎样才能在angular2中获取所有带有可观察量的youtube视频

转载 作者:太空狗 更新时间:2023-10-29 19:31:07 24 4
gpt4 key购买 nike

我的问题是,我将从 youtube channel 获取所有视频,即 68 个视频,但 youtube 每次请求只允许 50 个视频。我知道 pageToken,但我首先获取最旧的视频。

现在我的想法是,我将获取所有 nextPageTokens,然后从 channel 中获取所有具有此 nextPageTokens 的视频,并在获取后对它们进行排序。

import {Injectable, Inject} from '@angular/core';
import {Http} from '@angular/http';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/scan';
import {Observable} from 'rxjs/Rx';

@Injectable()
export class YoutubeService {

videoArray:Array<any> = [];

constructor(@Inject(Http) private _http:Http) {

}

private extractData(res) {
let body = res.json();
return body || null;
}

private handleError(error:any) {
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server
error';
console.error(errMsg);
return Observable.throw(errMsg);
}


private fetchToken(token = '') {

return new Observable(observer => {

let apiUrl = 'https://www.googleapis.com/youtube/v3/';
let part = 'playlistItems?part=snippet';
let playlistId = '&playlistId=PLBC4D1CE42B269BE5';
let maxResults = '&maxResults=5';
let nextPageToken = '&pageToken=' + token;
let apiKey = '&key={APIKEY}';

console.log(apiUrl + part + playlistId + maxResults + nextPageToken + apiKey);

this._http.get(apiUrl + part + playlistId + maxResults + nextPageToken + apiKey)
.map(this.extractData).subscribe(
data => {
this.videoArray.push(data.items);
console.log(data.nextPageToken);
if(data.nextPageToken !== undefined){
this.fetchToken(data.nextPageToken).subscribe();
observer.next(this.videoArray);
} else {

}
});
})
}

public searchYouTube() {

this.fetchToken().subscribe(
data => {
console.log(data)
}
)}}

有了这个,我得到了一个包含 5 个视频的数组。是否有可能比这更容易、更干净地获取数据。

最好的问候

最佳答案

您可以使用 expand运算符捕获响应并将其反馈给您的源:

function fetchToken(token) {
if (typeof token = 'undefined')
return Rx.Observable.empty();

const baseUrl = 'https://www.googleapis.com/youtube/v3/';
const playlistId = 'PLBC4D1CE42B269BE5';
let url = `${baseUrl}/playlistItems?part=snippet&playlistId=${playlistId}&maxResults=5&pageToken=${token}&key=${API_KEY}`;

return this._http.get(url).map(this.extractData);
}

//The initial request
fetchToken('')
//Invokes subsequent results based on the result of this one
//and feeds them back to this operator
//1 indicates the number of active requests to allow (concurrency 1)
.expand(data => fetchToken(data.nextPageToken), 1)
//Extract the video items
.pluck('items')
//Update the playlist
.subscribe(videos => this.videoArray.push(videos));

关于typescript - 我怎样才能在angular2中获取所有带有可观察量的youtube视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com