【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が使えるようになるといろいろと便利なので、興味のある方はこの機会に申請してみるのも良いと思います。


いいなと思ったら応援しよう!