Pythonでツイートを一気に消そう

ツイートを一気に消そうと思って黒歴史クリーナーを使ってみたら、API制限のせいかあまり消せなかった。
仕方ないので、APIを叩いて自分で消すことにした。

用意するものは3つ。

  • Pythontwitterライブラリ
  • TwitterAPIキー

    • 自分はbotを開発するために事前に入手していたけど、1から申請するのはちょっとめんどい
    • こちらのサイトが参考になる zenn.dev
  • Twitterアーカイブデータ

    • 設定画面から申請できる
    • ダウンロードしたデータの中にtweet.jsがあるので、これを使う help.twitter.com

こちらのサイトをベースにさせていただき、日付を指定する機能だけ追加した。
qiita.com
以下のコードでは、2022年8月1日まで投稿されたツイートを削除する。
時間をUNIX形式に変換して比較している。

import datetime
import json

import twitter

end_time = "2022/08/01"  # この日までに投稿されたツイートを削除する
unix_end_time = datetime.datetime.strptime(end_time, "%Y/%m/%d").timestamp()

CK = ****
CS = ****
AT = ****
ATS = ****

api = twitter.Api(
    consumer_key=CK,
    consumer_secret=CS,
    access_token_key=AT,
    access_token_secret=ATS,
    sleep_on_rate_limit=False,
)

with open("tweet.js", encoding="utf-8", mode="r") as f:
    tweet_json = json.load(f)

    for tweet in tweet_json:

        tweet_time = tweet["tweet"]["created_at"]

        unix_tweet_time = datetime.datetime.strptime(
            tweet_time, "%a %b %d %H:%M:%S %z %Y"
        ).timestamp()

        if unix_tweet_time < unix_end_time:
            try:
                api.DestroyStatus(tweet["tweet"]["id"])
            except Exception:
                pass

teet.jsにはふぁぼ数やリプライの有無の情報もあるので、Lambdaにデプロイして定期実行すれば「誰からもふぁぼられずリプライもされなかったツイートを3日後に削除する」というような運用もできる。
Lambdaで実行するときはAPIキーはベタ打ちせず環境変数等を使うのが望ましく、またタイムゾーンが日本と違うことに留意する必要がある。