Unable to get the second page of search using page tokens youtube api search

眉间皱痕 提交于 2019-12-12 04:26:56

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!