Laravelでyoutube apiを呼び出し、動画リストを取得する方法

スポンサーリンク

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にアクセスしてもらえばツイートの一覧が表示されるはずです。

Laravel
スポンサーリンク
エンジニアの日記

コメント