SNSをリレーする
- SNSが多すぎるのでリレーするものを作る
やること
- {x} Mastodonをソースにする
- jsonで発言を取り出す
- jsonを加工してリレー用のデータを作る
- {x} Twitterにリレーする
- in_reply_toもなるべく再現する
- 過去にリレーしたTweetのIDをMastodon側の発言のIDとの組で控えておく
- 発言時にMastodon側で返信になっているものはTwitter側でもなるべく返信にする
- できた
- {x} Blueskyにリレーする
- APIがあるのでできそう
- これもやりたいな
- { } Threadsにリレーする
- まだAPIが公開されていない
- {やらない} mastodonの変更をポーリングではなくストリーミングにしたい
- ストリーミングで変更を検知してdumpする?
- そこまでリアルタイムに反映する必要はなさそうだし、あまりやる必要性はなさそう
- {x} MastodonでのRePostをリレーしてしまう問題がありそう
- empty contentとなり無視される
- {関係なかった} bskyで複数行のテキストを送る方法
- { } blueskyに大きなpngが送れない問題
- png, 1152x1536, 2.5M
- PWAを使った時とで画像のクオリティが違うっぽい
- とりあえずはPWAを使っておけばOK
- pngがだめなのか容量がダメなのか不明
- { } bskyで文字列長が長すぎるときにURLを削る
- これが切実
- TwitterのRetweetはAPIが使えないと思う
名前
- リポジトリ名
- relay-from-mastodon
- リポジトリ構成
- post-proxy (Tweet, Blueskyへの投稿プロキシ)
- relay
- pkg
- cmd
- bsky_from_json
- twitter_from_json
- convert
- work
動作テスト
- 3分のポーリング
- テキストのリレー
- ok Tweet
- ok Bluesky
- 画像1枚のリレー
- ok Tweet (downloadを無効にしていた)
- ok Bluesky (image-altを指定しないとだめ?)
- 画像2枚のリレー
- NG 1枚しかリレーされない
- 多分直した
- 返信
- ok Twitter
- ok Bluesky
- 画像1枚の返信
- ok Twitter
- ok Bluesky
Raspbrry Piで動かす
- nodejsはそのまま動いた(無意味に最新版にしてしまったが)
- goはコンテナで動かそうとしている
- convert.goは動いた
- sqliteのドライバは動くか?
- go runでやっているが、コンテナを動かしなおすたびにgoのパッケージを作るところから始まるのでバイナリを作りたい
- 全体の流れとして動いた
- {x} bskyをバイナリで動かす
- コンテナの中でビルドしてバイナリを取り出せばよい?
- だめだな GLIBCのバージョン違いで動かない
- CGOを無効化できる?
- 結局最新版のGoをRaspberry Piにインストールした
- build-essentialsは必要か?
- { } Makefileを作りconvert, tweet_from_jsonをバイナリにする
- {x} gitで管理できるように整理
- {x} リポジトリをgitで管理する
- { } 環境変数で渡している変数を.envファイルに逃がす
- { } GitHubに上げる
どうやって動かす?
- 定期実行
- mastodon-dump
- convertでjsonをきれいにする
- tweet_from_jsonを実行する
- どこで動かす?
- Raspberry Pi
- goのプログラムを動かす必要がある
何でプログラムを書こうか?
- Go?
- 練習がてらGoで書きたい
- Python?
コンポーネント
- MastodonのJSONを読んで、リレー用のデータを作る
- HTMLタグの除去もする
- 大体できた
- Twitterにリレーする
- API部分はnodejsの実装があるのでこれを使う
- IDを控えたりする必要がある
- 高々1000とかだろうしプレーンテキストで良いのでは?
- 次点でsqlite
- sqliteの方が良さげ
- Goで書くなら何にIDを保存しよう?
- Blueskyにリレーする
- Twitterと同じ仕組みでできるか?
Tweetする部分
- 複数の画像を指定したい
- in_reply_toを指定したい
- nodejsをgoからexecしたい
- その際環境変数なども指定が必要
- Webサーバにした方が応用が利くか?
- 画像データはフルパスを渡すという雑な設計でもよかろう
GoでSQLite
- CGOなのだよな・・gccは今のままで行けるか?
- go getはできた
cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
あーだめだ・・
cygwinの64bit版を入れる
- よくわからんけどgccとかを入れていく
- もともと32bit版が入っているようだが、ディレクトリが違うのでうまくいくはず・・
- このあとESP32のnativeがうまく動かなくなるとかありそう
- pathを通すと動くかと思ったけど、ほかのコマンドが動かなくなった
- cygwinのターミナルからgo runを実行してみる
- だめだー
- GoはCygwinでは動かない・・
- cygwinのアンインストールがわからん・・
TDM-gccを入れる
- ディレクトリはcygwinとは別なので入れられる
- ダウンロードが途中で失敗したりするが、再試行で何とかなっている?
- だめだな
- webインストールはNGだったが別の手段があった
- うごいたか?
結局WindowsでGoを動かすときは・・