问题
Hi friends am trying to fetch all the results using youtube api v3 search. Here is the code..
<!doctype html>
<html>
<head>
<title>Search</title>
</head>
<body>
<div id="buttons">
<label> <input id="query" value='cats' type="text"/><button id="search-button" onclick="search()">Search</button></label>
</div>
<div id="search-container">
</div>
<button id="prev-button" class="paging-button" onclick="previousPage(document.getElementById('query').value);">Previous Page</button>
<button id="next-button" class="paging-button" onclick="nextPage(document.getElementById('query').value);">Next Page</button><br><br>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="search.js"></script>
<script src="https://apis.google.com/js/client.js?onload=googleApiClientReady"></script>
</body>
Here is the script code..
var search,nextPageToken, prevPageToken;
function search(pageToken) {
var q = $('#query').val();
gapi.client.load('youtube', 'v3', function() {
gapi.client.setApiKey('Api-key');
var request = gapi.client.youtube.search.list({
q: q,
part: 'snippet',
type: 'playlist',
maxResults: 50,
order: 'viewCount'
});
if (pageToken) {
request.pageToken = pageToken;
}
request.execute(function(response) {
nextPageToken = response.result.nextPageToken;
var nextVis = nextPageToken ? 'visible' : 'hidden';
$('#next-button').css('visibility', nextVis);
prevPageToken = response.result.prevPageToken
var prevVis = prevPageToken ? 'visible' : 'hidden';
$('#prev-button').css('visibility', prevVis);
var playlistItems = response.result.items;
if (playlistItems) {
$.each(playlistItems, function(index, item) {
displayResult(item.id);
});
} else {
$('#search-container').html('Sorry you have no uploaded videos');
}
});
});
}
function displayResult(videoSnippet) {
var title = videoSnippet.playlistId;
$('#search-container').append( title + '<br>');
}
function nextPage(val) {;
var search_val=val;
search(nextPageToken,search_val);
}
// Retrieve the previous page of videos in the playlist.
function previousPage(listid) {
var search=listid;
search(prevPageToken,search);
}
Am trying to fetch the all results using pagetokens but am unable to get all the results Am getting the same 50 results repeatedly..How can I get the exact results using search
回答1:
To use the pageToken
parameter, you should place here the string code that you get in your first set of results.
For example, I use Search: list with these parameters:
- part: snippet
- maxResults: 6
- order: viewCount
- type: playlist
https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.search.list?part=snippet&maxResults=6&order=viewCount&type=playlist&_h=4&
Here are the results
- Popular Music Video
- Popular Right Now - Russia
- Popular Right Now
- The Official UK Top 40 Singles Chart - 4th February 2017"
- important videos
- Music Hits 2017 - Best Songs Playlist
Now if we use maxResults: 3
in this request, we get the first 3 as expected.
https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.search.list?part=snippet&maxResults=3&order=viewCount&type=playlist&_h=2&
{
"kind": "youtube#searchListResponse",
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/ytSWQ-kg4VSK7qMICh0IzyEBj9k\"",
"nextPageToken": "CAMQAA",
"regionCode": "PH",
"pageInfo": {
"totalResults": 1000000,
"resultsPerPage": 3
},
"items": [
{
"kind": "youtube#searchResult",
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/WsiG1obELyLKGKhqpeHgqP3Zr0g\"",
"id": {
"kind": "youtube#playlist",
"playlistId": "PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI"
},
"snippet": {
"publishedAt": "2013-11-20T16:21:03.000Z",
"channelId": "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
"title": "Popular Music Videos",
"description": "",
"thumbnails": {
"default": {
"url": ,
"width": 120,
"height": 90
},
"medium": {
"url": ",
"width": 320,
"height": 180
},
"high": {
"url": "",
"width": 480,
"height": 360
}
},
"channelTitle": "Music",
"liveBroadcastContent": "none"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/HSVXUxTS3sWhu_EXXqL19b-n3VE\"",
"id": {
"kind": "youtube#playlist",
"playlistId": "PLgMaGEI-ZiiZ0ZvUtduoDRVXcU5ELjPcI"
},
"snippet": {
"publishedAt": "2014-01-13T16:24:21.000Z",
"channelId": "UCtxxJi5P0rk6rff3_dCfQVw",
"title": "Popular Right Now - Russia",
"description": "",
"thumbnails": {
"default": {
"url": "",
"width": 120,
"height": 90
},
"medium": {
"url": "",
"width": 320,
"height": 180
},
"high": {
"url": "",
"width": 480,
"height": 360
}
},
"channelTitle": "Popular on YouTube - Russia",
"liveBroadcastContent": "none"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/smJq1QWQX4SzucjteOJ91pLe96Y\"",
"id": {
"kind": "youtube#playlist",
"playlistId": "PLrEnWoR732-BHrPp_Pm8_VleD68f9s14-"
},
"snippet": {
"publishedAt": "2014-01-03T17:55:03.000Z",
"channelId": "UCF0pVplsI8R5kcAqgtoRqoA",
"title": "Popular Right Now",
"description": "",
"thumbnails": {
"default": {
"url": "",
"width": 120,
"height": 90
},
"medium": {
"url": "",
"width": 320,
"height": 180
},
"high": {
"url": "",
"width": 480,
"height": 360
}
},
"channelTitle": "Popular on YouTube",
"liveBroadcastContent": "none"
}
}
]
}
You will notice in the above results the parameter "nextPageToken": "CAMQAA", this is the string code that you need to supply on your next request to get the next page, or in this example to get the next three results which are:
- The Official UK Top 40 Singles Chart - 4th February 2017"
- important videos
- Music Hits 2017 - Best Songs Playlist
https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.search.list?part=snippet&maxResults=3&order=viewCount&pageToken=CAMQAA&type=playlist&_h=3&
{
"kind": "youtube#searchListResponse",
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/MUqIBto7KPYKqDBGqUboyp81FPs\"",
"nextPageToken": "CAYQAA",
"prevPageToken": "CAMQAQ",
"regionCode": "PH",
"pageInfo": {
"totalResults": 1000000,
"resultsPerPage": 3
},
"items": [
{
"kind": "youtube#searchResult",
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/yRymKW4Nn45KqMRXNQAMKnKeUB8\"",
"id": {
"kind": "youtube#playlist",
"playlistId": "PL2vrmw2gup2Jre1MK2FL72rQkzbQzFnFM"
},
"snippet": {
"publishedAt": "2015-01-04T15:21:08.000Z",
"channelId": "UCchuF2Q0QhYzeUShQUm1yzQ",
"title": "The Official UK Top 40 Singles Chart - 4th February 2017",
"description": "The Official UK Top 40 Singles Chart [Update Every Week]",
"thumbnails": {
"default": {
"url": "",
"width": 120,
"height": 90
},
"medium": {
"url": "",
"width": 320,
"height": 180
},
"high": {
"url": "",
"width": 480,
"height": 360
}
},
"channelTitle": "MUSIC CHARTS",
"liveBroadcastContent": "none"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/JCiR47eVFaF_o19Ax9V5_K2_Ux8\"",
"id": {
"kind": "youtube#playlist",
"playlistId": "PL7XlqX4npddfrdpMCxBnNZXg2GFll7t5y"
},
"snippet": {
"publishedAt": "2015-12-30T03:21:42.000Z",
"channelId": "UCZj9kF7Wu2IE_-DzbQZwCEw",
"title": "important videos",
"description": "",
"thumbnails": {
"default": {
"url": "",
"width": 120,
"height": 90
},
"medium": {
"url": "",
"width": 320,
"height": 180
},
"high": {
"url": "",
"width": 480,
"height": 360
}
},
"channelTitle": "eljolto",
"liveBroadcastContent": "none"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"uQc-MPTsstrHkQcRXL3IWLmeNsM/BBQhDUu22HGejcoP1QvArM4001U\"",
"id": {
"kind": "youtube#playlist",
"playlistId": "PLw-VjHDlEOgvtnnnqWlTqByAtC7tXBg6D"
},
"snippet": {
"publishedAt": "2015-06-07T17:54:39.000Z",
"channelId": "UCo7i93EtJhQub3SDKrtIAPA",
"title": "Music Hits 2017 - Best Songs Playlist",
"description": "Follow this playlist on Spotify: https:xxx/DZ8tw6 Follow this playlist on Deezer: https:xxxxJmKIaH \"Music can change the world because it can change ...",
"thumbnails": {
"default": {
"url": ,
"width": 120,
"height": 90
},
"medium": {
"url": "",
"width": 320,
"height": 180
},
"high": {
"url": "",
"width": 480,
"height": 360
}
},
"channelTitle": "#RedMusic: HotMusicCharts",
"liveBroadcastContent": "none"
}
}
]
}
Then use again the "nextPageToken": string
to get the next page results.
Hope this information helps you.
来源:https://stackoverflow.com/questions/42132945/unable-to-get-the-second-page-of-search-using-page-tokens-youtube-api-search