Support for sharing new posts on Mastodon

This commit is contained in:
2022-06-30 23:29:44 +02:00
parent e0777bd143
commit 045f5be79c
5 changed files with 77 additions and 18 deletions

View File

@ -7,6 +7,7 @@
| Copyright (C) 2022, OctoSpacc |
| ================================= """
from Libs.bs4 import BeautifulSoup
from Libs.mastodon import Mastodon
from Modules.Utils import *
@ -23,5 +24,60 @@ def MastodonGetPostsFromUserID(Session, UserID):
UserID,
exclude_replies=True)
def MastodonDoPost(Session):
pass # mastodon.toot('Tooting from python using #mastodonpy !')
def MastodonDoPost(Session, Text, Lang=None, Visibility='public'):
if Text:
Session.status_post(
Text,
language=Lang,
visibility=Visibility)
# TODO: Set a limit/cooldown on how many new posts at a time can be posted, or ignore posts older than date X.. otherwise if someone starts using this after having written 100 blog posts, bad things will happen
def MastodonShare(MastodonURL, MastodonToken, Pages, SiteDomain, SiteLang, Locale):
#return None
Session = MastodonGetSession(MastodonURL, MastodonToken)
Posts = MastodonGetPostsFromUserID(
Session,
MastodonGetMyID(Session))
for i,e in enumerate(Posts):
Parse = BeautifulSoup(e['content'], 'html.parser')
Posts[i] = {
'URL': e['uri'],
#e['content'],
'LastLink': Parse.find_all('a')[-1]['href'] if Parse.a else None}
#print(i['uri'], i['content'])
#print(Posts)
Pages.sort()
for File, Content, Titles, Meta, HTMLContent, Description, Image in Pages:
if Meta['Type'] == 'Post':
Desc = ''
Parse = BeautifulSoup(HTMLContent, 'html.parser')
Paragraphs = Parse.p.get_text().split('\n')
Read = '...' + Locale['ReadFullPost'] + ':\n'
URL = '{}/{}.html'.format(SiteDomain, StripExt(File))
#Desc = '...' + Read + ':\n' + URL
#DescLen = len(Read) + 30
#if not Paragraphs[0]:
# Paragraphs.pop(0)
for p in Paragraphs:
#while len(Description) <= 450:
#if p and len(Description+p)+2 <= 450:
if p and len(Read+Desc+p)+25 < 500:
Desc += p + '\n\n'
else:
if Desc:
break
else:
Desc = p[:500-25-5-len(Read)] + '...'
#if len(Description) > 450:
# Description = Description[:450] + '...'
DoPost = True
for p in Posts:
if p['LastLink'] == URL:
DoPost = False
break
if DoPost:
MastodonDoPost(
Session,
Desc + Read + URL,
SiteLang)
#BodyDescription = Parse.p.get_text()[:150].replace('\n', ' ').replace('"', "'") + '...'