From cbb5c654c5dbead469d2650ac97f6ea3cf4eae21 Mon Sep 17 00:00:00 2001 From: Laszlo Zeke Date: Sat, 21 Jan 2017 20:13:40 +0100 Subject: [PATCH] Support for v5 twitch api -Using v5 Twitch API -Caching for userids -Using the largest thumbnail available -Adding description if available -Changed feed date to creation time -Changed feed title to use display name -Some extra error handling + cleanup --- TwitchRSS/app.yaml | 7 ++-- TwitchRSS/favicon.ico | Bin 0 -> 7150 bytes TwitchRSS/twitchrss.py | 92 ++++++++++++++++++++++++++++------------- 3 files changed, 68 insertions(+), 31 deletions(-) create mode 100644 TwitchRSS/favicon.ico diff --git a/TwitchRSS/app.yaml b/TwitchRSS/app.yaml index 96c0da9..14c59dd 100644 --- a/TwitchRSS/app.yaml +++ b/TwitchRSS/app.yaml @@ -1,9 +1,10 @@ -application: twitchrss -version: a002 runtime: python27 -api_version: 1 threadsafe: true handlers: +- url: /favicon\.ico + static_files: favicon.ico + upload: favicon\.ico + - url: /.* script: twitchrss.app \ No newline at end of file diff --git a/TwitchRSS/favicon.ico b/TwitchRSS/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c8d051647d35afbc001cd091aba44bab09828857 GIT binary patch literal 7150 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 p?A|e8pyZM=ct{`g{Umo0RmrWTFZzy" % (link, vod['preview']) - d = datetime.datetime.strptime(vod['recorded_at'], '%Y-%m-%dT%H:%M:%SZ') + item["description"] = "" % (link, vod['preview']['large']) + if vod.get('description_html'): + item["description"] += "
" + vod['description_html'] + d = datetime.datetime.strptime(vod['created_at'], '%Y-%m-%dT%H:%M:%SZ') item["pubDate"] = d.timetuple() item["guid"] = vod['_id'] - if vod["status"] == "recording": # To show a different news item when live is over + if vod["status"] == "recording": # To show a different news item when recording is over item["guid"] += "_live" item["ttl"] = '10' feed.items.append(item) - except KeyError: + except KeyError as e: + logging.warning('Issue with json: %s\nException: %s' % (vods_info, e)) self.abort(404) return feed.format_rss2_string()