new feature: posting unfollowing accounts
This commit is contained in:
pare
cba9a3b650
commit
27119c1244
S'han modificat 2 arxius amb 121 adicions i 5 eliminacions
|
@ -59,6 +59,8 @@ class Database():
|
||||||
|
|
||||||
print(f'follower {account} is already in the database.')
|
print(f'follower {account} is already in the database.')
|
||||||
|
|
||||||
|
self.update_follower(account)
|
||||||
|
|
||||||
found = True
|
found = True
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -79,11 +81,53 @@ class Database():
|
||||||
|
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
def find_unfollowers(self):
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
|
|
||||||
|
unfollowers = []
|
||||||
|
|
||||||
|
select_sql = "select account from followers where following='f' and updated_at > (now() + interval '2 hours') - interval '6 hours';"
|
||||||
|
|
||||||
|
conn = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
conn = psycopg2.connect(database=self.followers_db, user=self.followers_db_user, password = self.followers_db_user_password, host="/var/run/postgresql", port="6432")
|
||||||
|
|
||||||
|
cur = conn.cursor()
|
||||||
|
|
||||||
|
print(f'Searching unfollowers...')
|
||||||
|
|
||||||
|
cur.execute(select_sql)
|
||||||
|
|
||||||
|
rows = cur.fetchall()
|
||||||
|
|
||||||
|
if rows != None:
|
||||||
|
|
||||||
|
for row in rows:
|
||||||
|
|
||||||
|
unfollowers.append(row[0])
|
||||||
|
|
||||||
|
cur.close()
|
||||||
|
|
||||||
|
except (Exception, psycopg2.DatabaseError) as error:
|
||||||
|
|
||||||
|
print(error)
|
||||||
|
|
||||||
|
finally:
|
||||||
|
|
||||||
|
if conn is not None:
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
return unfollowers
|
||||||
|
|
||||||
def save_follower(self, account):
|
def save_follower(self, account):
|
||||||
|
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
|
|
||||||
insert_sql = "INSERT INTO followers(account, updated_at) VALUES(%s,%s) ON CONFLICT DO NOTHING"
|
insert_sql = "INSERT INTO followers(account, updated_at, following) VALUES(%s,%s,%s) ON CONFLICT DO NOTHING"
|
||||||
|
|
||||||
conn = None
|
conn = None
|
||||||
|
|
||||||
|
@ -95,7 +139,39 @@ class Database():
|
||||||
|
|
||||||
print(f'Writing follower {account}...')
|
print(f'Writing follower {account}...')
|
||||||
|
|
||||||
cur.execute(insert_sql, (account, now))
|
cur.execute(insert_sql, (account, now, True))
|
||||||
|
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
cur.close()
|
||||||
|
|
||||||
|
except (Exception, psycopg2.DatabaseError) as error:
|
||||||
|
|
||||||
|
print(error)
|
||||||
|
|
||||||
|
finally:
|
||||||
|
|
||||||
|
if conn is not None:
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
def update_follower(self, account):
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
|
|
||||||
|
update_sql = "UPDATE followers set updated_at=(%s), following=(%s) where account=(%s)"
|
||||||
|
|
||||||
|
conn = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
conn = psycopg2.connect(database=self.followers_db, user=self.followers_db_user, password = self.followers_db_user_password, host="/var/run/postgresql", port="6432")
|
||||||
|
|
||||||
|
cur = conn.cursor()
|
||||||
|
|
||||||
|
print(f'Updating follower {account}...')
|
||||||
|
|
||||||
|
cur.execute(update_sql, (now, True, account))
|
||||||
|
|
||||||
conn.commit()
|
conn.commit()
|
||||||
|
|
||||||
|
@ -185,15 +261,45 @@ class Database():
|
||||||
|
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
|
|
||||||
|
update_sql = "UPDATE followers set following='f'"
|
||||||
|
|
||||||
|
conn = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
conn = psycopg2.connect(database=self.followers_db, user=self.followers_db_user, password = self.followers_db_user_password, host="/var/run/postgresql", port="6432")
|
||||||
|
|
||||||
|
cur = conn.cursor()
|
||||||
|
|
||||||
|
cur.execute(update_sql)
|
||||||
|
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
cur.close()
|
||||||
|
|
||||||
|
except (Exception, psycopg2.DatabaseError) as error:
|
||||||
|
|
||||||
|
print(error)
|
||||||
|
|
||||||
|
finally:
|
||||||
|
|
||||||
|
if conn is not None:
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
def totals(self):
|
def totals(self):
|
||||||
|
|
||||||
local_followers = 0
|
local_followers = 0
|
||||||
|
|
||||||
remote_followers = 0
|
remote_followers = 0
|
||||||
|
|
||||||
local_sql = "select count(*) from followers where account not like '%@%'"
|
local_sql = "select count(*) from followers where account not like '%@%' and following"
|
||||||
|
|
||||||
remote_sql = "select count(*) from followers where account like '%@%'"
|
remote_sql = "select count(*) from followers where account like '%@%' and following"
|
||||||
|
|
||||||
conn = None
|
conn = None
|
||||||
|
|
||||||
|
@ -291,7 +397,7 @@ class Database():
|
||||||
|
|
||||||
db = self.followers_db
|
db = self.followers_db
|
||||||
table = "followers"
|
table = "followers"
|
||||||
sql = "create table "+table+" (account varchar(100) PRIMARY KEY, updated_at timestamptz)"
|
sql = "create table "+table+" (account varchar(100) PRIMARY KEY, updated_at timestamptz, following boolean)"
|
||||||
self.__create_table(self, table, sql)
|
self.__create_table(self, table, sql)
|
||||||
|
|
||||||
table = "total"
|
table = "total"
|
||||||
|
|
10
followers.py
10
followers.py
|
@ -56,6 +56,8 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
followers = followers_list(my_id)
|
followers = followers_list(my_id)
|
||||||
|
|
||||||
|
db.reset()
|
||||||
|
|
||||||
for follower in followers:
|
for follower in followers:
|
||||||
|
|
||||||
db.find_follower(follower.acct)
|
db.find_follower(follower.acct)
|
||||||
|
@ -82,10 +84,18 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
db.save_total(local_followers, local_incr, remote_followers, remote_incr)
|
db.save_total(local_followers, local_incr, remote_followers, remote_incr)
|
||||||
|
|
||||||
|
unfollowers = db.find_unfollowers()
|
||||||
|
|
||||||
post_text = f"@{mastodon.me().acct}\nseguidors: {len(followers)}\n"
|
post_text = f"@{mastodon.me().acct}\nseguidors: {len(followers)}\n"
|
||||||
|
|
||||||
post_text += f"locals: {local_followers} ({local_incr})\nremots: {remote_followers} ({remote_incr})"
|
post_text += f"locals: {local_followers} ({local_incr})\nremots: {remote_followers} ({remote_incr})"
|
||||||
|
|
||||||
|
if unfollowers != None:
|
||||||
|
|
||||||
|
for unfollow in unfollowers:
|
||||||
|
|
||||||
|
post_text += f'\nJa no et segueix:\n@{unfollow}'
|
||||||
|
|
||||||
mastodon.status_post(post_text, in_reply_to_id=None, visibility='direct')
|
mastodon.status_post(post_text, in_reply_to_id=None, visibility='direct')
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Referencia en una nova incidència