The making of a publication for the 2020 edition of the AMRO festival organised by Servus. (Alice & Manetta are working on this.)
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

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)