generated at
server-sideからwebsocketを通じてscrapboxへ書き込む
もしかしたらいけるかも
この文が書き込めているとしたら、server-sideからwebsocketを通じてscrapboxへ書き込むことに成功したことになる。
もしこの文が書き込めてるとしたら、私はもうこの世にいないでしょうMijinko_SD
おおおーnishio
もちろん、serverからの書き込みはpuppeteerを使って行うこともできるので、仮にこれが成功したとしても、それがどれだけ価値のあることなのかはわからない。
リソース消費が抑えられるbsahd
あとdropped malformed message waiting for idというDNSまわりの警告が出ているのも気になる。あんまり安定した方法ではなさそう。

成功した。まじか

手法
client側のWebSocketをnode.jsで動かす実装であるnpm:wsがある
このpackageが提供する WebSocket は、Web APIのものとは違ってCookieやRefererを渡せる
これを使ってconnect.sidをなどを渡せば、理論上はserver sideからScrapboxのWebSocketに接続できる

実装
実はsocket.io-clientにこの機能が組み込まれていたようだ
この記事が書かれた当時はまだなかったが、今はextraHeadersからsocket.ioにcookieなどを渡せるようになった
scrapbox-userscript-std/browser/websocketには外部からsocket.ioのinstanceを注入できる機能があるので、それを使ってheaderを指定したinstanceを注入すればいい
ただ、書き込み処理に必要なREST APIの実行処理にconnect.sidを渡すコードを書いていなかったので、そこだけ修正が必要
よかったら公開してほしいyosider
0.29.5から実装しましたtakker
yosider

できるようになったこと
headless chromeを使わずに、terminalやserverからscrapboxに書き込める様になった
LLMとの協調に使えそう
寝てる間にLLMにscrapboxを読ませてコメントさせるとか
AIエージェントと一緒に議論したりしたいmtane0412yosiderbsahd
いいですね〜はるひ
Scrapboxの書き込みAPIがほしいという話はたびたび上がっていたし、そういう需要に応えられるかもしれない
Scrapbox書き込み用ライブラリ作れば誰か使いそうMijinko_SD
Cosense耐久試験部が立ち上がるかもしれないけど
軽量化したサードパーティクライアント作るとかはできるかも
クライアントだけ任意のものにして、バックエンドをscrapbox.ioにする
あんまりやり過ぎると利用規約改訂されて締め出されるので、ほどほどに
モラルは意外と大事
サーバー負荷かけないとかサポートに負担かけないとかは必須なので、そういうのを作るのであれば早い話が身内向けにした方が良い
scrapbox-external-backupとかあるけど並列受信じゃなかったはずbsahd
UserScript Page Edit APIでできるようになったと勘違いしていたけど、あれはブラウザでCosenseのページにいないとアクセスできないのかyosider
だからUserScriptとついている
なるほどはるひ
とはいえ違う、そうじゃないと言われそうな気もする
かなりhackyだしなあ

課題
DNSまわりでエラーがでてるのが気持ち悪い
毎回出るわけでもなさそう
DNSとかSSL/TLSは未学習でなんもわからん
meganiiが詳しそう基素
Denoのinstanceが終了しないのも気になる
なんらかの終了処理がうまくいっていない
こっちで再現しないので環境依存っぽいnishio