対象
わんコメ
利用OS
Windows
利用バージョン: Windows、わんコメやOBSのバージョン
Windows: 11
わんコメ: 5.1.6(5.2-0beta.58でも確認)
PRO版を利用
していない
発生した場所
その他(自作アプリ)
発生したURL
ライブ配信であれば問わない
発生日時
2024/05/15 01:00頃~
発生時のスクリーンショット
(なし)
内容
お世話になっております。
質問にするか迷いましたが、いったん不具合で立てさせていただきます。
自作のアプリ(Python3.10)で、YouTubeのチャット欄をWebSocket APIによって取得し、取得したチャットを加工して別出力する操作をしています。
このときWebSocket APIを実行し内容を確認していると、画面上ではチャットを受信しているにもかかわらず、WebSocketから新規チャット受信時の"type"が"comments"として全く取得できないことが95%くらいの体感で生じています。
その時、接続"connected"や"meta"、"pong"は問題なく定期的に取得し、チャット時には"userDatas"も出ますが、"comments"だけ出力がない状態です。
ただし何らかのきっかけで取得できた場合、その回は問題なくチャットの取得が行われます。
再現方法(Python3.10環境で以下コードを実行)
`# -- coding: utf-8 - -
import asyncio
import json
import websockets
uri = “ws://127.0.0.1:11180/sub”
async def counter():
async with websockets.connect(uri) as websocket:
while True:
raw_data = await websocket.recv()
data = json.loads(raw_data)
print(data[“type”])
if name == ‘main ’:
asyncio.run(counter())`
このときの出力結果は以下の通りです。
log.txt (17.5 KB)
もし対応が可能であれば調査をお願いできますでしょうか。
ASTIE
2024 年 5 月 16 日午前 12:20
2
こんにちは
WebSocketAPIはわんコメ内蔵のテンプレートでも同じものを使用しています
そちらでの動作はいかがでしょうか?
再現方法についてはコードのみででは環境構築のズレが発生するため、サンドボックスサービスなど動作とコードを含めて確認できる環境でご提示いただけますでしょうか
ご返信ありがとうございます。
遅くなってしまいましたが、こちらで原因など調べて参りました。
結論としてWebSocket APIで"comments"が取得できない理由は、
「書き出し」をオンにしていないことでした。
こちらの想定では新規コメント取得の段階でWebSocketの情報も取得できると思っていたのですが、現在の仕様として「書き出し」がオンでないとデータを取得できないみたいです。
(認識齟齬などありましたらご教授ください)
今回このような質問をさせていただきました背景を説明します。
わんコメの1番目の枠で取得したチャットに対して、そのチャットを加工して2番目の枠に流し、加工済のチャットのみをOBS画面に出力するアプリを作成していました。
その際、内容を重複することを避けるため1番目の枠を書き出さない設定にしたところ、データそのものを取得できなかったため今回の質問に至りました。
書き出しオンオフに関係なくWebSocketのデータとして取得できれば嬉しいのですが、現時点では難しいかもしれないので他の方法を模索しようと思います。
また可能であれば、何かヒントなどありましたら助かります。
いったん、この枠としては閉じていただいて構いません。
ありがとうございました。
ASTIE
2024 年 5 月 18 日午前 6:45
4
結論としてWebSocket APIで"comments"が取得できない理由は、
「書き出し」をオンにしていないことでした。
WebSocketAPIはテンプレートやWordPartyでも使用しているもので、コラボなどの出力のコントロールのために「書き出し」の設定はONである必要があります
わんコメの1番目の枠で取得したチャットに対して、そのチャットを加工して2番目の枠に流し、加工済のチャットのみをOBS画面に出力するアプリを作成していました。
技術的に前述の課題を回避する方法はありますが、その点をクリアしても上記の方式ではさらにいくつか問題が発生するかと思います
リスナーリストの投稿数が2重カウントされる
アンケート・リクエストなどが2回投稿される(参加管理は同一ユーザーが連続投稿ものは無視されるため影響なし)
プラグイン・リモートビュー・わんコメに同じコメントが連続で表示される
ユーザー別に翻訳連携している場合、そのユーザーの翻訳量が倍になる
これについては許容されるものでしょうか?
ASTIE
2024 年 5 月 18 日午前 6:55
5
他のやり方として思いつく部分としてはわんコメに戻さずテンプレートに送信する方法でしょうか(もしくはわんコメ定例で少しだけ解説した5.2βでのプラグインでコメントフィルタ)
わんコメのテンプレートはコメント取得するWebSocketのホストやポートを、JavaScript、URLクエリパラメータ、CSS変数の3種類から変更できます
async setup(op: Partial<OneSDKConfig> = {}) {
Object.assign(this._config, op)
const url = new URL(location.href)
if (url.searchParams.get('css')) {
const css = url.searchParams.get('css') as string
const style = document.createElement('link')
style.rel = 'stylesheet'
style.href = css
document.head.appendChild(style)
}
if (url.searchParams.get('style')) {
const styleStr = url.searchParams.get('style') as string
const style = document.createElement('style')
style.innerHTML = styleStr
document.head.appendChild(style)
}
this._config.protocol = this.getStyleVariable<Protocol>('--one-sdk-protocol', this._config.protocol)
this._config.host = this.getStyleVariable<string>('--one-sdk-host', this._config.host)
this._config.pathname = this.getStyleVariable<string>('--one-sdk-pathname', this._config.pathname)
this._config.port = this.getStyleVariable<number>('--one-sdk-port', this._config.port, parseInt)
This file has been truncated. show original
わんコメのコメントを取得した後、加工後テンプレートのWebSocketクライアントに対して送信すればテンプレートで直接受け取ることができます
WebSocketクライアントに送る際には以下のようなフォーマットでコメント送信すればJavaScriptを変更せずに送れると思います
{
type: 'comments',
comments: Comment[] // コメントデータの配列
}
ASTIE
2024 年 5 月 18 日午前 7:38
6
わんコメ5.2βで開発中のプラグイン機能を使ったコメント加工サンプルプラグインを用意しましたので、こちらは参考までに・・・
遅くなりました、コメントありがとうございます。
コメントいただきましたように、専用テンプレートを作成してそこへWebSocketで流すことにより解決しました。
アイディアをいただきありがとうございました。