こんにちは。
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 のアカウントが必要です。
- Google API のコンソールへ行く。
- 左メニュー「ライブラリ」をクリックし、「YouTube Data API (v3)」を検索・クリックし、有効化する。
- コンソールに戻り、左メニュー「認証情報」をクリック。「認証情報を作成」から「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 にて更にエクステンション等を入れていけば良さそうです。
ここまで読んでいただきありがとうございました!
参考文献
以下のサイトを参考にさせていただきました。
ありがとうございました!