LaravelでYoutubeAPIを使って特定チャンネルのタイトル一覧抽出


概要

この記事ではLaravelとYoutube Data api(v3)を用いて
Youtubeの特定チャンネルのtitleを抽出し、
ブラウザに表示する機能のサンプルを実装します。

検索や一覧表示の

参考ドキュメント

Youtube Data API

手順

事前準備

  • YoutubeのAPIを叩くためのアプリケーションキーを取得
  • Youtube APIを有効化

Google Youtube API 認証などで検索すれば出てくるはずです。

実施手順

インストール

$ composer create-project --prefer-dist laravel/laravel bollate "5.8.*"

起動確認

APPキーを生成

$ php artisan key:generate

起動確認

$ php artisan serve

いつものLaravel画面が表示できればOK

GoogleAPIをインストール

phpでGoogleのAPIを使うにあたり便利なライブラリが存在するので利用します(感謝)
google-api-php-client

公式の通りインストール
$ composer require google/apiclient:"^2.0"

GOOGLE_KEYを.envに設定

.env
GOOGLE_API_KEY = "YOURKEYXXXX"

Controller生成

$php artisan make:controller YoutubeController

以下はサンプルです。ライブラリが保持するクラスの関数やプロパティは
APIのリファレンスやライブラリのドキュメントを参照ください。

YoutubeController.php
<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Google_Client;
use Google_Service_YouTube;

class YoutubeController extends Controller
{
    const MAX_SNIPPETS_COUNT = 50;
    const DEFAULT_ORDER_TYPE = 'viewCount';

    public function getListByChannelId(string $channelId)
    {
        // Googleへの接続情報のインスタンスを作成と設定
        $client = new Google_Client();
        $client->setDeveloperKey(env('GOOGLE_API_KEY'));

        // 接続情報のインスタンスを用いてYoutubeのデータへアクセス可能なインスタンスを生成
        $youtube = new Google_Service_YouTube($client);

     // 必要情報を引数に持たせ、listSearchで検索して動画一覧を取得
        $items = $youtube->search->listSearch('snippet', [
            'channelId'  => $channelId,
            'order'      => self::DEFAULT_ORDER_TYPE,
            'maxResults' => self::MAX_SNIPPETS_COUNT,
        ]);

        // 連想配列だと扱いづらいのでcollection化して処理
        $snippets = collect($items->getItems())->pluck('snippet')->all();
        return view('youtube/index')->with(['snippets' => $snippets]);
    }
}

Routing生成

web.php

Route::get('youtube/channels/{id}/titles', 'Api\YoutubeController@getListByChannelId');

View生成

index.blade.php
<!doctype html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Youtube</title>
    <link rel="stylesheet" href="/css/app.css">
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body class="index">
    <div class="main">
        <div class="header">
            <div class="header__title">
                <h1 class="header__title__main">
                    Youtube Title List;
                </h1>
                <p class="header__title__sub">
                    This is Youtube Title GET;
                </p>
            </div>
        </div>
        <div class="content">
            <div class="content__body">
                @foreach ($snippets as $snippet)
                    <div class="content__body__videos">
                        <p>
                            {{ $snippet->title }}
                        </p>
                    </div>
                @endforeach
            </div>
        </div>
    </div>
</body>
</html>

実行

$ php artisan serve

チャネルのIDをURLで指定することで特定チャンネルの動画のタイトルリストを得ることができました。

画像内容データ引用元:
【東海オンエア チャンネル】
https://www.youtube.com/channel/UCutJqz56653xV2wwSvut_hQ

他にも、動画をアップロード・再生リストの作成など、様々な操作を実行可能です。

よきAPIライフを