YouTubeLiveのチャットをniconico風にオーバーレイする【Python】

YouTubeLiveのチャット
<img width="200" alt="sample.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240141/fa3076cd-c15b-99a6-37cb-4725de493d2a.gif">
この内容を動画から視線をそらさずに見たい．
というわけでPythonでYoutubeLiveのチャットを某動画サイト風に流すアプリケーションを作りました．

#実行例
<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">YouTubeLiveのチャットをniconico風に流すやつを作りました<a href="https://t.co/kEJHinSWzR">https://t.co/kEJHinSWzR</a> <a href="https://t.co/rQFCZ7HIqn">pic.twitter.com/rQFCZ7HIqn</a></p>&mdash; teahat (@T3ahat) <a href="https://twitter.com/T3ahat/status/1272271658133319686?ref_src=twsrc%5Etfw">June 14, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

基本的にはTiwtterの検索結果をオーバーレイする[某動画サイト風にTwitter検索結果を流す【python】](https://qiita.com/teahat/items/1b0b5b51fbd7bb6e3d58)を流用しています．

#環境
* Windows10
* Python3.7.6
* Youtube Data API v3
* 
tkinterの`"-transparentcolor"`がかなり環境依存なため、Linux,Mac環境では別の記法で実現する必要があります。これらの環境の人は適宜ググってください()

#コード全体
[ココ](https://github.com/T3aHat/JikkyoAlways_for_YouTube)

#仕様
* exeファイルはもちろん,ソースコードである[JikkyoAlways_for_YouTube.py](https://github.com/T3aHat/JikkyoAlways_for_YouTube/blob/master/JikkyoAlways_for_YouTube.py)は(今のところ)Windowsしか対応していない.
* [GoogleCloudPlatform](https://cloud.google.com)から[YoutubeDataAPIv3](https://developers.google.com/youtube/v3/getting-started?hl=ja)にアクセスできるようにする必要がある.

#YouTubeDataAPIv3について
##YouTubeDataAPIv3 APIキー取得方法
<details>
<summary>ここをクリック</summary>
__(1)__[GoogleCloudPlatform](https://cloud.google.com)より新しいプロジェクトを作成
![1 0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240141/28aa38e8-22e5-1f4a-f246-83a77813f1e6.png)
__(2)__適当なプロジェクト名で作成(今回はYouTubeLive2)
![2 0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240141/2ea32ef7-bd34-9aa7-2241-b6b05ac5580e.png)
__(3)__"APIとサービスを有効化"に遷移
![スクリーンショット (80).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240141/6ee04345-91d5-f02b-37ac-a75d47271af7.png)
__(4)__YouTubeDataAPIv3を選択し,次の画面で"有効にする"よりAPIを有効化する
![スクリーンショット (81).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240141/ccdd0a65-0c73-ad36-d490-4a0d6324217f.png)
__(5)__"認証情報を作成"に遷移
![スクリーンショット (83).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240141/62547450-5cc6-9a7a-4953-3e046539e4f7.png)
__(6)__適当に入力
![スクリーンショット (84).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240141/39b5b89b-9b50-b2f0-53ea-e61b23e8db22.png)
__(7)__APIキーが発行されます.
![3 0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240141/cc06634a-030e-b175-fccb-caf8cb403792.png)
このAPIキーを[JikkyoAlways_for_YouTube.exe](https://github.com/T3aHat/JikkyoAlways_for_YouTube/blob/master/JikkyoAlways_for_YouTube.exe)で入力すればこのアプリケーションを利用できます.
ただし,このままでは
<blockquote>
不正使用や割り当ての盗用を防止するには、キーを制限してキーの使用方法を限定します。
</blockquote>
なので適当にアプリケーションの制限をかけてください．
</details>
##API上限について
2020/06/15現在,APIの仕様上限は以下のようになっていました.
これはhttps://console.cloud.google.com/apis/api/youtube.googleapis.com/quotas?project=プロジェクトID でAPIの使用状況とともに確認できます.
![スクリーンショット (87).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240141/0d8dcc8d-2709-9158-a767-7fa37c8c7166.png)
一度のコメント取得でおおよそ7queries使用していました.

余談ですが,APIを叩く際にどれだけのQuotaを使用するかはhttps://developers.google.com/youtube/v3/determine_quota_cost にて確認できるのですが,今回使用する`liveStreamingDetails`は掲載されていません.自分が実験したときは初回9,以降7queries程度となったので参考程度に.

#まとめ
TwitterAPIは5秒に一度検索でツイートを取得すれば上限に到達することはありませんでしたが,YouTubeDataAPIv3は厳しいですね.取得周期を短く設定するとあっという間に上限に到達してしまいます.この上限を突破できない限りリアルタイムなチャット取得はなかなか厳しいです(一応,申請すれば上限解放可).


#参考
[YouTube Live チャット欄をAPIでリアルタイム取得](https://qiita.com/iroiro_bot/items/ad0f3901a2336fe48e8f)