def __init__(self): # Get the command line arguments # Get the plugin url in plugin:// notation self.plugin_url = sys.argv[0] # Get the plugin handle as an integer number self.plugin_handle = int(sys.argv[1]) # Get plugin settings self.IS_PREMIUM_MEMBER = SETTINGS.getSetting('is-premium-member') xbmc.log("[ADDON] %s v%s (%s) debug mode, %s = %s, %s = %s" % ( ADDON, VERSION, DATE, "ARGV", repr(sys.argv), "File", str(__file__)), xbmc.LOGDEBUG) # Parse parameters self.plugin_category = urlparse.parse_qs(urlparse.urlparse(sys.argv[2]).query)['plugin_category'][0] self.video_page_url = urlparse.parse_qs(urlparse.urlparse(sys.argv[2]).query)['video_page_url'][0] # Get the title. self.title = urlparse.parse_qs(urlparse.urlparse(sys.argv[2]).query)['title'][0] self.title = str(self.title) xbmc.log("[ADDON] %s v%s (%s) debug mode, %s = %s" % ( ADDON, VERSION, DATE, "self.video_page_url", str(self.video_page_url)), xbmc.LOGDEBUG) # # Play video # self.playVideo()
def __init__(self): # Get the command line arguments # Get the plugin url in plugin:// notation self.plugin_url = sys.argv[0] # Get the plugin handle as an integer number self.plugin_handle = int(sys.argv[1]) # Get plugin settings self.BASE_URL = SETTINGS.getSetting('base-url') if self.BASE_URL == '': self.BASE_URL = BASE_URL_GAMEKINGS_TV else: if self.BASE_URL.endswith("/"): pass else: # Add a slash at the end self.BASE_URL = self.BASE_URL + "/" xbmc.log("[ADDON] %s v%s (%s) debug mode, %s = %s, %s = %s" % ( ADDON, VERSION, DATE, "ARGV", repr(sys.argv), "File", str(__file__)), xbmc.LOGDEBUG) xbmc.log("[ADDON] %s v%s (%s) debug mode, %s = %s" % ( ADDON, VERSION, DATE, "self.BASE_URL", str(self.BASE_URL)), xbmc.LOGDEBUG) # Parse parameters self.plugin_category = urlparse.parse_qs(urlparse.urlparse(sys.argv[2]).query)['plugin_category'][0] self.video_list_page_url = urlparse.parse_qs(urlparse.urlparse(sys.argv[2]).query)['url'][0] self.next_page_possible = urlparse.parse_qs(urlparse.urlparse(sys.argv[2]).query)['next_page_possible'][0] xbmc.log("[ADDON] %s v%s (%s) debug mode, %s = %s" % ( ADDON, VERSION, DATE, "self.video_list_page_url", str(self.video_list_page_url)), xbmc.LOGDEBUG) if self.next_page_possible == 'True': # Determine current item number, next item number, next_url # f.e. http://www.gamekings.tv/category/videos/page/001/ pos_of_page = self.video_list_page_url.rfind('/page/') if pos_of_page >= 0: page_number_str = str( self.video_list_page_url[pos_of_page + len('/page/'):pos_of_page + len('/page/') + len('000')]) page_number = int(page_number_str) page_number_next = page_number + 1 if page_number_next >= 100: page_number_next_str = str(page_number_next) elif page_number_next >= 10: page_number_next_str = '0' + str(page_number_next) else: page_number_next_str = '00' + str(page_number_next) self.next_url = str(self.video_list_page_url).replace(page_number_str, page_number_next_str) xbmc.log("[ADDON] %s v%s (%s) debug mode, %s = %s" % ( ADDON, VERSION, DATE, "self.next_url", str(urllib.unquote_plus(self.next_url))), xbmc.LOGDEBUG) # # Get the videos # self.getVideos()
def playVideo(self): # # Init # video_url = "" dialog_wait = xbmcgui.DialogProgress() # # Get current list item details... # # title = convertToUnicodeString(xbmc.getInfoLabel("list_item.Title")) thumbnail_url = convertToUnicodeString(xbmc.getInfoImage("list_item.Thumb")) # studio = convertToUnicodeString(xbmc.getInfoLabel("list_item.Studio")) # plot = convertToUnicodeString(xbmc.getInfoLabel("list_item.Plot")) # genre = convertToUnicodeString(xbmc.getInfoLabel("list_item.Genre")) try: # requests is sooooo nice, respect! session = requests.Session() # get the page that contains the video response = session.get(self.video_page_url) html_source = response.text html_source = convertToUnicodeString(html_source) # is it a premium-only video? (f.e. https://www.gamekings.tv/premium/110853/) # <div class="video__premiumonly"> # <div class="video__premiumonlywrapper"> # <h3 class="video__notice">Premium <span>Content</span></h3> # <a href="#" class="field__button js-login">Log in</a> # <span class="video__or-text">of</span> # <a href="https://www.gamekings.tv/get-premium/" class="field__button field__button--premium">Word Premium</a> # </div> # </div> if str(html_source).find('premiumonly') >= 0: if self.IS_PREMIUM_MEMBER: try: # we need a NEW (!!!) session session = requests.Session() # # get the login-page # response = session.get(LOGINURL) # html_source = reply.text # html_source = convertToUnicodeString(html_source) # # log("login-page", html_source) # # the login page should contain something like this # <input type="text" name="log" id="user_login" ... # ... # <input type="password" name="pwd" id="user_pass" ... payload = {'log': SETTINGS.getSetting('username'), 'pwd': SETTINGS.getSetting('password')} # post the LOGIN-page with the LOGIN-data, to actually login this session response = session.post(LOGIN_URL, data=payload) html_source = response.text html_source = convertToUnicodeString(html_source) # check that the login was technically ok (status_code 200). # This in itself does NOT mean that the username/password were correct. if response.status_code == 200: # check that 'login_error' is in the response. If that's the case, the login was not ok # and the username and password in settings are not ok. if str(html_source).find('login_error') >= 0: xbmcgui.Dialog().ok(LANGUAGE(30000), LANGUAGE(30601), LANGUAGE(30602), LANGUAGE(30603)) sys.exit(1) else: # dialog_wait.create("Login Successfull", "Currently looking for video") log("self.video_page_url", "login was succesfull!!") # let's try getting the page again after a login, hopefully it contains a link to # the video now response = session.get(self.video_page_url) log("retrieved page", self.video_page_url) else: # Something went wrong with logging in xbmcgui.Dialog().ok(LANGUAGE(30000), LANGUAGE(30604) % (str(response.status_code))) sys.exit(1) except urllib.error.HTTPError as error: log("HTTPerror1", error) xbmcgui.Dialog().ok(LANGUAGE(30000), LANGUAGE(30606) % (str(error))) sys.exit(1) except: exception = sys.exc_info()[0] log("Exception1", exception) sys.exit(1) # This is a premium video and the Premium-membership-switch in the settings is off else: xbmcgui.Dialog().ok(LANGUAGE(30000), LANGUAGE(30605)) sys.exit(1) except urllib.error.HTTPError as error: log("HTTPerror2", error) xbmcgui.Dialog().ok(LANGUAGE(30000), LANGUAGE(30606) % (str(error))) sys.exit(1) except: exception = sys.exc_info()[0] log("Exception2", exception) sys.exit(1) html_source = response.text html_source = convertToUnicodeString(html_source) # log("html_source", html_source) # Get the video url # <div class="content content--page content--bglight content--blue"> # <div class="video"> # <div id='videoplayer'></div> # <script type="text/javascript"> # jwplayer('videoplayer').setup({ # file: 'https://player.vimeo.com/external/166503498.hd.mp4?s=c44264eced6082c0789371cb5209af96bc44035b', # image: 'https://www.gamekings.tv/wp-content/uploads/20160513_gk1702_splash.jpg', # title: 'Gamekings S17E02: De Synergie Aflevering', # width: '100%', # aspectratio: '16:9', # skin: '', # primary: 'html5', # autostart: 'true', # startparam: 'start', # ... no_url_found = False have_valid_url = True start_pos_video_url = html_source.find("http://player.vimeo.com/external") if start_pos_video_url == -1: start_pos_video_url = html_source.find("https://player.vimeo.com/external") if start_pos_video_url == -1: start_pos_video_url = html_source.find("http://player.vimeo.com/video") if start_pos_video_url == -1: start_pos_video_url = html_source.find("https://player.vimeo.com/video") if start_pos_video_url == -1: start_pos_video_url = html_source.find("http://www.youtube.com/") if start_pos_video_url == -1: start_pos_video_url = html_source.find("https://www.youtube.com/") if start_pos_video_url == -1: no_url_found = True have_valid_url = False log("start_pos_video_url", start_pos_video_url) #log("html_source[start_pos_video_url:]", html_source[start_pos_video_url:]) # Try to make a valid video url if have_valid_url: # Let's only use the video_url part html_source_split = str(html_source[start_pos_video_url:]).split() video_url = html_source_split[0] log("video_url after split", video_url) if video_url.find("target=") >= 0: no_url_found = True have_valid_url = False video_url = "" elif video_url.find("www.youtube.com/channel/") >= 0: no_url_found = True have_valid_url = False video_url = "" elif video_url.find("player.vimeo.com/api/player.js") >= 0: no_url_found = True have_valid_url = False video_url = "" elif video_url.find("www.youtube.com/user/Gamekingsextra") >= 0: no_url_found = True have_valid_url = False video_url = "" log("video_url", video_url) # Play video if have_valid_url: # regular gamekings video's on vimeo look like this: https://player.vimeo.com/external/166503498.hd.mp4?s=c44264eced6082c0789371cb5209af96bc44035b if video_url.find("player.vimeo.com/external/") > 0: # no need to do anything with the vimeo addon, we can use the video_url directly pass # premium video's on vimeo look like this: https://player.vimeo.com/video/190106340?title=0&autoplay=1&portrait=0&badge=0&color=C7152F if video_url.find("player.vimeo.com/video/") > 0: # no need to do anything with the vimeo addon, we can use the video_url directly pass elif video_url.find("youtube") > 0: youtube_id = str(video_url) youtube_id = youtube_id.replace("http://www.youtube.com/embed/", "") youtube_id = youtube_id.replace("https://www.youtube.com/embed/", "") youtube_id = youtube_id.replace("http://www.youtube.com/watch?v=", "") youtube_id = youtube_id.replace("https://www.youtube.com/watch?v=", "") youtube_id = youtube_id.replace("http://www.youtube.com/watch", "") youtube_id = youtube_id.replace("https://www.youtube.com/watch", "") youtube_id = youtube_id.replace("http://www.youtube.com/", "") youtube_id = youtube_id.replace("https://www.youtube.com/", "") youtube_id = youtube_id[0:youtube_id.find("?")] log("youtube_id", youtube_id) video_url = 'plugin://plugin.video.youtube/play/?video_id=%s' % youtube_id log("final video_url", video_url) list_item = xbmcgui.ListItem(path=video_url) xbmcplugin.setResolvedUrl(self.plugin_handle, True, list_item) # # Check if it's a twitch live stream # elif str(html_source).find(TWITCH_URL_GAMEKINGS_TV) > 0: #example of a live stream: video_url = 'plugin://plugin.video.twitch/?channel_id=57330659&mode=play;' xbmcgui.Dialog().ok(LANGUAGE(30000), LANGUAGE(30611)) # # Alert user # elif no_url_found: xbmcgui.Dialog().ok(LANGUAGE(30000), LANGUAGE(30505))
def playVideo(self): # # Init # video_url = "" # # Get current list item details # # title = unicode(xbmc.getInfoLabel("listitem.Title"), "utf-8") thumbnail = xbmc.getInfoImage("list_item.Thumb") # studio = unicode(xbmc.getInfoLabel("list_item.Studio"), "utf-8") plot = unicode(xbmc.getInfoLabel("list_item.Plot"), "utf-8") genre = unicode(xbmc.getInfoLabel("list_item.Genre"), "utf-8") # # Show wait dialog while parsing data # dialog_wait = xbmcgui.DialogProgress() dialog_wait.create(LANGUAGE(30504), self.title) # wait 1 second xbmc.sleep(1000) reply = '' session = '' try: # requests is sooooo nice, respect! session = requests.Session() # get the page that contains the video reply = session.get(self.video_page_url) # is it a premium-only video? (f.e. http://www.gamekings.tv/premium/110853/) # <div class="video__premiumonly"> # <div class="video__premiumonlywrapper"> # <h3 class="video__notice">Premium <span>Content</span></h3> # <a href="#" class="field__button js-login">Log in</a> # <span class="video__or-text">of</span> # <a href="http://www.gamekings.tv/get-premium/" class="field__button field__button--premium">Word Premium</a> # </div> # </div> if str(reply.text).find('premiumonly') >= 0: if self.IS_PREMIUM_MEMBER == 'true': try: # we need a NEW (!!!) session session = requests.Session() # # get the login-page # reply = session.get(LOGINURL) # html_source = reply.text # xbmc.log("[ADDON] %s v%s (%s) debug mode, %s = %s" % ( # ADDON, VERSION, DATE, "login-page", str(html_source)), xbmc.LOGDEBUG) # # the login should contain something like this # <input type="text" name="log" id="user_login" ... # ... # <input type="password" name="pwd" id="user_pass" ... payload = {'log': SETTINGS.getSetting('username'), 'pwd': SETTINGS.getSetting('password')} # post the LOGIN-page with the LOGIN-data, to actually login this session reply = session.post(LOGINURL, data=payload) html_source = reply.text # check that the login was technically ok (status_code 200). # This in itself does NOT mean that the username/password were correct. if reply.status_code == 200: # check that 'login_error' is in the response. If that's the case, the login was not ok # and the username and password in settings are not ok. if str(html_source).find('login_error') >= 0: try: dialog_wait.close() del dialog_wait except: pass xbmcgui.Dialog().ok(LANGUAGE(30000), LANGUAGE(30601), LANGUAGE(30602), LANGUAGE(30603)) sys.exit(1) else: dialog_wait.create("Login Success", "Currently looking for videos in '%s'" % self.title) xbmc.log("[ADDON] %s v%s (%s) debug mode, %s = %s" % ( ADDON, VERSION, DATE, "self.video_page_url", str("Login was succesfull!!")), xbmc.LOGDEBUG) # let's try getting the page again after a login, hopefully it contains a link to # the video now reply = session.get(self.video_page_url) xbmc.log("[ADDON] %s v%s (%s) debug mode, Loaded %s" % ( ADDON, VERSION, DATE, str(self.video_page_url)), xbmc.LOGDEBUG) else: # Something went wrong with logging in try: dialog_wait.close() del dialog_wait except: pass xbmcgui.Dialog().ok(LANGUAGE(30000), LANGUAGE(30604) % (str(reply.status_code))) sys.exit(1) except urllib2.HTTPError, error: xbmc.log("[ADDON] %s v%s (%s) debug mode, %s = %s" % ( ADDON, VERSION, DATE, "HTTPError", str(error)), xbmc.LOGDEBUG) try: dialog_wait.close() del dialog_wait except: pass xbmcgui.Dialog().ok(LANGUAGE(30000), LANGUAGE(30606) % (str(error))) sys.exit(1) except: exception = sys.exc_info()[0] xbmc.log("[ADDON] %s v%s (%s) debug mode, %s = %s" % ( ADDON, VERSION, DATE, "Exception1:", str(exception)), xbmc.LOGDEBUG) try: dialog_wait.close() del dialog_wait except: pass sys.exit(1)
def __init__(self): # Get the command line arguments # Get the plugin url in plugin:// notation self.plugin_url = sys.argv[0] # Get the plugin handle as an integer number self.plugin_handle = int(sys.argv[1]) # Get plugin settings self.BASE_URL = SETTINGS.getSetting('base-url') if self.BASE_URL == '': self.BASE_URL = BASE_URL_GAMEKINGS_TV else: if self.BASE_URL.endswith("/"): pass else: # Add a slash at the end self.BASE_URL = self.BASE_URL + "/" # # Videos # parameters = {"action": "list", "plugin_category": LANGUAGE(30000), "url": self.BASE_URL + "category/videos/page/001/", "next_page_possible": "True"} url = self.plugin_url + '?' + urllib.urlencode(parameters) list_item = xbmcgui.ListItem(LANGUAGE(30000), iconImage="DefaultFolder.png") is_folder = True list_item.setArt({'fanart': os.path.join(IMAGES_PATH, 'fanart-blur.jpg')}) list_item.setProperty('IsPlayable', 'false') xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url=url, listitem=list_item, isFolder=is_folder) # # Afleveringen # parameters = {"action": "list", "plugin_category": LANGUAGE(30001), "url": self.BASE_URL + "page/001/?cat=3&s=gamekings+s", "next_page_possible": "True"} url = self.plugin_url + '?' + urllib.urlencode(parameters) list_item = xbmcgui.ListItem(LANGUAGE(30001), iconImage="DefaultFolder.png") is_folder = True list_item.setArt({'fanart': os.path.join(IMAGES_PATH, 'fanart-blur.jpg')}) list_item.setProperty('IsPlayable', 'false') xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url=url, listitem=list_item, isFolder=is_folder) # # Gamekings Extra # parameters = {"action": "list", "plugin_category": LANGUAGE(30002), "url": self.BASE_URL + "?s=gamekings+extra", "next_page_possible": "False"} url = self.plugin_url + '?' + urllib.urlencode(parameters) list_item = xbmcgui.ListItem(LANGUAGE(30002), iconImage="DefaultFolder.png") is_folder = True list_item.setArt({'fanart': os.path.join(IMAGES_PATH, 'fanart-blur.jpg')}) list_item.setProperty('IsPlayable', 'false') xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url=url, listitem=list_item, isFolder=is_folder) # # Trailers # parameters = {"action": "list", "plugin_category": LANGUAGE(30003), "url": self.BASE_URL + "?s=trailer", "next_page_possible": "False"} url = self.plugin_url + '?' + urllib.urlencode(parameters) list_item = xbmcgui.ListItem(LANGUAGE(30003), iconImage="DefaultFolder.png") is_folder = True list_item.setArt({'fanart': os.path.join(IMAGES_PATH, 'fanart-blur.jpg')}) list_item.setProperty('IsPlayable', 'false') xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url=url, listitem=list_item, isFolder=is_folder) # # Search in Videos # parameters = {"action": "search", "plugin_category": LANGUAGE(30004), "url": self.BASE_URL + "?cat=3&s=%s", "next_page_possible": "False"} url = self.plugin_url + '?' + urllib.urlencode(parameters) list_item = xbmcgui.ListItem(LANGUAGE(30004), iconImage="DefaultFolder.png") is_folder = True list_item.setArt({'fanart': os.path.join(IMAGES_PATH, 'fanart-blur.jpg')}) list_item.setProperty('IsPlayable', 'false') xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url=url, listitem=list_item, isFolder=is_folder) # Disable sorting xbmcplugin.addSortMethod(handle=self.plugin_handle, sortMethod=xbmcplugin.SORT_METHOD_NONE) # Finish creating a virtual folder. xbmcplugin.endOfDirectory(self.plugin_handle)