Filtering Friendica posts in an RSS feed by tag
The current version of Friendica doesn’t appear to support filtering posts by
tag in an RSS
?tag=XXX to an RSS feed URI seems to be silently ignored.
As I wanted a custom feed that only has music posts in it, I wrote a quick and dirty feed crawler in Python/Flask that removes all posts that do not have a single mention of the specified tag in it. The whole program only took 50 minutes to write.
After deployment the feed is available at
tag is the text we’re searching for in the feed
some_token is whatever you set with
FRIENDICA_TOKEN (only needed
so that Googlebot doesn’t accidentally flood Friendica with requests).
from os import getenv import requests from flask import Flask, request, Response from bs4 import BeautifulSoup app = Flask(__name__) TOKEN = getenv("FRIENDICA_TOKEN", "some_token") URI = getenv("FRIENDICA_URI", "https://some.friendica.server.tld/dfrn_poll/username") @app.route("/<text>", methods=["GET"]) def home_route(text: str): if request.args.get("token") != TOKEN: return "unauthorized", 401 res = requests.get(URI) if not res.ok: res.close() return "failed to retrieve data", 500 data = BeautifulSoup(res.content.decode("utf8"), features="lxml") res.close() for entry_tag in data.find_all("entry"): content = entry_tag.find("content") if content is not None: if not text in str(content): entry_tag.extract() return Response(data.encode().decode().replace("</body></html>", "").replace("<html><body>", "").encode(), mimetype="application/rss+xml")