【Python】Twitter APIで過去のツイートを削除する
Twitter API
Twitter APIの利用にはTwitterの開発者アカウントが必要です。
今回、こちらの詳細は省きます。
取得ができたら、API Key, Access Token を発行しておきます。
Twitterデータを取得する
アカウント / Twitter
設定とサポート→設定とプライバシー
→アカウント→データのアーカイブをダウンロード
上記からTwitterデータをダウンロードします。
リクエスト後、丁度24時間ほどでダウンロードできました。
(総ツイート数 約1.4万, 477MB)
プログラムを書く
tweets.jsについて
全ツイートのデータは、"data/tweets.js"にjson形式で保存されています。
このファイルの1行目は以下のようになっています。
window.YTD.tweets.part0 = [
そのため、このままではjsonファイルとして読み込めません。
よって、この部分を切り取っておく必要があります。
(今回はreライブラリを使用してこの部分を置換しています。)
コード
# twitter.ini
[env]
CONSUMER_KEY = **********
CONSUMER_SECRET = **********
ACCESS_#TOKEN = **********
ACCESS_SECRET = **********
# delete_tweets.py
import twitter
from configobj import ConfigObj
import json
import os
import re
# 基準のパスを指定
path = os.path.dirname(__file__)
# 設定ファイルの読み込み
ini_path = os.path.join(path, "twitter.ini")
config = ConfigObj(ini_path, encoding="utf-8")
env = config["env"] # token
# TwitterAPI 認証
api = twitter.Api(
consumer_key = env["CONSUMER_KEY"],
consumer_secret = env["CONSUMER_SECRET"],
access_token_key = env["ACCESS_TOKEN"],
access_token_secret = env["ACCESS_SECRET"]
)
# ツイート読み込み
json_path = os.path.join(path, "tweets.js")
json_open = open(json_path, "r" ,encoding="utf-8")
tw_json = json_open.read()
tw_json = re.sub("window.YTD.tweets.part0 = ", "", tw_json) # 置換処理
json_load = json.loads(tw_json)
tweet = 0
mention = 0
retweet = 0
for n in json_load:
if int(n["tweet"]["favorite_count"]) < 1: # いいねが0のツイート
if n["tweet"]["full_text"][0:4] == "RT @": # リツイート
retweet += 1
elif n["tweet"]["full_text"][0:1] == "@": # メンション
mention += 1
else: # 通常のツイート
tweet += 1
try:
api.DestroyStatus(n["tweet"]["id"])
except:
pass
print(f"総ツイート数: {tweet + mention + retweet}\n"
f"ツイートの数: {tweet}\n"
f"メンションの数: {mention}\n"
f"リツイートの数: {retweet}")
ディレクトリ
┣ delete_tweet.py
┣ twitter.ini
┗ tweets.js
このプログラムで、試しにいいね数が0のツイートを削除してみます。
今回、RTとメンション(リプライ)は除外しています。
リツイートは"full_text"の頭の4文字から判別できます。
削除するツイートに間違いがないか、よく確認してから実行しましょう。
実行したところ、以下のような結果が出ました。
いいねが0のツイートが8257件、通常のツイートが2552件あったようです。
総ツイート数: 8257
ツイートの数: 2552
メンションの数: 4829
リツイートの数: 876
確認
実行が終わったら、ツイートが削除されているか確認してみます。
削除対象のツイートIDから、ツイートのページに飛んでみました。
次のような画面が表示されたら成功です。
応用
if int(n["tweet"]["favorite_count"]) < 1:
この部分を書き換えることで削除対象のツイートを変更できます。
# 例
if n["tweet"]["entities"]["media"]: # メディアツイート
if int(n["tweet"]["created_at"][-4:]) < 2022 # 2022年よりも前のツイート
詳しくはtweets.jsの中身を見れば大体分かると思います。
まとめ
プログラム自体は簡単に書けますが、そのための準備(特に開発者アカウントの申請と認証)が非常に面倒です。
ツイ消しだけなら黒歴史クリーナーとか使ったほうが絶対に早いです。
ただ、Twitter APIが使えるようになるといろいろと便利なので、興味のある方はこの機会に申請してみるのも良いと思います。