LoginSignup
2

More than 3 years have passed since last update.

posted at

updated at

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

本記事は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を入力するウィンドウを表示

最後に

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

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
What you can do with signing up
2