summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir@cohens.org.il>2017-11-07 22:28:46 +0200
committerTzafrir Cohen <tzafrir@cohens.org.il>2017-11-13 00:53:48 +0200
commit2efc1688746dba2ac3ecc22461fe6d7180e7c554 (patch)
treee055698237750b352621dc8f2757e6b0bfd02268
parent7a882250a761d869a53a80361dc72afd356759e6 (diff)
List all shows
-rw-r--r--addon.py104
1 files 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__':