YouTube Data APIで動画を検索する
動画を検索するには、YouTube Data API v3を使用します。まずは、https://console.developers.google.comからAPIキーを入手します。
https://www.googleapis.com/youtube/v3/search?type=video&part=snippet&q=KEYWORD&key=API_KEY
上記のURLを叩くと検索結果がJSONで得られます。
PHPで実装
YouTubeの動画検索をjavascriptで実装すると、APIキーが流出する恐れがあるので、今回はPHPで実装することにします。まず、javascriptで検索キーワードの入力を行い、ajaxによって入力されたキーワードをPHPに渡してAPIを実行します。HTMLとjavascriptはこんなかんじ。
HTML
YouTube:<input id="YouTube" type="text"/><button id="ajax_YouTube">検索</button> <div class="result"></div>
テキストボックスに検索ワードを入力し、検索ボタンをクリックすると、resultの部分に検索結果を表示します。
javascript(ajax)
$(function(){ // Ajax button click $('#ajax_YouTube').on('click',function(){ $.ajax({ url:'PHPファイルURL.php', type:'POST', data:{ 'search_str':$('#YouTube').val() } }) // Ajaxリクエストが成功した時発動 .done( (data) => { $('.result').html(data); }) // Ajaxリクエストが失敗した時発動 .fail( (data) => { $('.result').html(data); }) // Ajaxリクエストが成功・失敗どちらでも発動 .always( (data) => { }); }); });
検索ボタンを押すと、PHPを実行し、結果をresultの部分に表示します。
PHP
PHPではAPIから実際に情報を取得します。ここでは、APIから取得した情報の中から、タイトル、サムネイル、アップロード日付、チャンネル名、動画の説明の情報を表示しています。また、タイトルとサムネイルにはYouTubeの動画ページへのリンク、チャンネル名にはチャンネルのページへのリンクを追加しています。
<?php header('Content-type: text/plain; charset= UTF-8'); if(isset($_POST['search_str'])){ $search_str = $_POST['search_str'];//検索ワードの取得 $disp_str = htmlEntities($_POST['search_str']);//検索ワード(表示用) }else{ $search_str = ""; } if($search_str != "" ){ $apiKey = APIキー; $apiAddress_y = "https://www.googleapis.com/youtube/v3/search?type=video&q="; $fragment_y = "&part=snippet"; $order = ""; //再生回数順:&order=viewCount 日付順:&order=date $maxResults = 10; //検索結果数 $address = $apiAddress_y . str_replace (" " , "%20" ,$search_str) . $fragment_y . "&key=" . $apiKey . "&maxResults=" . $maxResults . $order ; $json = cuGet_contents( $address ); //詳細データ取得(下のfunction) $getData = json_decode( $json , true); $videos = "<h5>" . $disp_str . " : 検索結果</h5>"; $video = ""; foreach ($getData["items"] as $searchResult) { //動画タイトル(クリックでYouTubeの動画ページへ移動) $title = sprintf('<a href="https://www.youtube.com/watch?v=%s" target="_blank">%s</a>', $searchResult["id"]["videoId"] ,$searchResult["snippet"]["title"] ); //サムネイル(クリックでYouTubeの動画ページへ移動) $thumbnails = sprintf('<a href="https://www.youtube.com/watch?v=%s" target="_blank"><img src="%s"></a>', $searchResult["id"]["videoId"],$searchResult["snippet"]["thumbnails"]["medium"]["url"] ); //動画のチャンネル(クリックでYouTubeのチャンネルページへ移動) $channel = sprintf('<a href="https://www.youtube.com/channel/%s" target="_blank">%s</a>', $searchResult["snippet"]["channelId"],$searchResult["snippet"]["channelTitle"] ); $video = sprintf('%s<BR>%s<BR>%s<BR>%s<BR>%s<hr>', $title, $thumbnails, "アップロード日付:" . date("Y/m/d",strtotime($searchResult["snippet"]["publishedAt"])), "チャンネル:" . $channel, $searchResult["snippet"]["description"] //動画の説明 ); $videos .= $video; } $result = nl2br($videos); echo $result; }else{ echo "検索ワードを入力してください。"; } function cuGet_contents( $url_address, $timeout = 15 ){ $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url_address ); curl_setopt( $ch, CURLOPT_HEADER, false ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout ); $result = curl_exec( $ch ); curl_close( $ch ); return $result; } ?>
ソースコードはこんなかんじ。
結果
実際に実装してみた。下のテキストボックスに検索ワードを入力して検索ボタンを押すとYouTube動画の検索結果が表示されます。
YouTube:
コメント