はじめに
たまに、無性に坊主にしたくなる。そんな気持ちで自分のツイートを全部消したくなりました。
ツイート削除ツールは色々あります。しかし、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認証行えばうまいことできるのかもしれないですね。ともかく目的は達成されました。