From 2efc1688746dba2ac3ecc22461fe6d7180e7c554 Mon Sep 17 00:00:00 2001 From: Tzafrir Cohen Date: Tue, 7 Nov 2017 22:28:46 +0200 Subject: List all shows --- addon.py | 104 +++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 68 insertions(+), 36 deletions(-) diff --git a/addon.py b/addon.py index 17b316e..b360573 100644 --- a/addon.py +++ b/addon.py @@ -2,6 +2,7 @@ """ Kan Video plugin """ from bs4 import BeautifulSoup +import re import sys import urllib #import urllib2 @@ -16,70 +17,101 @@ KAN_URL = 'http://www.kan.org.il' USER_AGENT = 'Kodi' # I'm optimistic -def build_url(base_url, query): - return base_url + '?' + urllib.urlencode(query) +def trace(msg): + xbmc.log(msg="Tzafrir: " + msg, level=xbmc.LOGNOTICE) + + +class Page: + def __init__(self, argv): + self.base_url = argv[0] + self.addon_handle = int(argv[1]) + self.args = urlparse.parse_qs(argv[2][1:]) + self.mode = self.args.get('mode', None) + + def build_url(self, query): + return self.base_url + '?' + urllib.urlencode(query) + + def add_directory_item(self, **kwargs): + xbmcplugin.addDirectoryItem(handle=self.addon_handle, **kwargs) + + def end_directory(self): + xbmcplugin.endOfDirectory(self.addon_handle) + + def placeholder_folder(self, foldername): + url = 'http://localhost/some_video.mkv' + li = xbmcgui.ListItem(foldername + 'Not Implemented', + iconImage='DefaultVideo.png') + self.add_directory_item(url=url, listitem=li) + self.end_directory() + + def __str__(self): + return "[base_url: {}, addon_handle: {}, mode: {}]".format( + self.base_url, self.addon_handle, self.mode) def read_url(url): - headers = {'user-agent': 'Kodi/plugin.video.kan'} + 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)) return response.content -def placeholder_folder(foldername): - url = 'http://localhost/some_video.mkv' - li = xbmcgui.ListItem(foldername + 'Not Implemented', - iconImage='DefaultVideo.png') - xbmcplugin.addDirectoryItem(handle=addon_handle, url=url, listitem=li) - xbmcplugin.endOfDirectory(addon_handle) +def get_show_title(base_url, path): + url = base_url + '/' + path + page = read_url(url) + parsed = BeautifulSoup(page, "html.parser") + title = parsed.title.string + title = re.sub('[|-].*', '', title) + return title -def tvshows_menu(): - tvshows_url = 'http://www.kan.org.il/video/programs.aspx' + +def tvshows_menu(page, folder_name): + base_url = 'http://www.kan.org.il' + tvshows_url = base_url + '/video/programs.aspx' main_page = read_url(tvshows_url) - parsed = BeautifulSoup(main_page, "lxml") + parsed = BeautifulSoup(main_page, "html.parser") anchors = parsed.find_all('a', class_="program_category_link w-inline-block") + trace("got anchors: " + str(len(anchors))) for a in anchors: path = a.get('href') - li = xbmcgui.ListItem(foldername + 'Show' + path) - xbmcplugin.addDirectoryItem(handle=addon_handle, listitem=li) - xbmcplugin.endOfDirectory(addon_handle) + show_id = re.sub('.*=', '', path) + show_folder_name = folder_name + '-' + show_id + trace("Checking link to " + path) + title = get_show_title(base_url, path) + url = page.build_url({'mode': 'folder', 'foldername': show_folder_name}) + li = xbmcgui.ListItem(title) + page.add_directory_item(url=url, listitem=li) + page.end_directory() def main(): - base_url = sys.argv[0] - addon_handle = int(sys.argv[1]) - args = urlparse.parse_qs(sys.argv[2][1:]) - mode = args.get('mode', None) - - xbmc.log("Tzafrir: base_url: {}, addon_handle: {}, mode: {}".format(base_url, addon_handle, mode), xbmc.LOGINFO) - if mode is None: - url = build_url(base_url, {'mode': 'folder', 'foldername': 'tv-shows'}) + page = Page(sys.argv) + + trace("Tzafrir: {}".format(page)) + if page.mode is None: + url = page.build_url({'mode': 'folder', 'foldername': 'tv-shows'}) li = xbmcgui.ListItem(u'תוכניות טלוויזיה') - xbmcplugin.addDirectoryItem(handle=addon_handle, url=url, - listitem=li, isFolder=True) + page.add_directory_item(url=url, listitem=li, isFolder=True) - url = build_url(base_url, {'mode': 'folder', 'foldername': 'net-shows'}) + url = page.build_url({'mode': 'folder', 'foldername': 'net-shows'}) li = xbmcgui.ListItem(u'תוכניות רשת') - xbmcplugin.addDirectoryItem(handle=addon_handle, url=url, - listitem=li, isFolder=True) + page.add_directory_item(url=url, listitem=li, isFolder=True) - url = build_url(base_url, {'mode': 'folder', 'foldername': 'new-items'}) + url = page.build_url({'mode': 'folder', 'foldername': 'new-items'}) li = xbmcgui.ListItem(u'קטעים חדשים') - xbmcplugin.addDirectoryItem(handle=addon_handle, url=url, - listitem=li, isFolder=True) + page.add_directory_item(url=url, listitem=li, isFolder=True) - xbmcplugin.endOfDirectory(addon_handle) + page.end_directory() - elif mode[0] == 'folder': - foldername = args['foldername'][0] + elif page.mode[0] == 'folder': + foldername = page.args['foldername'][0] if foldername == 'tv-shows': - tvshows_menu() + tvshows_menu(page, foldername) else: - placeholder_folder(foldername) + page.placeholder_folder(foldername) if __name__ == '__main__': -- cgit v1.2.3