'ハムスター'という名前がタイトルに含まれる再生リストを、再生回数の多い順に上限50まで取得するサンプル。 取得制限数は、スクリプト側でかけてます。
<html> <head> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="/module/include/strm/youtubedataapi_v3_list/style.css"> <title>YouTubeAPIv3サンプル | 再生リストの動画検索(認証なし)</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script> /* 開発キー https://code.google.com/apis/console */ var APIKEY="AIzaSyC3VBRnfUU9_qO1Gr1ARBO8BZLT-Sp6vFc"; function onJSClientLoad() { dbg("★onJSClientLoad"); gapi.client.setApiKey(APIKEY); gapi.client.load('youtube', 'v3', function(){ $.getYouTubeResults({ query:"ハムスター,かわいい", limit:50, maxResults:10 }); }); } (function($){ $.getYouTubeResults=function(options){ dbg("★getYouTubeResults"); var opt=$.extend({ query:"", type:"playlist", maxResults:10, limit:0, channelId:"", regionCode:"JP", /* 国コード */ order:"viewCount", /* 検索順 */ part:"id, snippet, status", fields:"" },options); var pageToken="",s=""; var allcnt=0,j=0,totalResults=0,resultsPerPage=0,total=0; var requestOptions = { maxResults:opt.maxResults, //1ページ当たりの結果数最大値(0-50)デフォルト10 q:opt.query, /* 検索キーワード */ regionCode:opt.regionCode, type:opt.type,//video,channel,playlist order:opt.order, /* publishedAfter publishedBefore topicId videoCaption videoCategoryId videoDefinition videoDimension videoDuration videoEmbeddable videoLicense "relatedToVideoId:"0f1SLJEY6iY",//指定した動画の関連動画のみ検索対象とする videoSyndicated youtube.com外で再生できる動画のみ検索 channelId チャンネル固有ID(ユーザー名ではない)を指定すると、そのチャンネル内での検索となる */ "part":"id,snippet" }; if(opt.fields!="") requestOptions.fields=opt.fields; makeRequest(); /* APIリクエスト */ function makeRequest(){ dbg("★makeRequest:"+pageToken); if(pageToken){ requestOptions.pageToken=pageToken; } var request=gapi.client.request({ mine:"", path:"/youtube/v3/search", params:requestOptions }); request.execute(function(resp) { dbg(resp); if(resp.error){ $("#message").html(resp.error.message); }else{ output(resp,pageToken); } }); } /* HTML出力 */ function output(resp,pageTokenFLG){ pageToken=resp.nextPageToken; /* dbg("output");dbg("pageToken:"+pageToken); */ if(pageTokenFLG==""){ var pageInfo=resp.pageInfo; resultsPerPage=resp.pageInfo.resultsPerPage; /* APIレスポンスに含まれる結果の数 */ totalResults=resp.pageInfo.totalResults; /* 結果セット内の結果の合計数 */ if(opt.limit>0 && totalResults> opt.limit){ totalResults=opt.limit; } total=Math.floor(totalResults/resultsPerPage); if(totalResults<=resultsPerPage){ total=1; }else if(totalResults%resultsPerPage!=0){ total++; } dbg("total:"+total+"/resultsPerPage:"+resultsPerPage+"/totalResults:"+totalResults); s+="<li>結果数最大値の指定:"+opt.maxResults+"</li>"; s+="<li>結果セット内の結果合計数:"+pageInfo.totalResults+"</li>"; s+="<li>1レスポンスに含まれる結果数:"+pageInfo.resultsPerPage+"</li>"; s+="<li>取得数上限:"+((opt.limit==0)?"∞":opt.limit)+"</li>"; s+="<li>リクエスト回数:"+total+"</li>"; $("#results").append("<ul>"+s+"</ul>"); s=""; if(totalResults==0){ $("#message").html("検索条件に一致するデータがありませんでした"); } } itemOutput(resp.items); allcnt++; if(allcnt<total){ makeRequest(); }else{ $("#results").append("<h2>Search Results</h2>"+s); } } function itemOutput(items){ //dbg("allcnt:"+allcnt+"/j:"+j); $.each(items, function(i, item){ if(j>=opt.limit) return; j=(allcnt*resultsPerPage)+i+1; if(item.id && item.snippet){ s+="<dl>"; /* id */ var id=item.id.playlistId; var kind=item.id.kind; var thumbnails_default="no thumbnails"; var snippet=item.snippet; var title=(snippet.title)?snippet.title:"no title"; var channelId=(snippet.channelId)?snippet.channelId:"no channelId"; var channelTitle=(snippet.channelTitle)?snippet.channelTitle:"no channelTitle"; var pubdatedAt=(snippet.publishedAt)?formatDate(snippet.publishedAt):"no publishedAt"; var description=(snippet.description)?snippet.description:"no description"; if(snippet.thumbnails){ $.each(snippet.thumbnails, function(y, ytem){ //default, medium, height if(y=="default"){ thumbnails_default=ytem.url; } }); } s+="<dt>"; s+="<a href='http://www.youtube.com/playlist?list="+id+"'><img src='"+thumbnails_default+"'></a>"; s+="</dt><dd>【"+j+"】"; s+="<p>種類:"+kind+"</a></p>"; s+="<p>再生リスト名(ID):<a href='http://www.youtube.com/playlist?list="+id+"'>"+title+"("+id+")</a></p>"; s+="<p>再生リストが属するチャンネルのタイトル(ID): <a href='http://www.youtube.com/feed/"+channelId+"'>"+channelTitle+"("+channelId+")</a></p>"; s+="<p>登録日: "+pubdatedAt+"</p>"; s+="<p>"+description+"</p>"; /* if(snippet.resourceId && snippet.resourceId.videoId){ s+="<p>resourceId.videoId:<a href='http://www.youtube.com/watch?v="+snippet.resourceId.videoId+"'>"+snippet.resourceId.videoId+"</a></p>"; } */ s+="</dd></dl>"; } }); } return this; } })(jQuery); var formatDate=function(str){ var tmp=str.split("T"); var ymd=tmp[0].split("-"); var hms=tmp[1].split(":"); var sec=hms[2].split(".")[0]; var d=new Date(new Date(ymd[0], ymd[1]-1, ymd[2], hms[0], hms[1], sec).getTime()+(1000*60*60*9)); //+9h var year=d.getFullYear(); var month=d.getMonth()+1; var day=d.getDate(); var hour=(d.getHours() < 10 ) ? '0'+d.getHours() : d.getHours(); var min =(d.getMinutes() < 10 ) ? '0'+d.getMinutes() : d.getMinutes(); var sec =(d.getSeconds() < 10 ) ? '0'+d.getSeconds() : d.getSeconds(); return year+"/"+month+"/"+day+" "+hour+":"+min;//+":"+sec; } var dbg=function(str){ try{ if(window.console && console.log){ console.log(str); } }catch(err){ //alert("error:"+err); } } </script> <script src="https://apis.google.com/js/client.js?onload=onJSClientLoad"></script> <link rel="stylesheet" type="text/css" href="/common/css/example.css"></head> <body id='example3' class='example'><div class="ads" style="margin:32px auto;text-align:center;"></div><h1 class='h'><a href='/'>PHP & JavaScript Room</a> :: 設置サンプル</h1> <h3 class='h'>実行結果</h3> <h1>設置サンプル:[YouTube API(v3) - 再生リストの動画検索(認証なし)</h1> <p> 'ハムスター'という名前がタイトルに含まれる再生リストを、再生回数の多い順に上限50まで取得するサンプル。 取得制限数は、スクリプト側でかけてます。</p> <div id="message"></div> <div id="results"></div> </body> /html>
/html>