summaryrefslogtreecommitdiff
path: root/zdf.py
blob: 28373eaf6d0577c9d425fa954aa96719d227a134 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import logging
from urllib.request import urlopen, Request
from datetime import datetime
from xml.dom.minidom import parse, parseString
import locale

def getText(dom, element):
    textNode = dom.getElementsByTagName(element)[0].firstChild
    if textNode:
        return textNode.data
    return ""

def zdf(feed):
    url = f"https://www.zdf.de/rss/zdf/{feed}"

    try:
        res = urlopen(Request(url))
    except Exception as exc:
        logging.error('Request to zdf failed.', exc_info=exc)
        return None

    try:
        rss = res.read()
        xml = parseString(rss)
    except Exception as exc:
        logging.error('Parsing to zdf failed.', exc_info=exc)
        return None

    try:
        title = getText(xml, 'title')
        description = getText(xml, 'description')

        content = []
        for show in xml.getElementsByTagName('item'):
            s_url = getText(show, 'link')
            if not s_url:
                continue
            # Full episodes have the ID 100
            if not s_url.endswith('-100.html'):
                continue

            s_title = getText(show, 'title')
            if not s_title.startswith(title):
                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')
            print("Adding", s_url, s_desc)
            content.append({
                'title': s_title,
                'url': s_url,
                'content': s_desc,
                'date': s_date,
                'guid': s_guid,
            })

        return {
            "title": title,
            "url": url,
            "description": description,
            "content": content,
        }
    except Exception as exc:
        logging.error('Working with zdf failed.', exc_info=exc)
        return None


def main():
    # print(zdf("comedy/heute-show"))
    # print(zdf("comedy/die-anstalt"))
    print(zdf("comedy/zdf-magazin-royale"))

if __name__ == "__main__":
    # if len(sys.argv) != 2:
    #     print('Usage:', sys.argv[0], '<foobar>')
    #     sys.exit(1)
    # main(sys.argv[1])
    main()