mirror of
https://github.com/tomasriveral/ReSSPublica.git
synced 2026-08-12 10:40:45 +02:00
feat: initial feed build
This commit is contained in:
+38
-1
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user