PHP
Docker
YoutubeDataAPIv3
docker-compose

YouTube Data API (v3) を Docker で動かしてみた

こんにちは。

Web・iOSアプリエンジニアの三浦です。

https://qiita.com/takayuki-miura0203/items/4fa4cdc9ef0c07a857a9

こちらでは puppeteer を Docker 上で動かしてみましたが、今回は YouTube Data API (v3) を動かしてみたいと思います。

なお、今回のコードはこちらにまとめてあります。

https://github.com/takayuki-miura0203/docker-youtubeApi-sample


準備


技術選定

YouTube Data API を動かすに当たり、 様々な言語のライブラリが提供されているようですが、今回は業務で PHP を使うことが多いため、 PHP の Docker 環境を整えてみる意味も含め PHP用のライブラリ で行くことにしました。


YouTube Data API (v3) の有効化

YouTube Data API (v3) を使用するに当たり、 API を有効化する必要があります。

これには Google のアカウントが必要です。



  1. Google API のコンソールへ行く。

  2. 左メニュー「ライブラリ」をクリックし、「YouTube Data API (v3)」を検索・クリックし、有効化する。

  3. コンソールに戻り、左メニュー「認証情報」をクリック。「認証情報を作成」から「APIキー」を選択し、作成する。


実装してみる

では実際に作ってみましょう!


Docker

まずは Dockerfile からです。

今回は、最低限 composer install でき、またコマンドラインから PHP を実行して YouTube Data API を叩けることを要件とし、以下のように作ってみました。

# CLI だけなら apache は不要かもしれません

FROM php:7.3.4-apache

# composer install のために、 git や unzip が必要
RUN apt-get update && apt-get install -y \
git \
unzip \
vim

WORKDIR /app

# install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer


docker-compose

こちらもあまり特殊なことはしません。

ディレクトリをマウントし、ホストから PHP ファイル等を編集できるようにするくらいです。

version: '3.7'

services:
youtube:
build: youtube
image: youtube-image:1.0.0
container_name: youtube-container
init: true
tty: true
volumes:
- /path/to/youtube/app:/app
working_dir: /app


PHP

今回は、「VTuber」で検索してチャンネル情報を取得し、それらの登録者数・動画総再生数を表示するコードを組んでみました。

<?php

require_once('../vendor/autoload.php');

class YoutubeApi
{
public function run()
{
$client = new Google_Client();
$client->setApplicationName('Sample Application');
// Note: ここは自分の API Key を入れてください
$client->setDeveloperKey('xxxx');

$youtube = new Google_Service_YouTube($client);

// 検索結果を取得
// channel で検索するときは、 order を view count にしても動画総再生順には並ばないようです
$searchResponse = $youtube->search->listSearch(
'snippet',
[
'q' => 'Vtuber',
'type' => 'channel',
'order' => 'viewCount',
'maxResults' => 10,
'regionCode' => 'JP'
]
);

foreach($searchResponse->items as $item) {
// 取得したチャンネルIDをもとに、チャンネルの詳細情報を取得
$channelsResponse = $youtube->channels->listChannels(
'statistics',
['id' => $item->snippet->channelId]
);

echo('channel title : ' . $item->snippet->channelTitle);
echo("\n");
echo('subscriber count: ' . $channelsResponse->items[0]->statistics->subscriberCount);
echo("\n");
echo('view count : ' . $channelsResponse->items[0]->statistics->viewCount);
echo("\n");
echo("----\n\n");
}
}
}

$youtubeApi = new YoutubeApi();
$youtubeApi->run();


実行!

それでは実行してみます!

まずはコンテナを実行します。

# image をビルドして…

docker-compose build --no-cache

# コンテナを実行し、そのままコンテナ内に入ります。
docker-compose run --rm --entrypoint /bin/bash youtube

コンテナに入ったら…

# composer install して…

composer install

# PHP ファイルを実行します
cd src
php youtubeApi.php


結果

2019/05/01 09:30 頃の実行結果は、以下のようになりました。

channel title   : Siro Channel

subscriber count: 625202
view count : 79972749
----

channel title : Mirai Akari Project
subscriber count: 746014
view count : 54467514
----

channel title : Kaguya Luna Official
subscriber count: 954807
view count : 84966355
----

channel title : ひなたチャンネル (Hinata Channel)
subscriber count: 503727
view count : 30622902
----

channel title : バーチャル番組チャンネル
subscriber count: 237756
view count : 14332002
----

channel title : Choco Ch. 癒月ちょこ
subscriber count: 100606
view count : 9217195
----

channel title : YuNi - virtual singer -
subscriber count: 274216
view count : 44797187
----

channel title : アキロゼCh。Vtuber/ホロライブ所属
subscriber count: 27301
view count : 1136670
----

channel title : 佃煮のりおちゃんねる【犬山たまき】
subscriber count: 126962
view count : 7979312
----

channel title : ケリン
subscriber count: 152154
view count : 10973355
----

無事取得できました!

ただチャンネルに関しては、特に view count 順に並んでいるわけではなさそうですね。


さいごに

というわけで、やろうとしたことがかなり少なかったこともあり、結構シンプルに環境を整えることができました。

ここから更にいろいろやろうと思ったら、 Dockerfile にて更にエクステンション等を入れていけば良さそうです。

ここまで読んでいただきありがとうございました!


参考文献

以下のサイトを参考にさせていただきました。

ありがとうございました!