
CardputerからBlueSkyに投稿する
色々遊んでいたM5Stackシリーズですが、2023年にCardputerというキーボードつきのかわいいやつが出ました。
小さな液晶とキーボードを搭載しており、指先でポチポチ文字を入力することができます。小さいもののスピーカー、マイク、赤外線出力、micro SDスロットなどを搭載しており、いろいろ出来そうです。今回はこれを使って最近流行りのSNS、BlueSkyに投稿だけ出来るマシンを作っていきましょう。
日本語入力を作る
これは以前M5Stack + CardKB用に作ったものを移植しました。
ほぼ完全に同じ動作をします。つまり、SKK辞書をUTF-8に変換したものは別途用意してSDカードに入れる必要があります。
BlueSkyに投稿する
BlueSkyのAPIドキュメントは割とまとまったものが公式にあります。
ただしネット上のサンプルは各言語用のSDKを使用したものがほとんどで、ArduinoからHTTPを叩いてAPIを使用するにはちょっと分け入って探す必要がありました。
アプリパスワード
BlueSkyで外部アプリケーションに権限を与える方法には、アプリパスワードというものがあります。自分のアカウントの「設定」を見てみてください。

「アプリパスワード」から個々の外部アプリケーションごとに個別のパスワードを発行して、外部アプリケーションにはそのアプリパスワードを使用することで後から権限を無効にしたりできます。Cardputerのようにブラウザを使用できない機械には都合がよい機能です。Cardputer用に一つ発行して、控えておきましょう。
認証
投稿する前に、上記のアプリパスワードを使って認証する必要があります。Create sessionの項を参照してください。
すごく分かりやすく書かれていると思うんですが、要は「bsky.social/xrpc/com.atproto.server.createSession」に対して下記のようなJSONをPOSTします。
{
"identifier": "XXXX.bsky.social",
"password": "App Password"
}
identifierにはBlueSkyのアカウント名を「アカウント名.bsky.social」のようにサーバー名込みで指定するようです。App Passwordは先ほど発行したパスワードです。
このPOSTに対してJSONで応答が返ってきます。直後に投稿するのであれば、「accessJwt」と「did」が必要です。accessJwtは時間で失効するので「refreshJwt」を使用して更新するようですが、今回は使いません。
投稿
BlueSkyに投稿する方法はCreate recordの項を参照します。
今度は「bsky.social/xrpc/com.atproto.repo.createRecord」に対して下記のようなJSONをPOSTします。
{
"repo": "XXXXXXXX",
"collection": "app.bsky.feed.post",
"record": {
"$type": "app.bsky.feed.post",
"text": "改行を\n入れた\n投稿\nテスト",
"createdAt": "2024-03-08T14:40:40Z"
}
}
「repo」には先ほどのレスポンスから「did」の値を渡します。
「collection」「$type」には"app.bsky.feed.post"を指定します。今回特に添付画像等はない文字列だけなので、「text」にJSON用にエスケープした文字列を入れます。
「createdAt」にはISO 8601の日付時刻を指定するようです。RTCから時刻を取得してもいいと思いますが、今回認証の直後に投稿するので単純に認証のHTTPレスポンスのDateを持ってきて指定しています。
「accessJwt」はJSONではなく、HTTPヘッダーの「Authorization」で渡します。
Authorization: Bearer XXXXXXXX
できたもの
できたものをGitHubに置いときました。Fn + Spaceで日本語入力とアルファベットを切り替え、Spaceで漢字変換、Enterで確定します。
Fn + Enterを押すと画面に入力されたテキストに対してアクションを表示します。現在はSDカードに保存する、QRコードとして表示する、BlueSkyに投稿するという3つの機能があります。矢印キーでアクションを選択してEnterで実行します。


下記は実際に投稿されたポストです。
未来へ…
こうしてBlueSkyに投稿するだけの専用マシンができました。今やスマッホンでなんでもできてしまう時代ですが、それはつまりスマッホンを手に取ったらまず山ほどあるアプリから一つをタップし、投稿ボタンを押し、タプタプして投稿するわけです。この専用マシンであればアプリなどありません。単機能です。
そういうのもレトロでかわいいんじゃないでしょうか。
そんなことを考えていたらTwitter(頑なにTwitterと呼び続ける)で「ポケットボード」という機械の写真が流れていました。1999年頃に存在した、Eメール専用端末です。今回作ったBlueSky投稿専用端末の先祖と言えましょう。
Eメール送信機能やRemember the Milkタスク作成機能もつけたい。