ScrapboxのWebSocketの仕様を調べる
https://gyazo.com/bf2eace33e9708c21b2d12d7b9638cbf
多分takker.iconさんが色々やっているはずなので、そこから情報を盗む拝借する
それっぽい情報が見つからなかったので結局ほぼ自分で調べた…
そしたら/villagepump/takker.iconさんに助言してもらえた
繋がりがあるっていいね、ほんと
調べたものは以下のページに反映する
雑多な情報
wss://scrapbox.io/socket.io/?EIO=4&transport=websocket
EIOの意味は不明だが、今のところ4以外出現していないので無視しても良さそう Engine.IOのプロトコルバージョン4を使用しているので、EIO=4
ヘッダーの値(Socket.IOが自動生成してくれないやつ)
code:header
Accept-Encoding: gzip, deflate, br
Accept-Language: ja,en-US;q=0.9,en;q=0.8
Cache-Control: no-cache
Host: scrapbox.io
Pragma: no-cache
Cookie: (通常の通信と同じなので省略)
User-Agent: (ブラウザによって違う)
気が向いたら試してみよう
多分必要
接続が確立した段階でサーバー側からsidなどの情報が送られてくる これはおそらくWS専用のもの
code:wss_init
0{"sid":"(ソケットID)","upgrades":[],"pingInterval":25000,"pingTimeout":20000}
その直後に、クライアント側から40を送信する
頭の数字はメソッドの番号?
で、リンク先の続きの調査で、冒頭の数字がScrapboxではなくsocket.ioのパラメタであるということまで把握しました/villagepump/takker.icon 推測も混じるが、おそらく頭の数字は<Engine.ioプロトコル番号><Socket.IOプロトコル番号><パケットの通し番号>の順で書かれている
4311の場合は
11: 43番の通信の11回目
参考
よくわかっていないやつをどうにかする
検索機能と開発者ツールのコールスタック欄をフル活用すればどうにかなるかな _insertの値
var m = t < this.lines.length ? this.lines[t].id : "_end";
tは挿入する行の位置
一番下に行を挿入しようとした場合はmが_endになる
つまり_insertは挿入しようと思った位置に元々あった行のID
言い換えると、挿入した行の真下に来る行のID
pinの値の意味
ピン留めした時は16桁の数値
var t = Number.MAX_SAFE_INTEGER - Math.floor(Date.now() / 1e3)
Number.MAX_SAFE_INTEGER
2^53 - 1
つまり9007199254740991
Date.now()
つまり、1662325465087という数値があったとして、これを秒単位に直すと1662325465.087になる
1e3は1 * 10^3
つまり1000
MDNをざっと見た感じ、ここでさらっと例にあるのみ
(ちゃんと探したわけではない)
コンソールに入力すると勝手に計算してくれるのでわかりやすい
もしpinの値からUNIX時間を逆算したいなら、(Number.MAX_SAFE_INTEGER - pin値) * -1をすればいい
外した時は0(固定)