summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir@cohens.org.il>2017-11-22 23:36:15 +0200
committerTzafrir Cohen <tzafrir@cohens.org.il>2017-11-23 00:20:59 +0200
commit670052a65c2769cd8bb442ae66cca2832c89fd0a (patch)
treeb07073badc4cc4d102b37a378f20f5647eb31fee
parent984e9ff9abdf11fb1da8a2d6b5a122ed29b9c7d6 (diff)
basic caching of downloaded pages
Use the simplecache addon to cache downloaded pages.
-rw-r--r--addon.xml5
-rw-r--r--default.py19
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 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.video.kan" name="Kan" version="0.0.1" provider-name="tzafrir">
+<addon id="plugin.video.kan" name="Kan" version="0.0.2" provider-name="tzafrir">
<requires>
<import addon="xbmc.python" version="2.14.0"/>
+ <import addon="script.module.simplecache" version="1.0.0" />
</requires>
<extension point="xbmc.python.pluginsource" library="default.py">
- <provides>video</provides>
+ <provides>audio video</provides>
</extension>
<extension point="xbmc.addon.metadata">
<platform>all</platform>
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]