From 670052a65c2769cd8bb442ae66cca2832c89fd0a Mon Sep 17 00:00:00 2001 From: Tzafrir Cohen Date: Wed, 22 Nov 2017 23:36:15 +0200 Subject: basic caching of downloaded pages Use the simplecache addon to cache downloaded pages. --- addon.xml | 5 +++-- default.py | 19 +++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/addon.xml b/addon.xml index ba494ce..5bbbc8f 100644 --- a/addon.xml +++ b/addon.xml @@ -1,10 +1,11 @@ - + + - video + audio video all diff --git a/default.py b/default.py index b595dd1..80ff282 100644 --- a/default.py +++ b/default.py @@ -7,11 +7,13 @@ # License-Filename: LICENSE from bs4 import BeautifulSoup +import datetime import re import sys import urllib #import urllib2 import requests +import simplecache import urlparse import xbmc import xbmcgui @@ -20,7 +22,9 @@ import xbmcplugin KAN_URL = 'http://www.kan.org.il' USER_AGENT = 'Kodi' # I'm optimistic +PLUGIN_NAME = "plugin.video.kan" # FIXME: a better way to get this? +SiteCache = simplecache.SimpleCache() # FIXME: avoid this global def trace(msg): xbmc.log(msg="Tzafrir: " + msg, level=xbmc.LOGNOTICE) @@ -32,6 +36,7 @@ class Page: self.addon_handle = int(argv[1]) self.args = urlparse.parse_qs(argv[2][1:]) self.mode = self.args.get('mode', None) + self.content_type = self.args.get('content_type', None) def build_url(self, query): #query['addon_handle'] = self.addon_handle @@ -58,15 +63,24 @@ class Page: self.add_directory_item(url=url, listitem=li, isFolder=True) def __str__(self): - return "[base_url: {}, addon_handle: {}, mode: {}]".format( - self.base_url, self.addon_handle, self.mode) + return "[base_url: {}, addon_handle: {}, mode: {}, content_type: {}]" \ + .format(self.base_url, self.addon_handle, self.mode, + self.content_type) def read_url(url): + cache_id = PLUGIN_NAME + '.url.' + url + cached_read = SiteCache.get(cache_id) + if cached_read: + return cached_read + headers = {'user-agent': 'Kodi/plugin.video.kan/1.0'} response = requests.get(url, headers=headers) if response.status_code != 200: raise IOError("Invalid URL {}".format(url)) + + SiteCache.set(cache_id, response.content, + expiration=datetime.timedelta(days=1)) return response.content @@ -140,6 +154,7 @@ def main_page(page): def main(): page = Page(sys.argv) + trace(' | '.join(sys.argv)) trace("{}".format(page)) if page.mode is not None: mode = page.mode[0] -- cgit v1.2.3