自分のツイート全部消す


はじめに

たまに、無性に坊主にしたくなる。そんな気持ちで自分のツイートを全部消したくなりました。

ツイート削除ツールは色々あります。しかし、APIの都合で一定件数以上消せなかったり、有料会員になる必要があったり、自分の環境で上手く動かなかったりして、自分で用意することにしました。

なお、Twitter APIもPythonも初めて触ったため、定石から外れた使い方があるかもしれません。参考にする場合は自己責任ということでひとつ、お願いします。

やること

自分のTwitterアカウントのツイートを全部消す。

環境

OS:Windows 10
言語:Python3.8.3

手順

1. Twitter APIの利用申請

こちらのサイトを参考に、利用申請を行いました。
https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/
https://qiita.com/kngsym2018/items/2524d21455aac111cdee

ツイートを削除したいアカウントで申請します。申請を行うと、すぐメールが届きました。メール内のアドレス確認をクリックするとダッシュボードを使えるようになり、アプリ情報を作成できます。参照した記事では、使用内容確認のやりとりをされたみたいですが、僕はそういったものはなかったです。アプリの使用意図が「学習と自分のツイート消す」というだけだったからかもしれません。拙い英語でも問題なく申請が通りました。

2. Pythonのインストール

自分の環境に合うものをDLしてインストールしました。
https://www.python.org/downloads/windows/

3. ライブラリのインストール

コマンドプロンプトを開き、ライブラリをインストールします。

py -m pip install python-twitter

環境変数Pathに以下の2つを追加しました。順序が逆ですね。

[インストール先]\Python38
[インストール先]\Python38\Scripts

4. ツイートデータの取得

Twitterのアカウントから、ツイートデータのアーカイブを取得します。
手順はこちらのサイトにわかりやすく書いてありました。
https://passion-blue.com/twitter-account-backup

取得したアーカイブを解凍すると、dataディレクトリの中にtweet.jsがあります。json形式とするため、開いて、1行目「window.YTD.tweet.part0 = 」を削除して、tweet.jsonとして別名保存しました。(単なる個人ツールですし、滅多に使う機会もないでしょうし、このへんは人力でサクッとやっちゃいます。)

5. スクリプトの作成

# -*- coding: utf-8 -*-

import twitter
import json
import signal

# 途中でCtrl + Cで止められるようにするための記述
signal.signal(signal.SIGINT, signal.SIG_DFL)

# Twitter APIを利用するための情報
api = twitter.Api(
    consumer_key='YOUR_CONSUMER_KEY',
    consumer_secret='YOUR_CONSUMER_SECRET',
    access_token_key='YOUR_ACCESS_TOKEN_KEY',
    access_token_secret='YOUR_ACCESS_TOKEN_SECRET'
)
screen_name = 'YOUR_TWITTER_ID'

# jsonファイル読み込み
json_open = open('tweet.json', 'r', encoding="utf-8_sig")
json_load = json.load(json_open)

for v in json_load:
    try:
        # IDを指定して削除する
        api.DestroyStatus(v['tweet']['id'])
        print("delete:" + v['tweet']['id'])
    except:
        # すでに削除済みであるなどして削除に失敗した場合
        print("error :" + v['tweet']['id'])

こちらの記事を参考にさせていただきました。
https://qiita.com/aeas44/items/a5b82da69b64b32aada4
https://qiita.com/junkoda/items/50ca8604ecbb04e9f772

トークン類は、Twitter Developersのアプリ -> Details -> Keys and tokens で参照できます。

6. スクリプトの実行

4.で作成したtweet.jsonを、スクリプト(app.py)と同じディレクトリに配置して実行します。

python app.py

削除したIDと失敗したIDが順々にコンソールに吐き出されます。ちゃんと時間を計測していなかったので感覚値ですが、秒間数ツイートペースで、約1万ツイート削除に1時間前後かかったと思います。

余談

最初、消したいTwitterアカウントとは別のアカウントでトークンを取得したため、実行時に"You may not delete another user's status."となってしまいました。なので、ツイートを削除したいアカウントで再取得しました。そりゃそうか…という感じですが、有料の削除ツールなどはどうやって申込者のツイート削除を実現しているんだろう…? Twitter認証行えばうまいことできるのかもしれないですね。ともかく目的は達成されました。