You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
3.1 KiB
151 lines
3.1 KiB
4 years ago
|
import feedparser
|
||
|
import datetime
|
||
|
import pypandoc
|
||
|
from nltk import sent_tokenize
|
||
|
from mastodon import Mastodon
|
||
|
|
||
|
# https://feedparser.readthedocs.io/en/latest/
|
||
|
|
||
|
# -------------------------------------
|
||
|
# FEED DETAILS
|
||
|
|
||
|
feed = 'output/feeds/feed.rss'
|
||
|
d = feedparser.parse(feed)
|
||
|
|
||
|
feedtitle = d.feed.title
|
||
|
|
||
|
# -------------------------------------
|
||
|
# GREP LATEST RSS ENTRY
|
||
|
|
||
|
title = d.entries[0].title
|
||
|
author = d.entries[0].author
|
||
|
link = d.entries[0].link
|
||
|
|
||
|
year = "{:02d}".format(d.entries[0].published_parsed[0])
|
||
|
month = "{:02d}".format(d.entries[0].published_parsed[1])
|
||
|
day = "{:02d}".format(d.entries[0].published_parsed[2] + 1)
|
||
|
|
||
|
print(year, month, day)
|
||
|
|
||
|
# -------------------------------------
|
||
|
# WHAT DATE IS IT TODAY?
|
||
|
|
||
|
today = str(datetime.date.today()).split('-')
|
||
|
today_year = "{:02d}".format(int(today[0]))
|
||
|
today_month = "{:02d}".format(int(today[1]))
|
||
|
today_day = "{:02d}".format(int(today[2]))
|
||
|
|
||
|
print(today_year, today_month, today_day)
|
||
|
|
||
|
# -------------------------------------
|
||
|
# IF ENTRY IS PUBLISHED TODAY
|
||
|
|
||
|
PUBLISH = False
|
||
|
|
||
|
if year == today_year:
|
||
|
if month == today_month:
|
||
|
if day == today_day:
|
||
|
PUBLISH = True
|
||
|
|
||
|
# -------------------------------------
|
||
|
# MAKE THE TOOT !
|
||
|
|
||
|
toot = False
|
||
|
|
||
|
if PUBLISH == True:
|
||
|
|
||
|
post = d.entries[0].description
|
||
|
post = pypandoc.convert_text(post, 'plain', format='html')
|
||
|
|
||
|
post = post.split()
|
||
|
|
||
|
first_letter = '\n'.join(post[:5])
|
||
|
post = '\n'.join(post[5:len(post)])
|
||
|
|
||
|
post = post.replace('\n\n','$$$')
|
||
|
post = post.replace('\n',' ')
|
||
|
post = post.replace('$$$','\n\n')
|
||
|
|
||
|
footer = '''
|
||
|
|
||
|
) ) )) ) ) ) ) ) ))
|
||
|
( ( (( ( ( ( ( ( ((
|
||
|
|
||
|
{}
|
||
|
by {}
|
||
|
|
||
|
{}
|
||
|
|
||
|
#ann #feed #AMRO #servus'''.format(title, author, link)
|
||
|
|
||
|
maxlength = 500 # maximum length of a toot
|
||
|
maxlength = maxlength-(len(footer) + 10) # to create space for the footer
|
||
|
|
||
|
sentences = sent_tokenize(post)
|
||
|
|
||
|
# print(sentences)
|
||
|
|
||
|
toot = ''
|
||
|
count = 0
|
||
|
|
||
|
for s in sentences:
|
||
|
if count == 0:
|
||
|
toot += '“'
|
||
|
toot += first_letter
|
||
|
count += 1
|
||
|
if count > 0:
|
||
|
if (len(toot) + len(s)) < maxlength:
|
||
|
toot += ' ' + s
|
||
|
count += 1
|
||
|
|
||
|
toot += '”'
|
||
|
toot += footer
|
||
|
|
||
|
print(toot)
|
||
|
|
||
|
# -------------------------------------
|
||
|
# PUBLISH ON MASTODON !
|
||
|
|
||
|
if toot:
|
||
|
|
||
|
instance = 'https://social.servus.at/'
|
||
|
|
||
|
# The following two steps only needs to be done once!
|
||
|
# We already did it, so it is commented out now.
|
||
|
|
||
|
# --------------------
|
||
|
# [done] Register the bot as an application, save details as a (.secret) plain text file.
|
||
|
# --------------------
|
||
|
# Mastodon.create_app(
|
||
|
# feedtitle,
|
||
|
# api_base_url = instance,
|
||
|
# to_file = 'rss-to-ap/rss-to-ap.secret'
|
||
|
# )
|
||
|
|
||
|
# --------------------
|
||
|
# [done] Write your login details to a (.secret) plain text file.
|
||
|
# --------------------
|
||
|
# mastodon = Mastodon(
|
||
|
# client_id = 'rss-to-ap/rss-to-ap.secret',
|
||
|
# api_base_url = instance
|
||
|
# )
|
||
|
|
||
|
# username = 'nourishing-network@servus.at'
|
||
|
# password = 'PASSWORD'
|
||
|
|
||
|
# mastodon.log_in(
|
||
|
# username,
|
||
|
# password,
|
||
|
# to_file = 'rss-to-ap/rss-to-ap-usercred.secret'
|
||
|
# )
|
||
|
|
||
|
# --------------------
|
||
|
# Log in, using the .secret file.
|
||
|
# --------------------
|
||
|
|
||
|
mastodon = Mastodon(
|
||
|
access_token = 'rss-to-ap/rss-to-ap-usercred.secret',
|
||
|
api_base_url = instance
|
||
|
)
|
||
|
|
||
|
# mastodon.toot(toot)
|