#!/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() 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'))