黒歴史を消したいのに、黒歴史クリーナーが最新の3200件しか対応していない。
最新のツイートは消したくないし、消したいツイートは3200件より昔という状況だったのでしぶしぶ書く。
スレッド処理してないので時間かかります。まぁどうせ実行して放置するのでいいかなと思って。
早くやりたいなら年月ごとに1スレッド作って配列をスライスして渡せばいいんじゃないかな(適当)
twitterのアカウント設定からデータの一括DLを要求すると圧縮ファイルがあるので、その中の"tweet.js"を使います。
ファイル先頭が
window.YTD.tweet = [ {
又は
window.YTD.tweet.partN = [ { ...
となってるので、変数名を消して
[ { ...
にします。
ツイート数が多い場合はファイルが"tweet.js", "tweet-part1.js", "tweet-part2.js", ... になってるようです。(1ファイル上限100MBっぽい)それぞれのファイルに対してスクリプトを実行するか、メモリに余裕があれば一気に全部読み込んでください。
ツイート削除APIはリミットがかかってないようなので、スリープは挟まなくていいようです。ただしあまりにも多くのスレッドを生成して削除するとDoS攻撃まがいになるのでエラー返されるかも。のんびりバックグラウンドで実行させるのがいいでしょう。
#!/usr/bin/env python3
from datetime import datetime
import sys
import json
import tweepy
# https://developer.twitter.com/apps
key = ""
secret_key = ""
token = ""
secret_token = ""
auth = tweepy.OAuthHandler(key, secret_key)
auth.set_access_token(token, secret_token)
api = tweepy.API(auth)
with open('tweet.js', encoding='utf_8') as f:
tweetsjson = json.load(f)
for tweet in tweetsjson: # 2018年4月1日以前のツイートを消したい場合
if datetime.timestamp(datetime(2018, 4, 1, 0, 0, 0)) > ((int(tweet['id']) >> 22) + 1288834974657) / 1000:
try:
api.destroy_status(int(tweet['id']))
except:
print(tweet['id'], file=sys.stderr)