feat: initial feed build

This commit is contained in:
2026-06-14 13:07:36 +02:00
parent 5cf64d4129
commit b347e91cef
2 changed files with 38 additions and 1 deletions
+38 -1
View File
@@ -1,9 +1,32 @@
from SPARQLWrapper import SPARQLWrapper, JSON from SPARQLWrapper import SPARQLWrapper, JSON
from feedgen.feed import FeedGenerator from feedgen.feed import FeedGenerator
from importlib.resources import files from importlib.resources import files
from datetime import datetime
def getValue(row, key): def getValue(row, key):
return row.get(key, {}).get("value") or None return row.get(key, {}).get("value") or None
def generateFeed(title, description, fileName, language, standards, entries):
time = datetime.now()
fg = FeedGenerator()
fg.title(title)
fg.link("https://raw.githubusercontent.com/tomasriveral/ReSSPublica/refs/heads/main/feed/" + standard + "/" + language + "/" + fileName)
fg.description(description)
fg.language(language)
fg.updated(time)
fg.author({'name': 'ReSSPublica'})
fg.docs("https://github.com/tomasriveral/ReSSPublica")
for item in entries:
fe = fg.add_entry()
fe.title(item["title"])
fe.guid(f"initiative-{item['id']}", permalink=False)
fe.updated(time)
fe.source({'url': item["url"], 'title': item["source"]})
fe.link(url)
fe.description(item["article")
fe.summary(item["article")
fe.content(item["text"])
def generateFederalFeed(): def generateFederalFeed():
sparql = SPARQLWrapper("https://cached.lindas.admin.ch/query") sparql = SPARQLWrapper("https://cached.lindas.admin.ch/query")
@@ -22,6 +45,17 @@ def generateFederalFeed():
"it": [] "it": []
} }
BASE_URLS = {
"fr": "https://www.bk.admin.ch/fr/details-initiatives-populaires/?initiative=",
"de": "https://www.bk.admin.ch/de/details-volksinitiativen/?initiative=",
"it": "https://www.bk.admin.ch/it/dettagli-iniziative-popolari/?initiative="
}
BASE_SOURCE = {
"fr": "Chancellerie fédérale ChF",
"de": "Bundeskanzlei BK",
"it": "Cancelleria federale CaF"
}
for entry in data: for entry in data:
for lang in ["fr", "de", "it"]: for lang in ["fr", "de", "it"]:
item = { item = {
@@ -29,9 +63,12 @@ def generateFederalFeed():
"date": getValue(entry, "date"), "date": getValue(entry, "date"),
"title": getValue(entry, "title_" + lang), "title": getValue(entry, "title_" + lang),
"article": getValue(entry, "artikel_" + lang), "article": getValue(entry, "artikel_" + lang),
"text": getValue(entry, "text_" + lang) "text": getValue(entry, "text_" + lang),
"url": BASE_URLS.get(lang, BASE_URLS["de"]) + str(getValue(entry, "id")),
"source": BASE_SOURCE[lang]
} }
feeds[lang].append(item) feeds[lang].append(item)
print(feeds["fr"]) print(feeds["fr"])
generateFeed("Initiatives populaires fédérales", "RSS feed des Initiatives populaires fédérales", "initiativesPopulairesFederales.xml", "fr", [ "rss" "atom"], feeds[fr]);
def main(): def main():
generateFederalFeed() generateFederalFeed()