diff --git a/feed/rss/fr/initiativesPopulairesFederales.xml b/feed/rss/fr/initiativesPopulairesFederales.xml new file mode 100644 index 0000000..e69de29 diff --git a/resspublica/main.py b/resspublica/main.py index 8a471a0..039deef 100644 --- a/resspublica/main.py +++ b/resspublica/main.py @@ -1,9 +1,32 @@ from SPARQLWrapper import SPARQLWrapper, JSON from feedgen.feed import FeedGenerator from importlib.resources import files +from datetime import datetime + def getValue(row, key): 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(): sparql = SPARQLWrapper("https://cached.lindas.admin.ch/query") @@ -22,6 +45,17 @@ def generateFederalFeed(): "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 lang in ["fr", "de", "it"]: item = { @@ -29,9 +63,12 @@ def generateFederalFeed(): "date": getValue(entry, "date"), "title": getValue(entry, "title_" + 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) 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(): generateFederalFeed()