def create_recent_video_item(self, result_set): """ Creates a MediaItem of type 'video' using the result_set from the regex. This method creates a new MediaItem from the Regular Expression or Json results <result_set>. The method should be implemented by derived classes and are specific to the channel. If the item is completely processed an no further data needs to be fetched the self.complete property should be set to True. If not set to True, the self.update_video_item method is called if the item is focussed or selected for playback. :param list[str]|dict result_set: The result_set of the self.episodeItemRegex :return: A new MediaItem of type 'video' or 'audio' (despite the method's name). :rtype: MediaItem|None """ Logger.trace(result_set) show_title = result_set["abstract_name"] episode_title = result_set["title"] title = "{} - {}".format(show_title, episode_title) description = result_set.get("synopsis") uuid = result_set["uuid"] url = "http://www.rtl.nl/system/s4m/xldata/ux/%s?context=rtlxl&" \ "d=pc&fmt=adaptive&version=3" % (uuid, ) # The JSON urls do not yet work # url = "http://www.rtl.nl/system/s4m/vfd/version=1/d=pc/output=json/" \ # "fun=abstract/uuid=%s/fmt=smooth" % (uuid,) item = MediaItem(title.title(), url) item.type = "video" item.description = description item.thumb = "%s%s" % ( self.posterBase, uuid, ) audience = result_set.get("audience") Logger.debug("Found audience: %s", audience) item.isGeoLocked = audience == "ALLEEN_NL" # We can play the DRM stuff # item.isDrmProtected = audience == "DRM" station = result_set.get("station", None) if station: item.name = "{} ({})".format(item.name, station) icon = self.largeIconSet.get(station.lower(), None) if icon: Logger.trace("Setting icon to: %s", icon) item.icon = icon # 2018-12-05T19:30:00.000Z date_time = result_set.get("dateTime", None) if date_time: date_time = DateHelper.get_date_from_string( date_time[:-5], "%Y-%m-%dT%H:%M:%S") # The time is in UTC, and the show as at UTC+1 date_time = datetime.datetime(*date_time[:6]) + datetime.timedelta( hours=1) item.name = "{:02d}:{:02d}: {}".format(date_time.hour, date_time.minute, item.name) item.set_date(date_time.year, date_time.month, date_time.day, date_time.hour, date_time.minute, date_time.second) return item
def create_json_item(self, result_set): # NOSONAR """ Creates a MediaItem of type 'video' using the result_set from the regex. This method creates a new MediaItem from the Regular Expression or Json results <result_set>. The method should be implemented by derived classes and are specific to the channel. If the item is completely processed an no further data needs to be fetched the self.complete property should be set to True. If not set to True, the self.update_video_item method is called if the item is focussed or selected for playback. :param list[str]|dict result_set: The result_set of the self.episodeItemRegex :return: A new MediaItem of type 'video' or 'audio' (despite the method's name). :rtype: MediaItem|None """ Logger.trace(result_set) # determine the title program_title = result_set.get("programTitle", "") or "" show_title = result_set.get("title", "") or "" if show_title == "" and program_title != "": title = program_title elif show_title != "" and program_title == "": title = show_title elif program_title == "" and show_title == "": Logger.warning("Could not find title for item: %s", result_set) return None elif show_title != "" and show_title != program_title: title = "%s - %s" % (program_title, show_title) else: # they are the same title = show_title # NOSONAR if "live" in result_set and result_set["live"]: title = "%s (·Live·)" % (title, ) item_type = result_set.get("contentType") if "contentUrl" in result_set: if "versions" in result_set and bool(result_set["versions"]): video_id = result_set["versions"][0]["id"] else: video_id = result_set["id"] url = "https://api.svt.se/videoplayer-api/video/{}".format( video_id) else: url = result_set["url"] broad_cast_date = result_set.get("broadcastDate", None) if item_type in ("videoEpisod", "videoKlipp", "singel"): if "/video/" not in url and "/klipp/" not in url: Logger.warning( "Found video item without a /video/ or /klipp/ url.") return None item_type = "video" if "programVersionId" in result_set: url = "https://www.svt.se/videoplayer-api/video/%s" % ( result_set["programVersionId"], ) elif not url.startswith("http"): url = "%s%s" % (self.baseUrl, url) else: item_type = "folder" url = "%s%s" % (self.baseUrl, url) item = MediaItem(title, url) item.icon = self.icon item.type = item_type item.isGeoLocked = result_set.get("onlyAvailableInSweden", False) item.description = result_set.get("description", "") if "season" in result_set and "episodeNumber" in result_set and result_set[ "episodeNumber"]: season = int(result_set["season"]) episode = int(result_set["episodeNumber"]) if season > 0 and episode > 0: item.name = "s%02de%02d - %s" % (season, episode, item.name) item.set_season_info(season, episode) thumb = self.noImage if self.parentItem: thumb = self.parentItem.thumb for image_key in ("image", "imageMedium", "thumbnailMedium", "thumbnail", "poster"): if image_key in result_set and result_set[image_key] is not None: thumb = result_set[image_key] break item.thumb = self.__get_thumb(thumb or self.noImage) if broad_cast_date is not None: if "+" in broad_cast_date: broad_cast_date = broad_cast_date.rsplit("+")[0] time_stamp = DateHelper.get_date_from_string( broad_cast_date, "%Y-%m-%dT%H:%M:%S") item.set_date(*time_stamp[0:6]) # Set the expire date expire_date = result_set.get("expireDate") if expire_date is not None: expire_date = expire_date.split("+")[0].replace("T", " ") year = expire_date.split("-")[0] if len(year ) == 4 and int(year) < datetime.datetime.now().year + 50: item.description = \ "{}\n\n{}: {}".format(item.description or "", self.__expires_text, expire_date) length = result_set.get("materialLength", 0) if length > 0: item.set_info_label(MediaItem.LabelDuration, length) return item