TwitterのツイートをAPI制限関係なく消す/自動で消すスクリプト

標題の物を作ったので共有しておきます.いずれのスクリプトも,参考文献のサイトのスクリプトを元に都合よく書きかえた物になります.

黒歴史を葬り去りたい...とか,有名人になる予定があるため粗捜しをされたくない...とか,就活でちょっと心配...とかって人には需要があるかもしれません.

TwitterのAPI仕様変更

今までのTwitterのツイート取得APIは「最後にツイートしたIDから順に3200件」取得できるものだったんですが,いつからか特定の時期より前のツイートは条件下であってもツイートを取得できなくなりました.これについて言及しているサイトが少ないので,自分の取得結果からの推測になりますが,恐らく「アカウント作ってから3200件目以降のツイートは取得できないようになった」ような気がします.(上手い日本語の表現がわかりませんが)

他,データ要請から取得できるTwitterデータの提供方法も変わり,Tweet.csvからTweet.jsに変わりました.ここら辺の仕様変更で今まで使えていたツイート削除系WEBサービスが上手く使えないとか,挙動が変になるとか,ツイートを消せなくなるみたいな状況になったみたいです.

例えば,黒歴史クリーナーとかは,昔はツイートを全削除するならAPIを必要なだけ叩いて3200件ずつツイートを消すとか,Tweet.csvを読み込んでツイートを一括で全部消すみたいなことが出来たんですけど,今ではAPIを何回叩いても3200件ずつ消し切ることはできないし,.jsを読み込む仕様が用意できていないのか,サイトから全削除機能が無くなってしまいました.

見ての通りタイムラインからしか取得できなくなっています.API叩いて最新の3200件しか消すことが出来なくなっています.

最近は1600円くらい払って削除できるサービスを提供しているサイトが目に入ってくるようになりましたが,流石に馬鹿馬鹿しくて払っていられません.そこで,Tweet.jsに対応し,全ツイートを削除できるスクリプトを自作しようと思い至ったわけです.

他,ついでに自動でツイートを削除するタスクスケジューラ用のスクリプトを書きました.

※TwitterAPIの取得方法,Tweet.jsの取得方法はGoogle検索すればすぐ見つかるので割愛します.
※暇なときに追記するかもしれません

ツイート全削除用スクリプト

Tweet.jsはスクリプトと同じディレクトリに置いてあるものとします.Tweet.jsを開いてwindow.YTD.tweet.part0 =の部分を消して置いてください.

import os
import sys
import json 
import twitter

os.chdir(os.path.dirname(os.path.abspath(__file__)))

api = twitter.Api(
    consumer_key='YOUR KEY',
    consumer_secret='YOUR KEY',
    access_token_key='YOUR KEY',
    access_token_secret='YOUR KEY',
    sleep_on_rate_limit=True
)

with open('tweet.js', encoding='utf-8', mode='r') as f:
    twitter=json.load(f)
    for tweet0 in twitter:
        tweet = tweet0['tweet']
        print(tweet['id'])
        try:
            api.DestroyStatus(tweet['id'])
        except Exception as e:
            print(e.args)

ツイート定期削除用スクリプト

import sys
import time
import twitter

api = twitter.Api(
    consumer_key='YOUR KEY',
    consumer_secret='YOUR KEY',
    access_token_key='YOUR KEY',
    access_token_secret='YOUR KEY',
)

screen_name = 'YOUR TWITTER ID'
dt1 = time.time()

while True:
    statuses = api.GetUserTimeline(screen_name=screen_name) 
    for s in statuses:
        print(s.text, s.created_at)
        api.DestroyStatus(s.id)
    dt2 = time.time()
    if dt2-dt1>=120:
        sys.exit()

この

if dt2-dt1>=120:
    sys.exit()

については,このスクリプトを起動してから2分で終了する,という意味です(参考文献元のスクリプトはずっとwhileから抜けれないので).僕は毎日実行する用なのでツイートを消すのに2分あれば大丈夫なのでこう記述しています.後はこのスクリプトをタスクスケジューラで毎日起動させてあげればOKです.

また,Twitter IDが変わる度にscreen_nameを変更する必要があることに注意.

まとめ

これで,ツイートの全削除と定期削除ができるようになりました.

APIさえ取得してしまえば誰でも簡単にできます.

参考文献

[1] ツイートを全て消すスクリプト
[2] Pythonでtweet全削除
[3] Pythonでツイートを全部消す

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください