def _get_setting(self, setting_id, value_for_none=None): """ Retrieves channel specific settings. Just to prevent us from importing AddonSettings in all channels. @param setting_id: @return: :param str setting_id: the channels specific setting :param str value_for_none: What value should we interpret as None? :return: The settings value from the Add-on using the Kodi settings API. :rtype: str """ setting = AddonSettings.get_channel_setting(self, setting_id, value_for_none) return setting
def __init__(self, channel_info): """Initialisation of the class. Arguments: channel_info: ChannelInfo - The channel info object to base this channel on. All class variables should be instantiated here and this method should not be overridden by any derived classes. """ chn_class.Channel.__init__(self, channel_info) # ==== Actual channel setup STARTS here and should be overwritten from derived classes ===== self.mainListUri = "#programs" self.programPageSize = 100 self.videoPageSize = 100 self.swfUrl = "http://player.dplay.se/4.0.6/swf/AkamaiAdvancedFlowplayerProvider_v3.8.swf" self.subtitleKey = "subtitles_{0}_srt".format(self.language) self.channelSlugs = () self.liveUrl = None self.recentUrl = None self.primaryChannelId = None self.baseUrlApi = "disco-api.dplay.{0}".format(self.language) if self.channelCode == "tv5json": self.noImage = "tv5seimage.png" self.baseUrl = "http://www.dplay.se/api/v2/ajax" # No live stream: self.liveUrl = "https://secure.dplay.se/secure/api/v2/user/authorization/stream/132040" self.primaryChannelId = 21 elif self.channelCode == "tv9json": self.noImage = "tv9seimage.png" self.baseUrl = "http://www.dplay.se/api/v2/ajax" # No live stream: self.liveUrl = "https://secure.dplay.se/secure/api/v2/user/authorization/stream/132043" self.primaryChannelId = 26 elif self.channelCode == "tv11json": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.se/api/v2/ajax" # No live stream: self.liveUrl = "https://secure.dplay.se/secure/api/v2/user/authorization/stream/132039" self.primaryChannelId = 22 elif self.channelCode == "dplayse": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.se/api/v2/ajax" elif self.channelCode == "dplayno": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" elif self.channelCode == "tlcnorge": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" self.primaryChannelId = 15 elif self.channelCode == "tvnorge": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" self.primaryChannelId = 28 elif self.channelCode == "femnorge": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" self.primaryChannelId = 29 elif self.channelCode == "maxnorge": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" self.primaryChannelId = 30 elif self.channelCode == "voxnorge": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" self.primaryChannelId = 31 elif self.channelCode == "animalplanetnorge": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" self.primaryChannelId = 35 elif self.channelCode == "discoverynorge": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" self.primaryChannelId = 45 elif self.channelCode == "discoverysciencenorge": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" self.primaryChannelId = 71 elif self.channelCode == "discoveryworldnorge": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" self.primaryChannelId = 72 elif self.channelCode == "investigationdiscoverynorge": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.no/api/v2/ajax" self.primaryChannelId = 73 elif self.channelCode == "dplaydk": self.noImage = "dplayimage.png" self.baseUrl = "http://www.dplay.dk/api/v2/ajax" else: raise NotImplementedError("ChannelCode %s is not implemented" % (self.channelCode, )) if self.primaryChannelId: self.recentUrl = "https://{0}/content/videos?decorators=viewingHistory&" \ "include=images%2CprimaryChannel%2Cshow&" \ "filter%5BvideoType%5D=EPISODE&" \ "filter%5BprimaryChannel.id%5D={1}&" \ "page%5Bsize%5D={2}&" \ "sort=-publishStart"\ .format(self.baseUrlApi, self.primaryChannelId, self.videoPageSize) #=========================================================================================== # THIS CHANNEL DOES NOT SEEM TO WORK WITH PROXIES VERY WELL! #=========================================================================================== self._add_data_parser("#programs", preprocessor=self.load_programs) # self._add_data_parser("https://secure.dplay.\w+/secure/api/v2/user/authorization/stream/", # matchType=ParserData.MatchRegex, # updater=self.update_channel_item) # Recent self._add_data_parser( "/content/videos?decorators=viewingHistory&" "include=images%2CprimaryChannel%2Cshow&filter%5BvideoType%5D=EPISODE&" "filter%5BprimaryChannel.id%5D=", name="Recent video items", json=True, preprocessor=self.__get_images_from_meta_data, match_type=ParserData.MatchContains, parser=[ "data", ], creator=self.create_video_item_with_show_title) self._add_data_parser( "/content/videos?decorators=viewingHistory&" "include=images%2CprimaryChannel%2Cshow&filter%5BvideoType%5D=EPISODE&" "filter%5BprimaryChannel.id%5D=", name="Recent more pages", json=True, preprocessor=self.__get_images_from_meta_data, match_type=ParserData.MatchContains, parser=[ "data", ], creator=self.create_video_item) # Search self._add_data_parser(r"http.+content/shows\?.+query=.+", match_type=ParserData.MatchRegex, name="Search shows", json=True, preprocessor=self.__get_images_from_meta_data, parser=[ "data", ], creator=self.create_program_item) self._add_data_parser(r"http.+content/videos\?.+query=.+", match_type=ParserData.MatchRegex, name="Search videos", json=True, preprocessor=self.__get_images_from_meta_data, parser=[ "data", ], creator=self.create_video_item_with_show_title) self._add_data_parser(r"http.+content/videos\?.+query=.+", match_type=ParserData.MatchRegex, name="Search Pages", json=True, parser=[ "meta", ], creator=self.create_page_item) # Others self._add_data_parser("*", json=True, preprocessor=self.__get_images_from_meta_data, parser=[ "data", ], creator=self.create_video_item, updater=self.update_video_item) self._add_data_parser("*", json=True, parser=[ "meta", ], creator=self.create_page_item) #=========================================================================================== # non standard items api_cookie = UriHandler.get_cookie("st", self.baseUrlApi) api_cookie_set = AddonSettings.get_channel_setting( self, "api_cookie_set", store=LOCAL) or 0 # The cookie is invalid earler then its expire date. Let's limit it at 30 days if time.time() - api_cookie_set > 30 * 24 * 3600: Logger.debug("Resetting api_cookie for %s", self) api_cookie = None if not api_cookie: guid = uuid.uuid4() guid = str(guid).replace("-", "") # https://disco-api.dplay.se/token?realm=dplayse&deviceId # =aa9ef0ed760df76d184b262d739299a75ccae7b67eec923fe3fcd861f97bcc7f&shortlived=true url = "https://{0}/token?realm=dplay{1}&deviceId={2}&shortlived=true"\ .format(self.baseUrlApi, self.language, guid) JsonHelper(UriHandler.open(url, proxy=self.proxy)) # noinspection PyTypeChecker AddonSettings.set_channel_setting(self, "api_cookie_set", time.time(), store=LOCAL) self.imageLookup = {} self.showLookup = {} self.__REQUIRES_LOGIN = "******" self.__now = datetime.datetime.utcnow() self.__has_premium = False #=========================================================================================== # Test cases: # Arga snickaren : Has clips # ====================================== Actual channel setup STOPS here =================== return