Skip to content
This repository has been archived by the owner on Jan 25, 2022. It is now read-only.

ChatProcessorのカスタマイズ

taizan-hokuto edited this page Jul 24, 2020 · 19 revisions

ChatProcessorは、LiveChatオブジェクトから定型的なデータ(chat_components:後述)を受け取り、
任意の形式に加工したデータを返すオブジェクトです。

pytchatには組み込みのChatProcessorとして以下のクラスを同梱しています。

  • DefaultProcessor : チャットデータへのアクセスを容易に行うための標準的なProcessor
  • CompatibleProcessor : Youtube APIが返すJSONデータと互換性のあるProcessor
  • JsonfileArchiver : チャットデータを1行ずつJSON形式でファイルに保存するProcessor
  • SpeedCalculator : チャットの勢いを算出するProcessor
  • SuperchatCalculator : スーパーチャットの金額を集計するProcessor

拡張

自作したChatProcessorは、LiveChatオブジェクトのコンストラクタのprocessorパラメータで指定することができます。

from pytchat import LiveChat
import MyProcessor

chat = LiveChat("video_id", processor = MyProcessor())


ChatProcessorを複数使用する場合は、タプルで指定します

chat = LiveChat("video_id", processor = (Processor1(), Processor2()) )
data1, data2 = chat.get()

インタフェース

process(chat_components: List[chat_component])

process関数は、chat_componentを要素とするリスト(chat_components)を引数にとります。

class MyProcessor:
    def process(self, chat_components):
        #...process chatdata...

chat_components の要素である chat_component は、video_id、timeout、chatdataをキーに持つ辞書です。

chat_component = {
    "video_id" : "xxxxxxxxxxx",  #動画ID
    "timeout"  : 7.5231,              #チャットデータのタイムアウト時間
    "chatdata" : {"addChatItemAction":{"item":{"liveChatTextMessageRenderer":[......}}} #Youtubeから取得したチャットデータ
}

chatdata は Youtubeから取得したjson形式のチャットデータをpython辞書形式に変換したものです。

finalize(*args, **kwargs)

finalize関数は、チャット加工の終了処理を行うためのインターフェイスです。

チャット取得が終了したとき(接続エラーもしくはCtrl+Cによる停止、他の例外発生による停止を含む)、LiveChat オブジェクトから呼び出されます。