summaryrefslogtreecommitdiff
path: root/addon.py
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir@cohens.org.il>2017-11-13 00:43:59 +0200
committerTzafrir Cohen <tzafrir@cohens.org.il>2017-11-13 00:54:03 +0200
commit8c6c8a6839719b9f603138d6e225d753f1cc49ff (patch)
treeb4a441a0db5faeaaed8718408d0d70f9c152d088 /addon.py
parent1de87c44e3bbfe671d03e67403c56c67dbcbb00f (diff)
Rename addon.py -> default.py
Diffstat (limited to 'addon.py')
-rw-r--r--addon.py161
1 files changed, 0 insertions, 161 deletions
diff --git a/addon.py b/addon.py
deleted file mode 100644
index b595dd1..0000000
--- a/addon.py
+++ /dev/null
@@ -1,161 +0,0 @@
-# -*- coding: UTF-8 -*-
-""" Kan Video plugin """
-
-# Copyright (c) 2017 Tzafrir Cohen
-# SPDX-License-Identifier: GPL-2.0+
-#
-# License-Filename: LICENSE
-
-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):
- #query['addon_handle'] = self.addon_handle
- 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):
- """ A folder with a single dummy item """
- 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 placeholder_item(self, name, label):
- """ An item that calls a placeholder folder """
- url = self.build_url({'mode': 'placeholder', 'name': name})
- li = xbmcgui.ListItem(label)
- 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)
-
-
-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):
- """ Display a menu of all the TV shows """
- tvshows_url = KAN_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)
- #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()
-
-
-def show_menu(page):
- """ Display a menu of items in a specific show """
- show_id = page.args['id'][0]
- show_url = KAN_URL + '/Program/?catId=' + show_id
- trace("URL for show {}: {}".format(show_id, show_url))
-
- show_page = read_url(show_url)
- parsed = BeautifulSoup(show_page, "html.parser")
- items = parsed.find_all('li',
- class_="program_list_item w-clearfix")
- trace("got items: " + str(len(items)))
- for item in items:
- titles = item.find_all('h2')
- 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)
- li = xbmcgui.ListItem(title)
- li.setProperty('IsPlayable','true')
- page.add_directory_item(url=url, listitem=li, totalItems=len(items))
- page.end_directory()
-
-
-def main_page(page):
- url = page.build_url({'mode': 'shows', 'name': 'tv-shows'})
- li = xbmcgui.ListItem(u'תוכניות טלוויזיה')
- page.add_directory_item(url=url, listitem=li, isFolder=True)
-
- page.placeholder_item('net-shows', u'תוכניות רשת')
- page.placeholder_item('new-items', u'קטעים חדשים')
-
- page.end_directory()
-
-
-def main():
- page = Page(sys.argv)
-
- trace("{}".format(page))
- if page.mode is not None:
- mode = page.mode[0]
-
- if page.mode is None:
- main_page(page)
- elif mode == 'shows':
- tvshows_menu(page)
- elif mode == 'show':
- show_menu(page)
- elif mode == 'placeholder':
- name = page.args['name'][0]
- page.placeholder_folder(name)
- else:
- trace("No handler for mode '{}'".format(mode))
-
-
-if __name__ == '__main__':
- main()