Convert rss feed items to activitypub posts

merge-requests/8/head
Bob Mottram 2020-10-07 14:51:29 +01:00
parent 7bcabea021
commit 6208a3f00f
19 changed files with 107 additions and 19 deletions

View File

@ -11534,7 +11534,9 @@ def runDaemon(newsInstance: bool,
print('Creating newswire thread')
httpd.thrNewswireDaemon = \
threadWithTrace(target=runNewswireDaemon,
args=(baseDir, httpd, 'newswire'), daemon=True)
args=(baseDir, httpd,
httpPrefix, domain, port,
httpd.translate), daemon=True)
# flags used when restarting the inbox queue
httpd.restartInboxQueueInProgress = False

View File

@ -6,11 +6,76 @@ __maintainer__ = "Bob Mottram"
__email__ = "bob@freedombone.net"
__status__ = "Production"
import os
import time
from newswire import getDictFromNewswire
from posts import createNewsPost
from utils import saveJson
def runNewswireDaemon(baseDir: str, httpd, unused: str):
def updateFeedsIndex(baseDir: str, filename: str) -> None:
"""Updates the index used for imported RSS feeds
"""
indexFilename = baseDir + '/accounts/feeds.index'
if os.path.isfile(indexFilename):
if filename not in open(indexFilename).read():
try:
with open(indexFilename, 'r+') as feedsFile:
content = feedsFile.read()
feedsFile.seek(0, 0)
feedsFile.write(filename + '\n' + content)
print('DEBUG: feeds post added to index')
except Exception as e:
print('WARN: Failed to write entry to feeds posts index ' +
indexFilename + ' ' + str(e))
else:
feedsFile = open(indexFilename, 'w+')
if feedsFile:
feedsFile.write(filename + '\n')
feedsFile.close()
def convertRSStoActivityPub(baseDir: str, httpPrefix: str,
domain: str, port: int,
newswire: {},
translate: {}) -> None:
"""Converts rss items in a newswire into posts
"""
basePath = baseDir + '/accounts/feeds'
if not os.path.isdir(basePath):
os.mkdir(basePath)
nickname = 'feeds'
for dateStr, item in newswire.items():
dateStr = dateStr.replace(' ', 'T')
dateStr = dateStr.replace('+00:00', 'Z')
filename = basePath + '/' + dateStr + '.json'
if os.path.isfile(filename):
continue
rssTitle = item[0]
url = item[1]
rssDescription = item[4]
if rssDescription:
rssDescription += \
'\n\n' + translate['Read more...'] + '\n' + url
else:
rssDescription = url
blog = createNewsPost(baseDir,
nickname, domain, port,
httpPrefix, dateStr,
rssTitle, rssDescription,
None, None, None, False)
if saveJson(blog, filename):
updateFeedsIndex(baseDir, filename)
def runNewswireDaemon(baseDir: str, httpd,
httpPrefix: str, domain: str, port: int,
translate: {}) -> None:
"""Periodically updates RSS feeds
"""
# initial sleep to allow the system to start up
@ -33,6 +98,12 @@ def runNewswireDaemon(baseDir: str, httpd, unused: str):
httpd.newswire = newNewswire
print('Newswire updated')
convertRSStoActivityPub(baseDir,
httpPrefix, domain, port,
newNewswire, translate)
print('Newswire feed converted to ActivityPub')
# wait a while before the next feeds update
time.sleep(1200)

View File

@ -7,7 +7,6 @@ __email__ = "bob@freedombone.net"
__status__ = "Production"
import os
import time
import requests
from socket import error as SocketError
import errno

View File

@ -1195,7 +1195,7 @@ def createBlogPost(baseDir: str,
def createNewsPost(baseDir: str,
nickname: str, domain: str, port: int, httpPrefix: str,
rssTitle: str, rssDescription: str,
published: str, rssTitle: str, rssDescription: str,
attachImageFilename: str, mediaType: str,
imageDescription: str, useBlurhash: bool) -> {}:
"""Converts title and description from an rss feed into a post
@ -1225,6 +1225,7 @@ def createNewsPost(baseDir: str,
schedulePost,
eventDate, eventTime, location)
blog['object']['type'] = 'Article'
blog['object']['published'] = published
return blog

View File

@ -304,5 +304,6 @@
"Vote": "تصويت",
"Remove Vote": "إزالة التصويت",
"This is a news instance": "هذا مثال أخبار",
"News": "أخبار"
"News": "أخبار",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "Notícies",
"Remove Vote": "Elimina el vot",
"This is a news instance": "Aquesta és una instància de notícies",
"News": "Notícies"
"News": "Notícies",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "Newyddion",
"Remove Vote": "Tynnwch y Bleidlais",
"This is a news instance": "Dyma enghraifft newyddion",
"News": "Newyddion"
"News": "Newyddion",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "Abstimmung",
"Remove Vote": "Abstimmung entfernen",
"This is a news instance": "Dies ist eine Nachrichteninstanz",
"News": "Nachrichten"
"News": "Nachrichten",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "Vote",
"Remove Vote": "Remove Vote",
"This is a news instance": "This is a news instance",
"News": "News"
"News": "News",
"Read more...": "Read more..."
}

View File

@ -304,5 +304,6 @@
"Vote": "Votar",
"Remove Vote": "Eliminar voto",
"This is a news instance": "Esta es una instancia de noticias",
"News": "Noticias"
"News": "Noticias",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "Voter",
"Remove Vote": "Supprimer le vote",
"This is a news instance": "Ceci est une instance d'actualité",
"News": "Nouvelles"
"News": "Nouvelles",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "Vóta",
"Remove Vote": "Bain Vóta",
"This is a news instance": "Is sampla nuachta é seo",
"News": "Nuacht"
"News": "Nuacht",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "वोट",
"Remove Vote": "वोट हटा दें",
"This is a news instance": "यह एक समाचार का उदाहरण है",
"News": "समाचार"
"News": "समाचार",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "Votazione",
"Remove Vote": "Rimuovi voto",
"This is a news instance": "Questa è un'istanza di notizie",
"News": "Notizia"
"News": "Notizia",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "投票",
"Remove Vote": "投票を削除",
"This is a news instance": "これはニュースインスタンスです",
"News": "ニュース"
"News": "ニュース",
"Read more...": ""
}

View File

@ -300,5 +300,6 @@
"Vote": "Vote",
"Remove Vote": "Remove Vote",
"This is a news instance": "This is a news instance",
"News": "News"
"News": "News",
"Read more...": "Read more..."
}

View File

@ -304,5 +304,6 @@
"Vote": "Voto",
"Remove Vote": "Remover voto",
"This is a news instance": "Esta é uma instância de notícias",
"News": "Notícia"
"News": "Notícia",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "Голос",
"Remove Vote": "Удалить голос",
"This is a news instance": "Это новостной экземпляр",
"News": "Новости"
"News": "Новости",
"Read more...": ""
}

View File

@ -304,5 +304,6 @@
"Vote": "投票",
"Remove Vote": "删除投票",
"This is a news instance": "这是一个新闻实例",
"News": "新闻"
"News": "新闻",
"Read more...": ""
}