👌

clusterでイベントのコメントを取得する

2024/12/05に公開

clusterでイベントのコメントを取得する

この記事は
Cluster #2 Advent Calendar 2024 の5日目の記事です

clusterのイベントで、コメントの中身を取得する方法を記載してみようと思います。

例えば何が出来るようになる

・コメントを識別してワールドのギミックを発火させられる
・「たらい」と打ったら出演者の上にたらいが落ちるような演出
・clusterや、イベントページ外からコメントを見ることが出来るようになる
https://x.com/sirojake/status/1857063147795787959

前提

・ある程度プログラミングが分かる人前提です
・闇魔術です、自己責任でお願いします
・ドキュメントとして公開されていないAPIを叩きます
・イベント限定です、通常スペースでは使えません

結論

curl -i -X GET \
   -H "x-cluster-device:Web" 
   -H "x-cluster-platform:Web" 
   -H "x-cluster-app-version:1" 
   -H "x-cluster-build-version:1" 
 'https://api.cluster.mu/v1/events/d68fc680-e92c-4a8d-b5a7-3372a9a4fb92/comments'

解説

clusterのCCKには現在、コメントを取得する機能はない。
そのためコメントを取得して、内容によって特定のギミックを発火させる事が出来なかった
(少なくとも自分の認識では。)

しかし、実は裏技がある。
最近のアップデートで、Web上からイベントのコメントを見れるようになった。

こんな感じに。
https://cluster.mu/e/d68fc680-e92c-4a8d-b5a7-3372a9a4fb92

限定公開であっても、URLさえ知っていればログインしなくともコメントを見る事が出来る
だったらそれを取得しちゃえばいいじゃん、というのが本記事の概要である。

具体的には?

Webに公開されている情報を取得するにはスクレイピングを使う方法もあるが、
今回はコメント取得用のAPIを直接叩く。

clusterのページは基本的にAPIでデータを引っ張ってきている。
というわけでcURLで直接APIを叩いてあげればよい。

叩く先は下記になる。
https://api.cluster.mu/v1/events/[イベントページのid]/comments

https://cluster.mu/e/d68fc680-e92c-4a8d-b5a7-3372a9a4fb92
なら
https://api.cluster.mu/v1/events/d68fc680-e92c-4a8d-b5a7-3372a9a4fb92/comments
となる。

ただし、これを直接ブラウザに打ち込んでも400エラーが返ってきてしまう。
headerを付けてあげないといけない。

具体的には下記の4つ

"x-cluster-device:Web" 
"x-cluster-platform:Web" 
"x-cluster-app-version:1" 
"x-cluster-build-version:1" 

app-versionとbuild-versionの現在の値は下記のようになるが、何故か1でも動く

x-cluster-app-version:3.12.2411251231
x-cluster-build-version:44

下記を叩くと、json形式でコメントの中身とユーザー情報が返ってくる

curl -i -X GET \
   -H "x-cluster-device:Web" 
   -H "x-cluster-platform:Web" 
   -H "x-cluster-app-version:1" 
   -H "x-cluster-build-version:1" 
 'https://api.cluster.mu/v1/events/d68fc680-e92c-4a8d-b5a7-3372a9a4fb92/comments'

調べた範囲ではラグもなく、即時取得されるようだ。

PHPで書く

試しに、PHPを使ってブラウザからコメントを見れるようにする。
コメントの最大表示件数やページングなどは行っていないので、
あくまで簡易的なものである。

https://ginjake.net/hp/clusterGetComment.php?url=d68fc680-e92c-4a8d-b5a7-3372a9a4fb92

<?php

$url = $_GET["url"];

$headers = array(
	"HTTP/1.0",
    "x-cluster-device: Web",
    "x-cluster-platform: Web",
    "x-cluster-app-version: 1",
    "x-cluster-build-version: 1"
	);


$url = "https://api.cluster.mu/v1/events/".$_GET["url"]."/comments";
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$html =  curl_exec($ch);
$returnParams = json_decode($html);

foreach($returnParams->comments as $comment) {
    echo($comment->user->displayName);
    echo(": ");
    echo($comment->comment->body);

    echo("<br>");
}
curl_close($ch); 

?>

注意

DeveloperToolでブラウザの通信内容見るのはエンジニアなら基本やるだろうし、
逆コンパイルなどもしていないので解析には当たらないという認識だが、
個人の解釈なので利用は自己責任で。
スタッフさんへ、もし問題あるようなら連絡いただければ本記事は削除します。

あと、叩くときはちゃんと負荷を考えよう。
毎フレーム叩くような事は絶対にしてはいけない。

Discussion