💡
Mastodonの過去トゥートを全て削除する
昔作った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