import os
abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)
FEED_HEADER = """
"""
from time import strftime, gmtime
FEED_TITLE = """
{}
https://firmereferendum.giustizia.it/referendum/open
{}
it-it
{}
makefeed.py
720
https://www.rssboard.org/rss-specification
https://serben.kantai.online/rsslogo.png
Fac-simile logo della repubblica italiana
https://firmereferendum.giustizia.it/referendum/open
""".format(
"NON UFFICIALE - Ministero della Giustizia - Referendum e iniziative popolari",
"Aggiornamenti sui referendum ed iniziative popolari in fase di raccolta firme",
strftime("%a, %-d %h %Y %H:%m:%S %z", gmtime())
)
FEED_FOOTER = """
"""
# strftime("%a, %-d %h %Y %H:%m:%S %z", gmtime())
URL_API = "https://firmereferendum.giustizia.it/referendum/api-portal/iniziativa/public"
URL_INFO = "https://firmereferendum.giustizia.it/referendum/open/dettaglio-open/"
AGENT = "Mozilla/5.0 (Windows; Windows NT 10.2;; en-US) Gecko/20100101 Firefox/52.7"
mesi = [
"gennaio", "febbraio", "marzo", "aprile",
"magggio", "giugno", "luglio", "agosto",
"settembre", "ottobre", "novembre", "dicembre"
]
def date2it(date):
date = date.split('-')
return f"{date[2]} {mesi[int(date[1])-1]} {date[0]}"
def htmlescape(string):
return string.replace('<','<').replace('>','>').replace('&', '&')
from datetime import datetime
from zoneinfo import ZoneInfo
def dataIns_to_iso(date, date_time):
time = date_time.split('T')[1]
tz = datetime.fromisoformat(date)
tz = tz.replace(tzinfo=ZoneInfo("Europe/Rome"))
tz = tz.utcoffset().total_seconds() / 3600
return_date = datetime.fromisoformat(date).strftime("%a, %-d %h %Y")
return_date += f" {time}"
return_date += f" {int(tz):+03}00"
return return_date
def make_item(itemdata):
# Do not include current votes in card, only quorum, as it is supposed to be immutable
item_str = """
-
{}
{}
{}
{}
{}
"""
title = itemdata['titolo']
link = URL_INFO + str(itemdata['id'])
insert_time = itemdata['dataIns']
validity = f"Puoi firmare per questa iniziativa dal {date2it(itemdata['dataInizioRaccolta'])} al {date2it(itemdata['dataFineRaccolta'])}"
initiative_type = itemdata['idDecTipoIniziativa']['nome']
text_description = itemdata['descrizione']
pub_time = dataIns_to_iso(itemdata['dataGazzetta'], itemdata['dataIns'])
website = ''
if 'sito' in itemdata:
itemdata['sito']
website = f'
Sito dell\'iniziativa: {website}'
description = f"""
{initiative_type}
{text_description}
{validity}
"""
return item_str.format(title,link,link,pub_time,htmlescape(description))
import urllib.request, json
if __name__ == "__main__":
print("Fetching data ...")
data = json.loads(
urllib.request.urlopen(
urllib.request.Request(
URL_API,
data=None,
headers={ 'User-Agent': AGENT }
)
).read().decode('utf-8')
)
print("Fetch complete")
if not data['resultDescription'] == "Successo":
print("Error in fetching information")
exit(1)
with open('rss.xml', 'w') as file:
file.write(FEED_HEADER + FEED_TITLE)
for item in data['content']:
file.write(make_item(item))
file.write(FEED_FOOTER)