Help us understand the problem. What is going on with this article?

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

最後に

  • チャット流れるの楽しい
  • いくらでもコマンドを増やせて楽しい
  • 配信画面が賑やかで楽しい
eteeeeeerminal
AIに興味があります。 情報系Vtuber、珠響そうきの何かです。 https://twitter.com/tamayurasouki
https://twitter.com/tamayurasouki
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした