[ X / Twitter ] 自分の全ツイートを一括で削除手順
前提
- 一括削除したいツイートは自分のツイートであること
- アカウントのアーカイブを取得してしておくこと(データバックアップの意味も)
- pythonを動かせる環境であること
twitter apiの仕様変更で、いままでの一括削除ルーツは基本使えなくなった。
でも自分のツイッターアカウントの全投稿を一括で削除したい。
公式ヘルプには「ツイートを一括削除することはできません。複数のツイートを削除する場合は、1つずつ手動で削除してください」とあるが、手動で全ツイート削除する作業は不毛で楽しくない
というわけでAPIで一括削除する方法を模索してできたのでメモっておきます。
流れは、自分の全ツイートのIDを取得し、1件ずつループしてAPIで削除。
step 1: アーカイブ取得
ツイッターの設定画面からアーカイブを申請する
設定とプライバシー → アカウント → データのアーカイブをダウンロード
1日ぐらいしたらアーカイブデータの準備ができる
ダウンロードしたアーカイブは/Your archive.html
をブラウザで開いて閲覧できる。一括削除で使うファイルは/data/tweets.js
のみです。
(ツイッターアーカイブは静的なコンテンツだけどなかなかのクォーリティで感動した。なによりも広告が挟まらないのでいかにもピュアなインターネット黎明期を想起させて懐かしくなっちゃう)
step 2: developerアカウント取得
次にtwitter APIを叩けるようにdeveloperアカウント作る
有料プランを選択するようなUIだが、下にある「Sign up for Free Account」から無料アカウントも作れる。
無料アカウントの用途(APIを使って何をするか)をフォームに入力して、チェックボックス全部チェックしておく。
- 無料アカウントのAPIを使って収益化するようなことはしてはいけない
- 上記またはそのた規約違反の場合はツイッターアカウント停止されてしまう
(そのせいでいままでの一括削除ツールが使えなくなったのかな。。。basic planでも月100ドルとなかなか高額)
フォームに入力するテキストは250文字以上の縛りがあったので、雑にchatGPTに書いてもらって貼り付けた
ダッシュボードに遷移されて、無料アカウントできた(審査などない、フォーム入力すればその場で無料アカウントが発行される)
step 3: 認証設定
作成したばかりの無料アカウントでAPI KEY発行しても、閲覧権限のみ。
今回は一括削除したいので、権限のあるAPI KEY発行できるようにユーザー認証セットアップを行う
User authentication settings => set up
App permissions -> Read and write and Direct message
これがないと削除する権限のないアプリケーションとなります
Type of AppはローカルだけなのでどちらでもOKだけどとりあえずautomateのほうを選択
App Infoも今回あまり関係ないけど(required)のフィールドはとりあえず適当に埋める
-
Callback URI / Redirect URL(required)
http://localhost:3000/
-
Website URL (required)
あればよいので、ツイッターのリンクとはgithubのリンクとか
https://twitter.com/shomtsm
save押して、確認画面のYesも押して
すると「OAuth 2.0 Client ID and Client Secret」が表示される
今回に関しては使わないので「Done」
二度と表示されないClient Secretの最終確認でも「Yes, I saved it」
これでUser authentication set upは準備完了で、各種キーを生成する
step 4: 各種キー発行
Keys and Tokensタブで
- API Key and Secret
- Access Token and Secret
を発行
4つの文字列を控える。あとのpythonプログラムで使う
API_KEY = 'YOUR_API_KEY'
API_SECRET_KEY = 'YOUR_API_SECRET_KEY'
ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN'
ACCESS_TOKEN_SECRET = 'YOUR_ACCESS_TOKEN_SECRET'
生成後の管理画面、アクセストークンの権限がちゃんと「Created with Read, Write, and Direct Messages permissions」であることを確認
これはRead Onlyの場合はstep 3の設定ができてないということ
step 5: pythonプログラム
これで準備完了。やっとプログラムを動かせる
import json
import requests
from requests_oauthlib import OAuth1
# APIキーとトークンの設定
API_KEY = 'YOUR_API_KEY'
API_SECRET_KEY = 'YOUR_API_SECRET_KEY'
ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN'
ACCESS_TOKEN_SECRET = 'YOUR_ACCESS_TOKEN_SECRET'
# OAuth認証
auth = OAuth1(API_KEY, API_SECRET_KEY, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
# アーカイブデータからツイートIDを抽出する関数
def extract_tweet_ids_from_archive(archive_file_path):
tweet_ids = []
with open(archive_file_path, 'r', encoding='utf-8') as file:
data = file.read()
data = data.replace('window.YTD.tweets.part0 = ', '')
tweets_data = json.loads(data)
for tweet in tweets_data:
tweet_id = tweet['tweet']['id_str']
tweet_ids.append(tweet_id)
return tweet_ids
# ツイートを削除する関数
def delete_tweets(tweet_ids):
url_delete_tweet = "https://api.twitter.com/1.1/statuses/destroy/"
for tweet_id in tweet_ids:
del_response = requests.post(url_delete_tweet + f"{tweet_id}.json", auth=auth)
if del_response.status_code == 200:
print(f"Deleted tweet ID: {tweet_id}")
else:
print(f"Failed to delete tweet ID: {tweet_id}, Status Code: {del_response.status_code}")
# 実行
archive_file_path = 'tweets-sample.js' # アーカイブファイルのパスを指定
tweet_ids = extract_tweet_ids_from_archive(archive_file_path)
delete_tweets(tweet_ids)
簡単なpythonプログラムだが、一応リポジトリも乗せておく
- API KEYなどを書き換える
API_KEY = 'YOUR_API_KEY'
API_SECRET_KEY = 'YOUR_API_SECRET_KEY'
ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN'
ACCESS_TOKEN_SECRET = 'YOUR_ACCESS_TOKEN_SECRET'
- アーカイブファイルのパスを指定する
archive_file_path = 'tweets-sample.js'
- プログラム実行
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.py
ちゃんとポストが0件になりました🎉
(0件になることは何が嬉しいんだろうね...)
Discussion
丁度、欲しい情報でした。
ありがとうございます。
手順も分かりやすく、自分でも実現できました。
今は削除ツールが使えないので、本当に助かりました。