9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VTuber Tech #1Advent Calendar 2019

Day 25

YouTubeLiveのチャットを表示して遊んでみた

Last updated at Posted at 2019-12-25

本記事はVTuber Tech #1 Advent Calendar 2019の25日目の記事です。
普段は、珠響そうきという名前でVtuber活動をしています。

チャットを取得して、グリーンバックで表示して遊んだ

右から左へ、チャットが流れていくアプリを作った。
文字色の変更や、音声を再生するコマンド、雨を降らせるコマンドなども実装した。

でも.PNG

機能テスト
実際に使っている様子 (直近の配信)

↓好きに使ってください。
ソースコード
pyinstallerでexe化したやつ

使い方(READMEのコピペ)

起動して出てくるウィンドウのIDと書かれた横に、配信のID(URLの中にあるやつ)を入力して、okボタンを押してください。
何もなければ、緑色の画面にコメントが流れます。

  • setting.json

    • "chat_id" ここに配信のIDを入力します。(起動時にソフト上で入力できます)
    • "win_size" の [縦の解像度, 横の解像度] でウィンドウの解像度を変更できます。
    • "back_color" の [R, G, B] で背景色を指定出来ます。
  • chat_setting.json

    • "plain_font_path" でデフォルトで使用するフォントファイルを指定できます。

    • "sound_commands" で音声系のコマンドの設定が出来ます。
      新規に増やすことも出来ます。
      ※pygame(使用しているライブラリ)の仕様上、wavとoggのみロード出来ます。

    • "speed_commands" で文字の速度を変更するコマンドを設定できます。
      "speed" でマイナスを指定すると、逆から流れます。

    • "color_commands" で文字色を変更するコマンドを設定できます。
      [R,G,B]で指定してください。
      "outline_color" は1ドットだけついてる縁色の設定です。

    • "rain_commands" で文字がランダムに降ってくるコマンドを設定できます。
      "time" の秒数だけ、ランダムに"drops" 内のいずれかの文字が上から降ります。
      初速と加速度を設定できます。

やったこと

  1. pychat を使ってYouTubeLiveのチャットを取得
  2. pygame で愚直に描画

はじめはSeleniumで無理やりチャットを取得してた

チャットを取得

pychatを使えば余裕でできた(感謝)。
配信URLの中にあるIDを渡してやるだけで動いた。

サンプルコード
from pytchat import LiveChat
import time

def main()
  chat = LiveChat("ここにidを入れる", callback = func)
  while chat.is_alive():
    time.sleep(3)
    # 好きな処理を書く
   
# callback 引数に関数を渡すと、定期的にチャットを受け取ってくれる。
def func(data):
  for c in data.items:
    print(f"{c.datetime} [{c.author.name}]-{c.message} {c.amountString}")
    data.tick()

ただ、アプリに組み込んだときに、python が終了しないバグ発生。

chat.terminate()を呼び出してやると、正常終了した。

pygame で描画

日本語訳されたリファレンスがあるので、それを見つつやった。

  • pygame は文字列も画像もSurfaceオブジェクトに乗っける
  • インストールされているフォントの指定でつまづいたので、直接.ttfをロードした
  • emoji が入ってくるとやられるので、emojiを駆逐
  • 文字の縁取りが標準で実装されていないので、ここのを使った

他の機能

  • コマンド機能

    • 単純に /red 等の文字列が含まれているコメント用の処理を用意
    • json を書き換えれば、文字色や音声を鳴らすコマンドは好きに増やせる
  • 音声を再生

    • もちろん pygame でできる
    • 効果音用の mixer.Sound クラスを使った
  • ID入力

    • pygame には、お馴染みの入力フォームやボタンが無い
    • 起動時に、tkinter で IDを入力するウィンドウを表示

最後に

  • チャット流れるの楽しい
  • いくらでもコマンドを増やせて楽しい
  • 配信画面が賑やかで楽しい
9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?