# -*- coding: UTF-8 -*- """ Kan Video plugin """ from bs4 import BeautifulSoup import re import sys import urllib #import urllib2 import requests import urlparse import xbmc import xbmcgui import xbmcplugin KAN_URL = 'http://www.kan.org.il' USER_AGENT = 'Kodi' # I'm optimistic 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/1.0'} response = requests.get(url, headers=headers) if response.status_code != 200: raise IOError("Invalid URL {}".format(url)) return response.content 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(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, "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') 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(): 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'תוכניות טלוויזיה') page.add_directory_item(url=url, listitem=li, isFolder=True) url = page.build_url({'mode': 'folder', 'foldername': 'net-shows'}) li = xbmcgui.ListItem(u'תוכניות רשת') page.add_directory_item(url=url, listitem=li, isFolder=True) url = page.build_url({'mode': 'folder', 'foldername': 'new-items'}) li = xbmcgui.ListItem(u'קטעים חדשים') page.add_directory_item(url=url, listitem=li, isFolder=True) page.end_directory() elif page.mode[0] == 'folder': foldername = page.args['foldername'][0] if foldername == 'tv-shows': tvshows_menu(page, foldername) else: page.placeholder_folder(foldername) if __name__ == '__main__': main()