tweetdelete/tweetdelete.py
2021-03-01 07:55:57 +01:00

51 lines
1.9 KiB
Python
Executable file

#!/usr/bin/env python3
"""Deletes old tweets."""
__author__ = "Tobias Schmidl"
__copyright__ = "Copyright 2021 Tobias Schmidl"
__license__ = "MIT"
__version__ = "0.1"
if __name__ == "__main__":
import os
from datetime import datetime, timedelta
import toml
import tweepy # type: ignore
from xdg import xdg_config_home
# options
twitter_config = toml.load(os.path.join(xdg_config_home(), "twitter.toml"))
test_mode = twitter_config["test_mode"] if "test_mode" in twitter_config else False
verbose = twitter_config["verbose"] if "verbose" in twitter_config else False
days_to_keep = twitter_config["days_to_keep"] if "days_to_keep" in twitter_config else 30
tweets_to_save = twitter_config["tweets_to_save"] if "tweets_to_save" in twitter_config else []
secrets = twitter_config["secrets"]
# auth and api
auth = tweepy.OAuthHandler(secrets['api_key'], secrets['api_key_secret'])
auth.set_access_token(secrets['access_token'], secrets['access_token_secret'])
api = tweepy.API(auth)
# set cutoff date, use utc to match twitter
cutoff_date = datetime.utcnow() - timedelta(days=days_to_keep)
# get all timeline tweets
print("Retrieving timeline tweets")
timeline = tweepy.Cursor(api.user_timeline).items()
deletion_count = 0 # pylint:disable=C0103
ignored_count = 0 # pylint:disable=C0103
for tweet in timeline:
# where tweets are not in save list and older than cutoff date
if tweet.id not in tweets_to_save and tweet.created_at < cutoff_date:
if verbose:
print("Deleting %d: [%s] %s" % (tweet.id, tweet.created_at, tweet.text))
if not test_mode:
api.destroy_status(tweet.id)
deletion_count += 1
else:
ignored_count += 1
print("Deleted %d tweets, ignored %d" % (deletion_count, ignored_count))