mirror of
https://github.com/tomasriveral/ReSSPublica.git
synced 2026-08-12 10:40:45 +02:00
feat: add signature date info
This commit is contained in:
+35
-2
@@ -5,8 +5,41 @@ from datetime import datetime
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
|
def getSignatureInfo(start_date_str, lang="fr"):
|
||||||
|
MONTHS = {
|
||||||
|
"fr": ["janvier","février","mars","avril","mai","juin",
|
||||||
|
"juillet","août","septembre","octobre","novembre","décembre"],
|
||||||
|
"de": ["Januar","Februar","März","April","Mai","Juni",
|
||||||
|
"Juli","August","September","Oktober","November","Dezember"],
|
||||||
|
"it": ["gennaio","febbraio","marzo","aprile","maggio","giugno",
|
||||||
|
"luglio","agosto","settembre","ottobre","novembre","dicembre"]
|
||||||
|
}
|
||||||
|
|
||||||
|
texts = {
|
||||||
|
"fr": ("La collecte des signatures a commencé le", "et se terminera vers"),
|
||||||
|
"de": ("Die Unterschriftensammlung begann am", "und endet ungefähr im"),
|
||||||
|
"it": ("La raccolta delle firme è iniziata il", "e terminerà circa nel"),
|
||||||
|
}
|
||||||
|
|
||||||
|
start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
|
||||||
|
end_date = start_date + relativedelta(months=18)
|
||||||
|
|
||||||
|
def format_full(d):
|
||||||
|
if lang == "de":
|
||||||
|
return f"{d.day}. {MONTHS[lang][d.month - 1]} {d.year}"
|
||||||
|
return f"{d.day} {MONTHS[lang][d.month - 1]} {d.year}"
|
||||||
|
|
||||||
|
def format_month_year(d):
|
||||||
|
return f"{MONTHS[lang][d.month - 1]} {d.year}"
|
||||||
|
|
||||||
|
start = format_full(start_date)
|
||||||
|
end = format_month_year(end_date)
|
||||||
|
|
||||||
|
return f"""
|
||||||
|
<p>
|
||||||
|
{texts[lang][0]} {start} {texts[lang][1]} {end}.
|
||||||
|
</p>
|
||||||
|
""".strip()
|
||||||
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):
|
def generateFeed(title, description, fileName, language, standards, entries):
|
||||||
@@ -30,7 +63,7 @@ def generateFeed(title, description, fileName, language, standards, entries):
|
|||||||
fe.guid(f"initiative-{item['id']}", permalink=False)
|
fe.guid(f"initiative-{item['id']}", permalink=False)
|
||||||
fe.updated(time)
|
fe.updated(time)
|
||||||
fe.source({'url': item["url"], 'title': item["source"]})
|
fe.source({'url': item["url"], 'title': item["source"]})
|
||||||
fe.content(f'<p><a href="{item["url"]}">Official page</a></p>{item["text"]}', type="html")
|
fe.content(item["text"], type="html")
|
||||||
if "rss" in standards:
|
if "rss" in standards:
|
||||||
fg.rss_file("./feed/rss/" + language + "/" + fileName + ".xml", pretty=True)
|
fg.rss_file("./feed/rss/" + language + "/" + fileName + ".xml", pretty=True)
|
||||||
if "atom" in standards:
|
if "atom" in standards:
|
||||||
@@ -70,11 +103,11 @@ def generateFederalFeed():
|
|||||||
"id": getValue(entry, "id"),
|
"id": getValue(entry, "id"),
|
||||||
"date": getValue(entry, "date"),
|
"date": getValue(entry, "date"),
|
||||||
"title": getValue(entry, "title_" + lang),
|
"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")),
|
"url": BASE_URLS.get(lang, BASE_URLS["de"]) + str(getValue(entry, "id")),
|
||||||
"source": BASE_SOURCE[lang]
|
"source": BASE_SOURCE[lang]
|
||||||
}
|
}
|
||||||
|
item["text"] = "<p><a href=\""+item["url"]+"\">Official page</a></p>" + getSignatureInfo(item["date"], lang) + item["text"]
|
||||||
feeds[lang].append(item)
|
feeds[lang].append(item)
|
||||||
generateFeed(
|
generateFeed(
|
||||||
"Initiatives populaires fédérales",
|
"Initiatives populaires fédérales",
|
||||||
|
|||||||
@@ -4,21 +4,13 @@ SELECT
|
|||||||
?id
|
?id
|
||||||
?date
|
?date
|
||||||
|
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?title)="fr", STR(?title), ""); separator=" || ") AS ?title_fr)
|
(GROUP_CONCAT(DISTINCT IF(LANG(?title)="fr", STR(?title), ""); separator=" ") AS ?title_fr)
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?title)="de", STR(?title), ""); separator=" || ") AS ?title_de)
|
(GROUP_CONCAT(DISTINCT IF(LANG(?title)="de", STR(?title), ""); separator=" ") AS ?title_de)
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?title)="it", STR(?title), ""); separator=" || ") AS ?title_it)
|
(GROUP_CONCAT(DISTINCT IF(LANG(?title)="it", STR(?title), ""); separator=" ") AS ?title_it)
|
||||||
|
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?status)="fr", STR(?status), ""); separator=" || ") AS ?status_fr)
|
(GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="fr", STR(?initiativtext), ""); separator=" ") AS ?text_fr)
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?status)="de", STR(?status), ""); separator=" || ") AS ?status_de)
|
(GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="de", STR(?initiativtext), ""); separator=" ") AS ?text_de)
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?status)="it", STR(?status), ""); separator=" || ") AS ?status_it)
|
(GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="it", STR(?initiativtext), ""); separator=" ") AS ?text_it)
|
||||||
|
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="fr", STR(?initiativtext), ""); separator=" || ") AS ?text_fr)
|
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="de", STR(?initiativtext), ""); separator=" || ") AS ?text_de)
|
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?initiativtext)="it", STR(?initiativtext), ""); separator=" || ") AS ?text_it)
|
|
||||||
|
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?artikel)="fr", STR(?artikel), ""); separator=" || ") AS ?artikel_fr)
|
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?artikel)="de", STR(?artikel), ""); separator=" || ") AS ?artikel_de)
|
|
||||||
(GROUP_CONCAT(DISTINCT IF(LANG(?artikel)="it", STR(?artikel), ""); separator=" || ") AS ?artikel_it)
|
|
||||||
|
|
||||||
WHERE {
|
WHERE {
|
||||||
<https://politics.ld.admin.ch/political-rights/popular-initiative/1>
|
<https://politics.ld.admin.ch/political-rights/popular-initiative/1>
|
||||||
@@ -30,15 +22,11 @@ WHERE {
|
|||||||
<https://politics.ld.admin.ch/political-rights/popular-initiative/id> ?id ;
|
<https://politics.ld.admin.ch/political-rights/popular-initiative/id> ?id ;
|
||||||
<https://politics.ld.admin.ch/political-rights/popular-initiative/sammelbeginn> ?date ;
|
<https://politics.ld.admin.ch/political-rights/popular-initiative/sammelbeginn> ?date ;
|
||||||
<https://politics.ld.admin.ch/political-rights/popular-initiative/titel> ?titleUri ;
|
<https://politics.ld.admin.ch/political-rights/popular-initiative/titel> ?titleUri ;
|
||||||
<https://politics.ld.admin.ch/political-rights/popular-initiative/status> ?statusUri ;
|
<https://politics.ld.admin.ch/political-rights/popular-initiative/initiativtext> ?textUri .
|
||||||
<https://politics.ld.admin.ch/political-rights/popular-initiative/initiativtext> ?textUri ;
|
|
||||||
<https://politics.ld.admin.ch/political-rights/popular-initiative/artikelBv> ?articleUri .
|
|
||||||
|
|
||||||
?titleUri schema:name ?title .
|
?titleUri schema:name ?title .
|
||||||
?statusUri schema:name ?status .
|
|
||||||
|
|
||||||
OPTIONAL { ?textUri schema:name ?initiativtext . }
|
OPTIONAL { ?textUri schema:name ?initiativtext . }
|
||||||
OPTIONAL { ?articleUri schema:name ?artikel . }
|
|
||||||
}
|
}
|
||||||
GROUP BY ?id ?date
|
GROUP BY ?id ?date
|
||||||
ORDER BY DESC(?date)
|
ORDER BY DESC(?date)
|
||||||
|
|||||||
Reference in New Issue
Block a user