💡

Mastodonの過去トゥートを全て削除する

2023/02/10に公開

昔作ったMastodonアカウントを再始動したくて過去トゥートを全て削除することにした。その方法をメモしておく。

まずはAPIを叩くのでアクセストークンが必要。と言ってもMastodonの開発から適当にアプリを作成するだけで簡単に取得できる。権限もデフォルトのread/write/followで良い。

Rubyで簡単なスクリプトを書いて実行する。下記の3つのファイルをとりあえずローカルに配置。

Gemfile
 # frozen_string_literal: true
 
 source "https://rubygems.org"
 
 # NOTE: mastodon-apiの公式gemには自分のトゥートを取得するエンドポイントが実装されてないので自前で追加した
 gem 'mastodon-api', require: 'mastodon', git: "https://github.com/YuheiNakasaka/mastodon-api", branch: "feature/get-accounts-statues"
 gem 'dotenv', require: false
.env
 MASTODON_BASE_URL=https://mstdn.jp
 MASTODON_BEARER_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 MASTODON_MY_ID=123456
 TOTAL_STATUS_COUNT=1000
delete_all_statuses.rb
 require "mastodon"
 require "dotenv"
 
 Dotenv.load
 
 client = Mastodon::REST::Client.new(base_url: ENV["MASTODON_BASE_URL"], bearer_token: ENV["MASTODON_BEARER_TOKEN"])
 
 i = 0
 total = ENV["TOTAL_STATUS_COUNT"].to_i / 40
 while i <= total
   statuses = client.get_account_statuses(ENV["MASTODON_MY_ID"], {limit: 40})
   statuses.each do |status|
     begin
       id = status.attributes["id"]
       created_at = status.attributes["created_at"]
       puts("Deleting status #{id} created at #{created_at}.")
       client.destroy_status(id)
       sleep(61)
     rescue => e
       puts(e)
     end
   end
 
   if statuses.size == 0
     break
   end
 
   i += 1
 end

まずはgemをインストールするためにbundle installを行う。

そして必要なクレデンシャルを.envファイルに設定する。MASTODON_BASE_URLには自分のアカウントのベースURLを。MASTODON_BEARER_TOKENには先ほど取得したアクセストークンを。MASTODON_MY_IDには自分のアカウントIDを。TOTAL_STATUS_COUNTには自分の投稿数を設定する。

ちなみに自分のアカウントIDがわからない場合はverify_credentialsのAPIを叩くと良い。下記のような感じで叩くとすぐわかる。

 client = Mastodon::REST::Client.new(base_url: ENV["MASTODON_BASE_URL"], bearer_token: ENV["MASTODON_BEARER_TOKEN"])
 p client.verify_credentials

あとはスクリプトを実行すれば削除が走り始める。

 $ bundle exec ruby delete_all_statuses.rb

APIのレートリミットにより1分で1削除しかできないからTOTAL_STATUS_COUNTで設定した数値の分数だけ時間がかかる。例えば1440個の投稿を消したいなら1440分(≒1日)かかる。気長にやっていくしかない...

自分は過去Twitterからの自動連携をやってしまっていたのですでに8000トゥートくらいあって、大体5~6日かけて削除した...。

アカウントは下記になるので適当にフォローしてください。

リソース

Discussion