diff options
author | Tzafrir Cohen <tzafrir@cohens.org.il> | 2017-11-22 23:36:15 +0200 |
---|---|---|
committer | Tzafrir Cohen <tzafrir@cohens.org.il> | 2017-11-23 00:20:59 +0200 |
commit | 670052a65c2769cd8bb442ae66cca2832c89fd0a (patch) | |
tree | b07073badc4cc4d102b37a378f20f5647eb31fee /default.py | |
parent | 984e9ff9abdf11fb1da8a2d6b5a122ed29b9c7d6 (diff) |
basic caching of downloaded pages
Use the simplecache addon to cache downloaded pages.
Diffstat (limited to 'default.py')
-rw-r--r-- | default.py | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -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] |