Laravelを使用してyoutube apiを呼び出し、動画の一覧を取得する方法を紹介します。
よければ参考にしてください。
なおyoutube apiを呼び出すためにはAPIキーが必要となりますので、予め準備しておいてください。
「Google APIs Client」ライブラリを導入する
youtube apiを呼び出すために「Google APIs Client」ライブラリを導入します。
サーバーにcomposerをインストールした上で以下のコマンドを実行してください。
composer require google/apiclient:"^2.7"
動画の一覧を検索する
まずはyoutube apiを呼び出すメソッドを作りましょう。
ちなみに今回は「/v3/search」と「v3/videos」を利用します。
「/v3/search」は公式サイトに以下のようにあります。
API リクエストで指定したクエリ パラメータに一致する検索結果のコレクションを返します。デフォルトでは、検索結果のセットでは一致する video、channel、playlist の各リソースが識別されますが、特定の種類のリソースだけを取得するようにクエリを設定することもできます。
https://developers.google.com/youtube/v3/docs/search?hl=ja
「v3/videos」は公式サイトに以下のようにあります。
API リクエストのパラメータに一致する動画のリストを返します。
https://developers.google.com/youtube/v3/docs/videos/list?hl=ja
「v3/videos」で動画の再生数や高評価数を取得することができます。
したがって、「/v3/search」で動画を検索して、その後「v3/videos」で詳細情報を取得するといった流れにしたいと思います。
ではapp/Http直下にVenderフォルダを作成してください。
続いてVenderフォルダ直下にCallYoutubeApi.phpファイルを作成してください。
CallYoutubeApi.phpファイルを作成したら、以下のコードをコピペしてください。
<?php
namespace App\Http\Vender;
use Google_Client;
use Google_Service_YouTube;
class CallYoutubeApi
{
private $key = '自身のAPIキー';
private $client;
private $youtube;
public function __construct()
{
$this->client = new Google_Client();
$this->client->setDeveloperKey($this->key);
$this->youtube = new Google_Service_YouTube($this->client);
}
/**
* /v3/searchを呼び出す
*
* @param string $serachWord
* @return array
*/
public function serachList(String $searchWord)
{
$r = $this->youtube->search->listSearch('id', array(
'q' => $searchWord,
'maxResults' => 10,
'order' => 'viewCount',
));
return $r->items;
}
/**
* /v3/videosを呼び出す
*
* @param string $id
* @return array
*/
public function videosList(String $id)
{
$r = $this->youtube->videos->listVideos('statistics,snippet', array(
'id' => $id,
));
return $r->items;
}
}
次にserachListメソッドとvideosListメソッドをコントローラから呼び出します。
以下のコマンドをターミナル上で実行してください。
php artisan make:controller YoutubeController
続いてTwitterController.phpに以下のコードをコピペしてください。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Vender\CallYoutubeApi;
class YouTubeController extends Controller
{
public function index(Request $request)
{
$t = new CallYoutubeApi();
$serachList = $t->serachList("検索したいワード");
foreach ($serachList as $result) {
$videosList = $t->videosList($result->id->videoId);
$embed = "https://www.youtube.com/embed/" . $videosList[0]['id'];
$array[] = array($embed, $videosList[0]['snippet'],$videosList[0]['statistics']);
}
return view('youtube', ['youtube' => $array]);
}
}
最後に検索結果を画面上に表示します。
resources/views直下にyoutube.blade.phpファイルを作成してください。
そして以下のコードをコピペしてください。
@if (count($youtube) > 0)
<table class="table table-striped">
<thead>
<tr>
<th>image</th>
<th>title</th>
<th>viewCount</th>
<th>likeCount</th>
<th>dislikeCount</th>
</tr>
</thead>
<tbody>
@foreach ($youtube as $youtube)
<tr>
<td>
<iframe id="ytplayer" type="text/html" width="320" height="180"
src={{ $youtube[0] }}
frameborder="0"></iframe>
</td>
<td>{{ $youtube[1]['title'] }}</td>
<td>{{ $youtube[2]['viewCount'] }}</td>
<td>{{ $youtube[2]['likeCount'] }}</td>
<td>{{ $youtube[2]['dislikeCount'] }}</td>
</tr>
@endforeach
</tbody>
</table>
@endif
次にroute/web.phpファイルに以下を追記してください。
Route::get('youtube', 'YoutubeController@index');
コーディングは以上となります。
ブラウザで~/youtubeにアクセスしてもらえばツイートの一覧が表示されるはずです。