#!/usr/bin/env python3 import logging from datetime import datetime from urllib.request import Request, urlopen from xml.dom.minidom import parseString from rss_types import RSSFeed, RSSItem def getText(dom, element): textNode = dom.getElementsByTagName(element)[0].firstChild if textNode: return textNode.data return "" def zdf(show_url): url = f"https://www.zdf.de/rss/zdf/{show_url}" try: response = urlopen(Request(url)) except Exception as exc: logging.error("Request to zdf failed.", exc_info=exc) return None try: rss_raw = response.read() xml = parseString(rss_raw) except Exception as exc: logging.error("Parsing to zdf failed.", exc_info=exc) return None try: title = getText(xml, "title") description = getText(xml, "description") rss_items = [] for show in xml.getElementsByTagName("item"): s_url = getText(show, "link") if not s_url: continue # Full episodes have the ID 100 (others aswell sometimes) if not s_url.endswith("-100.html"): continue s_title = getText(show, "title") # if not s_title.startswith(title): # broke vor Maithink X # continue s_date = getText(show, "pubDate") s_date_parsed = datetime.strptime(s_date, "%a, %d %b %Y %H:%M:%S %z") if s_date_parsed.timestamp() > datetime.now().timestamp(): continue # s_tmp = s_title = getText(show, 'title') # if s_tmp.startswith(f'{title} vom '): # s_tmp = s_tmp[len(f'{title} vom '):] # saved = locale.setlocale(locale.LC_TIME) # locale.setlocale(locale.LC_TIME, "de_DE.utf8") # tmp = datetime.strptime(s_tmp, "%d. %B %Y") # locale.setlocale(locale.LC_TIME, saved) s_desc = getText(show, "description") s_guid = getText(show, "guid") rss_items.append( RSSItem( title=s_title, url=s_url, content=s_desc, date=s_date, guid=s_guid, enclosures=[], ) ) return RSSFeed( title=title, url=url, description=description, content=rss_items, ) except Exception as exc: logging.error("Working with zdf failed.", exc_info=exc) return None if __name__ == "__main__": pass # print(zdf("comedy/heute-show")) # print(zdf("comedy/die-anstalt")) # print(zdf("comedy/zdf-magazin-royale")) # print(zdf("show/mai-think-x-die-show"))