「ここたまアンテナ」、自動化しないと有効に機能しないよなあ。(手動だから私としても自信を持って勧められない。)必要な機能は…

(1) 被フォローに対して自動的にフォローを返す。

(2) 定期的にフォロワー一覧を確認して、フォロー外しに追従する。

(3) フォロワーの投稿のうち特定のハッシュタグを含む物を抽出する。

(4) それをブーストする。

多分、うまく作れば難しい事ではないんだろう。機能 (3) は二つ実現方法が考えられる。

(3a) ハッシュタグタイムラインを見て、投稿者がアンテナのフォロワーである事を確認する。

(3b) ホームタイムラインを見て、ハッシュタグが含まれるのを検出する。

今のところ絶えず監視させるつもりはないので、私が Mac を稼働させている時だけ動くとすると、「見てなかった間」を遡ってブーストする必要がある。Mastodon のホームタイムラインは直近の四百件しか遡れないので、もしアンテナ利用者が大勢になると見切れない可能性がある。…けどホームを見るのが作りとしては楽そう。

ハッシュタグタイムラインを見る方法だと非収載が抜ける事になるほか、複数のタグを監視するので、厳密に時系列順にしたい場合の処理がちょっと面倒という問題がある。

フォロワー各人の投稿一覧を見に行って集めるのが一番確実ではある。

いづれにしても、今の流速ならホーム見とけばいいとは思う。

文脈の続き方が三種類ある。

(1) スクリプト実行環境が継続的に動いてる間

(2) 実行環境を止めてはいないが、計算機本体のスリープなどで処理がお預けになった時

(3) 実行環境を止めてから再び起動するまで

項目 (3) における状態の引き継ぎは、サーバーに情報を保存するようにしたい。「ここまで読んだ」という情報は、非公開投稿にメモするのがいいかも。ブックマークで表そうかとも思ったけど、対象が削除された場合などを考えると複雑だし。

稼働している間、つまり (1) は、例えば五分などの間隔で情報を取得して、次の処理を行う。

・ フォロー一覧をフォロワー一覧に一致させる

・ ホームタイムラインなどを読んでブーストすべき投稿を抽出し、ブーストする

・ どこまで済んだか記録する

これを一度に一斉に行いたくないので、実行環境において「このあと送信する要求のリスト」に積み上げる。順に完了を確認しながら五秒間隔とかで送信する。仮に (2) の中断があった場合は再開後に続きが送信される。

リスト上の要求が片付いてから、状態のメモを更新する。リストの途中で項目 (3) の中断があった場合に巻き戻るけど、再開後に同じ処理をしようとして、ブースト済みならスキップする事にすればいいだろう。多分。

必要な要求は…この辺りか。

フォロワー一覧を見る
GET /api/v1/accounts/[ID]/followers

フォロー一覧を見る
GET /api/v1/accounts/[ID]/following

フォローを解除する
POST /api/v1/accounts/[ID]/unfollow

フォローする
POST /api/v1/accounts/[ID]/follow

タイムラインを見る
GET /api/v1/timelines/home
GET /api/v1/timelines/tag/[タグ]

ブーストする
POST /api/v1/statuses/[ID]/reblog

投稿する
POST /api/v1/statuses

投稿を削除する
DELETE /api/v1/statuses/[ID]

加筆編集の方がいいかしら
PUT /api/v1/statuses/[ID]

昨夜は JavaScript の Promise と async・await について大体学びました。

フォロー一覧とフォロワー一覧を並列に要求する事もできるだろうけど、どうせ同じサーバーに問い合わせるんだし、直列的な書き方でいいやと思った。

#JavaScript

非公開投稿に状態のメモを書く件は、加筆編集を使えば参照が楽そうだけど、無駄に編集履歴が残ってしまうのが気になる。仮に五分間隔で書き替えたら、24 時間で 288 件の履歴になる。それに対して毎回消す方法ならデータベースの中身は定期的に掃除されるだろう。まあ大したデータ量ではないし、動くだろうけど…。

自己紹介の領域を使おうかしら。自己紹介の本文に書き込むのはあまり美しくない。補足情報欄を使うのはマシ。ウエブ画面だと他人に対しては非公開のメモ欄があるけど、あれって自分自身にも使えるのかしら。後で試そうか。

フォロー

@sayunu POST /api/v1/accounts/[ID]/note がいいと思うよ。WebUIからはできないようにみえるけど、自分のアカウントでもノート保存できる。

内部的にaccount_notesテーブルにだけデータを更新するので、データベースに対してもクリーンじゃないかな。

できるっぽいですね ! 読み取りがどうなるかと思ったけど、「自分自身への relationship」が問題なく取れました。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。