pixivFANBOXをマークダウン記法で書きたい
はてなブログのサードパーティーツールみたいに、マークダウンで書いて CLI からリポジトリと同期みたいなことがしたい!
ただ自分はマークダウンで書きたい!
リポジトリの状態を FANBOX に反映する形にしたい
textlint などでチェック
main にマージしたら FANBOX にデプロイ
特にツールとか作ってる人いないし、リハビリがてらツールを作ってみるか
怒られたらやめる
既存の実装
FANBOX 用のツールでそれらしいのは公式でもサードパーティーでもまだ無さそう
blogsync が理想形
はてなブログ用のツール
はてなブログには AtomPub 実装があり、これを使っている
どう sync しているのか
blogsync pull で記事を手元に持ってくる
以降 pull すると新しいエントリのみがダウンロードされるらしい
例えばウェブブラウザで何か記事を編集しても、その変更は手元には pull できないってこと?
blogsync push <path> で記事を更新する
blogsync post <blog> < <body> で記事を投稿する
sync コマンドを叩いたら、ローカルのファイルをもとにすべて記事を投稿・更新・削除とかしたら楽かなと思ったけど、実装大変そうだし...通信も無駄に多そう
blogsync の形式でいこう
書き始めた。
通信を眺める
一覧取得
投稿取得
投稿・更新
リクエスト { "type": "article" }
レスポンス { "postId": "\d+ で構成される string" }
タイトルや本文が空の記事が作成される
リクエストは JSON でも application/x-www-form-urlencoded でもなく、multipart/form-data
書式設定
type: bold
offset: 何文字以降から適用されるか
length: そこから何文字適用されるか
思ったより結構シンプルだし、実装できそうな気がする
認証
cookie
FANBOXSESSID のキーの中にセッション ID が入っている
X-CSRF-Token
ウェブブラウザでログインした後、JSON.parse(document.querySelector("#metadata").content).csrfToken で得られる値をセットする必要がありそう
しばらくこの値は使いまわせそうな感じがする
というわけで、FANBOX の API を眺めて、OpenAPI に書き起こしてみた
そこから golang のクライアントを自動生成してみた
それを fanboxsync で使うようにする
だいたい書いて、投稿の作成、取得、更新ができるようになった
code:2024-07-28-8月号.md
---
id: 1234567
title: 8月号だよ
status: draft
---
こんにちは。これはテスト投稿です。
ファイル名には ID は載せず、あくまで一覧性のための命名にしたい...
けど fanbox 独自の画像やリンクは(今のところ)FANBOX のエディタ上じゃないと作れないし、ファイル取得時の上書きが難しくなりそう...
一度全てのファイルを舐めて、ファイルのポインタと id のリストを作れば解決するかも
そろそろユーザー側のワークフローを考える
GitHub のプライベートリポジトリに投稿を管理するリポジトリを作る
既に FANBOX に投稿がある場合、それを手元で markdown 化して push する
fanboxsync pull
GitHub Actions を使って、投稿に変更があればその変更を FANBOX に適用する
session id や csrf token は Secrets でやり取り
session id と csrf token の寿命は一緒なんだろうか...
もし csrf token の方が短命なら、session id から csrf token を生成するのを自動化したいかも