diff options
author | Tzafrir Cohen <tzafrir@cohens.org.il> | 2017-11-24 16:52:02 +0200 |
---|---|---|
committer | Tzafrir Cohen <tzafrir@cohens.org.il> | 2017-11-24 16:52:23 +0200 |
commit | 6d74c223bc89a861dc1cdb071a7f1a9b07814c08 (patch) | |
tree | 741b51e04fc52023c4bd6d8f4efc178872fde1a9 | |
parent | 467edc54e0cff2bcb8d21c94c2115d170fd0f1c6 (diff) |
cache top program pages
It seems that caching the downloaded pages is not useful enough. It only
cuts the time of the programs page from 42 seconds to 25 seconds. So
let's just cache the reuslting entries.
-rw-r--r-- | default.py | 30 |
1 files changed, 22 insertions, 8 deletions
@@ -67,6 +67,15 @@ class Page: .format(self.base_url, self.addon_handle, self.mode, self.content_type) + def build_page(self, page_list, isFolder=True): + """ Creates a complete page from a list of items (title, url_data) """ + for item in page_list: + title, url_data = item + url = self.build_url(url_data) + li = xbmcgui.ListItem(title) + self.add_directory_item(url=url, listitem=li, isFolder=isFolder) + self.end_directory() + def read_url(url): cache_id = PLUGIN_NAME + '.url.' + url @@ -95,23 +104,28 @@ def get_show_title(base_url, path): def video_top_menu(page, name): """ Display a menu of all the TV shows """ + trace("Show top menu for " + name) + cache_id = PLUGIN_NAME + '.toppage.' + name + cached_items = SiteCache.get(cache_id) + if cached_items: + page.build_page(cached_items) + return + + trace("Show top menu for " + name + ": no cached copy") tvshows_url = KAN_URL + "/video/{}.aspx".format(name) main_page = read_url(tvshows_url) parsed = BeautifulSoup(main_page, "html.parser") anchors = parsed.find_all('a', class_="program_category_link w-inline-block") trace("got anchors: " + str(len(anchors))) + items = [] for a in anchors: path = a.get('href') show_id = re.sub('.*=', '', path) - #trace("Checking link to " + path) title = get_show_title(KAN_URL, path) - url = page.build_url({'mode': 'show', 'id': show_id}) - trace("Item: URL: {}, title: {}.".format(url, title.encode('utf8'))) - li = xbmcgui.ListItem(title) - page.add_directory_item(url=url, listitem=li, isFolder=True, - totalItems=len(anchors)) - page.end_directory() + items.append((title, {'mode': 'show', 'id': show_id})) + page.build_page(items) + SiteCache.set(cache_id, items, expiration=datetime.timedelta(days=1)) def show_menu(page): @@ -130,7 +144,6 @@ def show_menu(page): title = titles[0].string iframe = item.find_all('iframe')[0] youtube_url = iframe['src'] - #trace("Youtube URL: {}.".format(youtube_url)) youtube_id = re.sub('.*/embed/([0-9A-Za-z]+)(\?.*)?', r'\1', youtube_url) trace("Add link for ID {} ({}).".format(youtube_id, title.encode('utf-8'))) url = 'plugin://plugin.video.youtube/play/?video_id={}'.format(youtube_id) @@ -173,6 +186,7 @@ def main(): page.placeholder_folder(name) else: trace("No handler for mode '{}'".format(mode)) + trace("Done showing page") if __name__ == '__main__': |