Javascript YouTube API nextPageToken
我对javascript相当陌生,而且我有点沉迷于使用youTube API。我能够用我需要的数据得到结果,循环遍历每个数据并显示它们,但问题在于下一个GetOken。我似乎不明白为什么在使用nextPage标记执行第二次搜索功能后,我无法放弃旧的搜索功能,因此,我得到了多个重复的结果 我正在记录令牌以查看和跟踪它们,并且我总是复制以前的令牌Javascript YouTube API nextPageToken,javascript,jquery,html,youtube-api,youtube-javascript-api,Javascript,Jquery,Html,Youtube Api,Youtube Javascript Api,我对javascript相当陌生,而且我有点沉迷于使用youTube API。我能够用我需要的数据得到结果,循环遍历每个数据并显示它们,但问题在于下一个GetOken。我似乎不明白为什么在使用nextPage标记执行第二次搜索功能后,我无法放弃旧的搜索功能,因此,我得到了多个重复的结果 我正在记录令牌以查看和跟踪它们,并且我总是复制以前的令牌 <body> <div class="youtube-feed container"> <script id="te
<body>
<div class="youtube-feed container">
<script id="template" type=test/template>
<div class="youtube-item">
<a href="{{link}}" class="link">
<img src="{{thumb}}" alt="">
</a>
<div class="info">
<h6 class="title">{{title}}</h6>
<p>{{channel}}</p>
<p>{{views}}</p>
</div>
</div>
</script>
</div>
<div class="button container">
<a href="#" id="next">Next Page</a>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
(function() {
var query = 'Random search string',
apiKey = 'api key here';
getData();
function getData() {
$.get('https://www.googleapis.com/youtube/v3/search', {
part: 'snippet, id',
q: query,
type: 'video',
maxResults: 10,
key: apiKey},
function(data) {
var nextToken = data.nextPageToken;
$.each(data.items, function(i, item) {
var resultsData = {
id: item.id.videoId,
title: item.snippet.title,
desc: item.snippet.description,
thumb: item.snippet.thumbnails.medium.url,
channel: item.snippet.channelTitle
};
$.get('https://www.googleapis.com/youtube/v3/videos', {
part: 'statistics',
id: resultsData.id,
key: apiKey},
function(data) {
$.each(data.items, function(i, item) {
var views = item.statistics.viewCount;
resultsData.viewCount = views;
});
renderData(resultsData);
});
});
nextButton(nextToken);
});
};
function renderData(obj) {
var template = $.trim($('#template').html()),
dataVals = template.replace(/{{id}}/ig, obj.id)
.replace(/{{title}}/ig, obj.title)
.replace(/{{thumb}}/ig, obj.thumb)
.replace(/{{channel}}/ig, obj.channel)
.replace(/{{views}}/ig, obj.viewCount)
.replace(/{{link}}/ig, 'https://www.youtube/com/embed/' + obj.id);
$(dataVals).appendTo('.youtube-feed');
};
function nextButton(token) {
$('#next').on('click', function(e) {
e.preventDefault();
nextPage(token);
});
};
function nextPage(token) {
$.get('https://www.googleapis.com/youtube/v3/search', {
part: 'snippet, id',
q: query,
type: 'video',
maxResults: 2,
pageToken: token,
key: apiKey},
function(data) {
var nextToken = data.nextPageToken;
$.each(data.items, function(i, item) {
var resultsData = {
id: item.id.videoId,
title: item.snippet.title,
desc: item.snippet.description,
thumb: item.snippet.thumbnails.medium.url,
channel: item.snippet.channelTitle
};
$.get('https://www.googleapis.com/youtube/v3/videos', {
part: 'statistics',
id: resultsData.id,
key: apiKey},
function(data) {
$.each(data.items, function(i, item) {
var views = item.statistics.viewCount;
resultsData.viewCount = views;
});
renderData(resultsData);
});
});
nextButton(nextToken);
console.log(nextToken);
});
};
})();
</script>
</body>
{{title}}
{{channel}}
{{views}
(功能(){
变量查询='随机搜索字符串',
apiKey='api key here';
getData();
函数getData(){
$.get('https://www.googleapis.com/youtube/v3/search', {
部分:“代码段,id”,
问:质疑,,
键入:“视频”,
最大结果:10,
key:apiKey},
功能(数据){
var nextToken=data.nextPageToken;
$.each(data.items,function(i,item){
var resultsData={
id:item.id.videoId,
标题:item.snippet.title,
desc:item.snippet.description,
thumb:item.snippet.thumbnails.medium.url,
频道:item.snippet.channelTitle
};
$.get('https://www.googleapis.com/youtube/v3/videos', {
第:"统计数字",,
id:resultsData.id,
key:apiKey},
功能(数据){
$.each(data.items,function(i,item){
变量视图=item.statistics.viewCount;
resultsData.viewCount=视图;
});
renderData(结果数据);
});
});
下一个按钮(下一个按钮);
});
};
功能渲染数据(obj){
var template=$.trim($('#template').html()),
dataVals=template.replace(/{{id}}/ig,obj.id)
.replace(/{{title}}/ig,obj.title)
.replace(/{{thumb}}/ig,obj.thumb)
.replace(/{{channel}}/ig,obj.channel)
.replace(/{{views}}/ig,obj.viewCount)
.replace(/{{link}}/ig,'https://www.youtube/com/embed/“+对象id);
$(dataVals.appendTo('.youtube提要');
};
功能下一个按钮(令牌){
$(“#下一步”)。在('click',函数(e){
e、 预防默认值();
下一页(代币);
});
};
功能下一页(令牌){
$.get('https://www.googleapis.com/youtube/v3/search', {
部分:“代码段,id”,
问:质疑,,
键入:“视频”,
最大结果:2,
pageToken:token,
key:apiKey},
功能(数据){
var nextToken=data.nextPageToken;
$.each(data.items,function(i,item){
var resultsData={
id:item.id.videoId,
标题:item.snippet.title,
desc:item.snippet.description,
thumb:item.snippet.thumbnails.medium.url,
频道:item.snippet.channelTitle
};
$.get('https://www.googleapis.com/youtube/v3/videos', {
第:"统计数字",,
id:resultsData.id,
key:apiKey},
功能(数据){
$.each(data.items,function(i,item){
变量视图=item.statistics.viewCount;
resultsData.viewCount=视图;
});
renderData(结果数据);
});
});
下一个按钮(下一个按钮);
控制台日志(nextToken);
});
};
})();
在添加新的click事件处理程序之前,您需要先删除click事件处理程序,否则它们会累加,请参阅:
下面是一个完整的示例,它还涉及最后一页(当没有pageToken
字段时):
{{title}}
{{channel}}
{{views}
(功能(){
var查询='TANNOY dvs 6',
apiKey='您的API_密钥';
var reachLastPage=false;
getData();
函数getData(){
$.get('https://www.googleapis.com/youtube/v3/search', {
部分:“代码段,id”,
问:质疑,,
键入:“视频”,
最大结果:10,
钥匙:apiKey
},
功能(数据){
$.each(data.items,function(i,item){
var resultsData={
id:item.id.videoId,
标题:item.snippet.title,
desc:item.snippet.description,
thumb:item.snippet.thumbnails.medium.url,
频道:item.snippet.channelTitle
};
$.get('https://www.googleapis.com/youtube/v3/videos', {
第:"统计数字",,
id:resultsData.id,
钥匙:apiKey
},
功能(数据){
$.each(data.items,function(i,item){
变量视图=item.statistics.viewCount;
resultsData.viewCount=视图;
});
renderData(结果数据);
});
});
if(data.nextPageToken){
日志(“转到令牌:+data.nextPageToken”);
nextButton(data.nextPageToken);
}否则{
console.log(“没有剩余页面”);
reachLastPage=true;
}
});
};
功能渲染数据(obj){
变量模板=$.trim($('#模板').ht
$('#next').off('click').on('click', function(e) {
e.preventDefault();
nextPage(token);
});