diff options
Diffstat (limited to 'db.py')
-rw-r--r-- | db.py | 84 |
1 files changed, 84 insertions, 0 deletions
@@ -0,0 +1,84 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- + + +from config import max_age +import sqlite3 +import time +import tweepy + + +class LikeMemory(): + """Track all liked Tweets.""" + + def __init__(self, api): + """Build the Python object.""" + + self._api = api + + self._db = sqlite3.connect('HTT.db', detect_types=sqlite3.PARSE_DECLTYPES) + + sqlite3.register_adapter(bool, int) + sqlite3.register_converter("BOOLEAN", lambda v: bool(int(v))) + + sql = ''' + CREATE TABLE IF NOT EXISTS LikedTweets( + sid INTEGER PRIMARY KEY, + username TEXT, + timestamp INTEGER, + purged BOOLEAN + ) + ''' + + cursor = self._db.cursor() + cursor.execute(sql) + self._db.commit() + + + def save_liked_status(self, sid, username): + """Remember a given liked status.""" + + timestamp = int(time.time()) + + values = (sid, username, timestamp, False) + + cursor = self._db.cursor() + cursor.execute('INSERT INTO LikedTweets VALUES (?, ?, ?, ?)', values) + self._db.commit() + + print(timestamp) + + + def purge_old_status(self): + """Purge old seen statuses.""" + + timestamp = int(time.time()) - max_age * 24 * 60 * 60 + + values = (timestamp, False) + + cursor = self._db.cursor() + cursor.execute('SELECT sid FROM LikedTweets WHERE timestamp < ? AND purged = ?', values) + + rows = cursor.fetchall() + + for row in rows: + + sid = row[0] + + try: + + self._api.destroy_favorite(sid) + + # tweepy.error.TweepError: [{'code': 144, 'message': 'No status found with that ID.'}] + except tweepy.error.TweepError as err: + + pass + + values = (True, sid) + + cursor = self._db.cursor() + cursor.execute('UPDATE LikedTweets SET purged = ? WHERE sid = ?', values) + + self._db.commit() + + print('Purged %d liked Tweet%s!' % (len(rows), '' if len(rows) <= 1 else 's')) |