diff --git a/fHDHR/origin/origin_epg.py b/fHDHR/origin/origin_epg.py index c9cd5d3..daf5840 100644 --- a/fHDHR/origin/origin_epg.py +++ b/fHDHR/origin/origin_epg.py @@ -1,3 +1,4 @@ +import datetime class OriginEPG(): @@ -5,9 +6,14 @@ class OriginEPG(): def __init__(self, fhdhr): self.fhdhr = fhdhr + self.base_api = 'https://valencia-app-mds.xumo.com/v2/' + def update_epg(self, fhdhr_channels): programguide = {} + todaydate = datetime.datetime.utcnow().date() + self.remove_stale_cache(todaydate) + for fhdhr_id in list(fhdhr_channels.list.keys()): c = fhdhr_channels.list[fhdhr_id].dict @@ -20,8 +26,56 @@ class OriginEPG(): "thumbnail": c["thumbnail"], "listing": [], } - - # for hour_num in range(1, 24): - # print(hour_num) + cached_items = self.get_cached(c["origin_id"]) + print(len(cached_items)) return programguide + + def get_cached(self, channel_id): + for hour_num in range(0, 24): + lineup_url = "channels/channel/%s/broadcast.json?hour=%s" % (self.base_api, channel_id, hour_num) + self.get_cached_item(channel_id, hour_num, lineup_url) + cache_list = self.fhdhr.db.get_cacheitem_value("cache_list", "offline_cache", "origin") or [] + return [self.fhdhr.db.get_cacheitem_value(x, "offline_cache", "origin") for x in cache_list] + + def get_cached_item(self, channel_id, cache_key, url): + cache_key = datetime.datetime.today().replace(hour=cache_key) + cache_key = datetime.datetime.strptime(cache_key, '%Y-%m-%dT%H:%M:%S').timestamp() + cache_key = channel_id + "_" + cache_key + cacheitem = self.fhdhr.db.get_cacheitem_value(str(cache_key), "offline_cache", "origin") + if cacheitem: + self.fhdhr.logger.info('FROM CACHE: ' + str(cache_key)) + return cacheitem + else: + self.fhdhr.logger.info('Fetching: ' + url) + try: + resp = self.fhdhr.web.session.get(url) + except self.fhdhr.web.exceptions.HTTPError: + self.fhdhr.logger.info('Got an error! Ignoring it.') + return + result = resp.json() + + self.fhdhr.db.set_cacheitem_value(str(cache_key), "offline_cache", result, "origin") + cache_list = self.fhdhr.db.get_cacheitem_value("cache_list", "offline_cache", "origin") or [] + cache_list.append(str(cache_key)) + self.fhdhr.db.set_cacheitem_value("cache_list", "offline_cache", cache_list, "origin") + + def remove_stale_cache(self, todaydate): + cache_clear_time = todaydate.strftime('%Y-%m-%dT%H:00:00') + cache_clear_time = datetime.datetime.strptime(cache_clear_time, '%Y-%m-%dT%H:%M:%S').timestamp() + cache_list = self.fhdhr.db.get_cacheitem_value("cache_list", "offline_cache", "origin") or [] + cache_to_kill = [] + for cacheitem in cache_list: + cachetime = str(cacheitem).split("_")[-1] + if float(cachetime) < cache_clear_time: + cache_to_kill.append(cacheitem) + self.fhdhr.db.delete_cacheitem_value(str(cacheitem), "offline_cache", "origin") + self.fhdhr.logger.info('Removing stale cache: ' + str(cacheitem)) + self.fhdhr.db.set_cacheitem_value("cache_list", "offline_cache", [x for x in cache_list if x not in cache_to_kill], "origin") + + def clear_cache(self): + cache_list = self.fhdhr.db.get_cacheitem_value("cache_list", "offline_cache", "origin") or [] + for cacheitem in cache_list: + self.fhdhr.db.delete_cacheitem_value(cacheitem, "offline_cache", "origin") + self.fhdhr.logger.info('Removing cache: ' + str(cacheitem)) + self.fhdhr.db.delete_cacheitem_value("cache_list", "offline_cache", "origin")