Exemplo n.º 1
0
    def CreateShowItem(self, resultSet):
        """Creates a new MediaItem for a tag

        Arguments:
        resultSet : list[string] - the resultSet of the self.episodeItemRegex

        Returns:
        A new MediaItem of type 'folder'

        This method creates a new MediaItem from the Regular Expression or Json
        results <resultSet>. The method should be implemented by derived classes
        and are specific to the channel.

        """

        Logger.Trace(resultSet)

        startDate = resultSet['start']  # 2017-01-01T00:00:00+01:00
        startTimeStamp = DateHelper.GetDateFromString(startDate.split("+")[0], "%Y-%m-%dT%H:%M:%S")
        endDate = resultSet['end']
        endTimeStamp = DateHelper.GetDateFromString(endDate.split("+")[0], "%Y-%m-%dT%H:%M:%S")
        title = "%02d:%02d - %02d:%02d: %s" % (startTimeStamp.tm_hour, startTimeStamp.tm_min,
                                               endTimeStamp.tm_hour, endTimeStamp.tm_min,
                                               resultSet['title'])
        item = mediaitem.MediaItem(title, "", type="video")
        item.description = resultSet.get("description")

        item.thumb = self.noImage
        if "image" in resultSet:
            if not item.description:
                item.description = resultSet["image"].get("alt", None)
            item.thumb = "https://static.538.nl/%s" % (resultSet["image"]['src'], )

        item.icon = self.icon
        item.SetDate(*startTimeStamp[0:6])
        item.description = resultSet.get('description')
        if "playbackUrls" in resultSet and resultSet["playbackUrls"]:
            titleFormat = "%%02d:%%02d - %s" % (resultSet['title'],)
            item.complete = True
            hour = startTimeStamp.tm_hour
            for stream in resultSet["playbackUrls"]:
                if stream.startswith("//"):
                    stream = "https:%s" % (stream, )
                part = item.CreateNewEmptyMediaPart()
                part.Name = titleFormat % (hour, startTimeStamp.tm_min)
                part.AppendMediaStream(stream, 0)
                hour += 1
        else:
            Logger.Warning("Found item without streams: %s", item)
            return None
        return item
Exemplo n.º 2
0
    def CreateJsonVideoItem(self, resultSet, prepend_serie=False):
        Logger.Trace(resultSet)

        if not resultSet.get("available", True):
            Logger.Warning("Item not available: %s", resultSet)
            return None

        item = self.CreateJsonEpisodeItem(resultSet)
        if item is None:
            return None

        if prepend_serie and 'seriesTitle' in resultSet:
            item.name = "{0} - {1}".format(item.name, resultSet['seriesTitle'])
        elif 'seriesTitle' in resultSet:
            item.name = resultSet['seriesTitle']

        item.type = "video"
        item.url = "https://embed.kijk.nl/api/video/%(id)s?id=kijkapp" % resultSet

        if 'subtitle' in resultSet:
            item.name = "{0} - {1}".format(item.name, resultSet['subtitle'])

        if "date" in resultSet:
            date = resultSet["date"].split("+")[0]
            # 2016-12-25T17:58:00+01:00
            timeStamp = DateHelper.GetDateFromString(date, "%Y-%m-%dT%H:%M:%S")
            item.SetDate(*timeStamp[0:6])

        return item
Exemplo n.º 3
0
    def CreateVideoItem(self, resultSet):
        """ Call base method and then do some more stuff """
        item = chn_class.Channel.CreateVideoItem(self, resultSet)
        # set the POW id
        item.url = resultSet["url"]
        item.isPaid = "premium" in resultSet["class"]

        # TODO: set date

        try:
            dateTime = resultSet["date2"].strip().replace("  ", " ").split(" ")
            Logger.Trace(dateTime)
            if dateTime[0].lower() == "gisteren":
                dateTime = datetime.datetime.now() + datetime.timedelta(days=-1)
                item.SetDate(dateTime.year, dateTime.month, dateTime.day)
            elif dateTime[0].lower() == "vandaag":
                dateTime = datetime.datetime.now()
                item.SetDate(dateTime.year, dateTime.month, dateTime.day)
            elif ":" in dateTime[-1]:
                if dateTime[-2].isalpha():
                    year = datetime.datetime.now().year
                    dateTime.insert(-1, year)
                year = int(dateTime[-2])

                month = DateHelper.GetMonthFromName(dateTime[-3], language="nl")
                day = int(dateTime[-4])

                stamp = datetime.datetime(year, month, day)
                if stamp > datetime.datetime.now():
                    year -= 1
                item.SetDate(year, month, day)
            else:
                # there is an actual date present
                if dateTime[0].isalpha():
                    # first part is ma/di/wo/do/vr/za/zo
                    dateTime.pop(0)

                # translate the month
                month = DateHelper.GetMonthFromName(dateTime[1], language="nl")

                # if the year is missing, let's assume it is this year
                if ":" in dateTime[2]:
                    dateTime[2] = datetime.datetime.now().year
                    # in the past of future, if future, we need to substract
                    stamp = datetime.datetime(dateTime[2], month, int(dateTime[0]))
                    if stamp > datetime.datetime.now():
                        dateTime[2] -= 1

                item.SetDate(dateTime[2], month, dateTime[0])
        except:
            Logger.Warning("Cannot set date from label: %s", resultSet["date2"], exc_info=True)
            # 2016-07-05T00:00:00Z
            dateValue = resultSet.get("date", None)
            if dateValue:
                timeStamp = DateHelper.GetDateFromString(dateValue, "%Y-%m-%dT%H:%M:%SZ")
                item.SetDate(*timeStamp[0:6])
            else:
                Logger.Warning("Cannot set date from 'data-from': %s", resultSet["date"], exc_info=True)
        return item
Exemplo n.º 4
0
    def CreateChannelItem(self, channel):
        """ Creates a mediaitem for a live channel
        @param channel:     The Regex result from the parser object

        @return:            A MediaItem object for the channel

        """

        Logger.Trace(channel)

        title = channel["programmeTitle"]
        episode = channel.get("episodeTitle", None)
        thumb = self.noImage
        channelId = channel["channel"].lower()
        if channelId == "svtk":
            channelTitle = "Kunskapskanalen"
            channelId = "kunskapskanalen"
        elif channelId == "svtb":
            channelTitle = "Barnkanalen"
            channelId = "barnkanalen"
        else:
            channelTitle = channel["channel"]
        description = channel["longDescription"]

        dateFormat = "%Y-%m-%dT%H:%M:%S"
        startTime = DateHelper.GetDateFromString(channel["publishingTime"][:19], dateFormat)
        endTime = DateHelper.GetDateFromString(channel["publishingEndTime"][:19], dateFormat)

        if episode:
            title = "%s: %s - %s (%02d:%02d - %02d:%02d)" \
                    % (channelTitle, title, episode,
                       startTime.tm_hour, startTime.tm_min, endTime.tm_hour, endTime.tm_min)
        else:
            title = "%s: %s (%02d:%02d - %02d:%02d)" \
                    % (channelTitle, title,
                       startTime.tm_hour, startTime.tm_min, endTime.tm_hour, endTime.tm_min)
        channelItem = mediaitem.MediaItem(title, "https://www.svt.se/videoplayer-api/video/ch-%s" % (channelId.lower(), ))
        channelItem.type = "video"
        channelItem.description = description
        channelItem.isLive = True
        channelItem.isGeoLocked = True

        channelItem.thumb = thumb
        if "titlePageThumbnailIds" in channel and channel["titlePageThumbnailIds"]:
            channelItem.thumb = "https://www.svtstatic.se/image/wide/650/%s.jpg" % (channel["titlePageThumbnailIds"][0], )
        return channelItem
Exemplo n.º 5
0
    def StievieCreateEpgItems(self, epg):
        Logger.Trace(epg)
        Logger.Debug("Processing EPG for channel %s", epg["id"])

        items = []
        summerTime = time.localtime().tm_isdst
        now = datetime.datetime.now()

        for resultSet in epg["items"]:
            # if not resultSet["parentSeriesOID"]:
            #     continue

            # Does not always work
            # videoId = resultSet["epgId"].replace("-", "_")
            # url = "https://vod.medialaan.io/vod/v2/videos/%s_Stievie_free" % (videoId, )
            videoId = resultSet["programOID"]
            url = "https://vod.medialaan.io/vod/v2/videos?episodeIds=%s&limit=10&offset=0&sort=broadcastDate&sortDirection=asc" % (videoId, )
            title = resultSet["title"]
            if resultSet["episode"] and resultSet["season"]:
                title = "%s - s%02de%02d" % (title, resultSet["season"], resultSet["episode"])

            if "startTime" in resultSet and resultSet["startTime"]:
                dateTime = resultSet["startTime"]
                dateValue = DateHelper.GetDateFromString(dateTime, dateFormat="%Y-%m-%dT%H:%M:%S.000Z")
                # Convert to Belgium posix time stamp
                dateValue2 = time.mktime(dateValue) + (1 + summerTime) * 60 * 60
                # Conver the posix to a time stamp
                startTime = DateHelper.GetDateFromPosix(dateValue2)

                title = "%02d:%02d - %s" % (startTime.hour, startTime.minute, title)

                # Check for items in their black-out period
                if "blackout" in resultSet and resultSet["blackout"]["enabled"]:
                    blackoutDuration = resultSet["blackout"]["duration"]
                    blackoutStart = startTime + datetime.timedelta(seconds=blackoutDuration)
                    if blackoutStart < now:
                        Logger.Debug("Found item in Black-out period: %s (started at %s)", title, blackoutStart)
                        continue

            # else:
            #     startTime = self.parentItem.metaData["airDate"]

            item = MediaItem(title, url)
            item.type = "video"
            item.isGeoLocked = resultSet["geoblock"]
            item.description = resultSet["shortDescription"]
            # item.SetDate(startTime.year, startTime.month, startTime.day)

            if "images" in resultSet and resultSet["images"] and "styles" in resultSet["images"][0]:
                images = resultSet["images"][0]["styles"]
                # if "1520x855" in images:
                #     item.fanart = images["1520x855"]
                if "400x225" in images:
                    item.thumb = images["400x225"]

            items.append(item)

        return items
Exemplo n.º 6
0
    def CreateVideoItemNew(self, resultSet):
        """Creates a MediaItem of type 'video' using the resultSet from the regex.

        Arguments:
        resultSet : tuple (string) - the resultSet of the self.videoItemRegex

        Returns:
        A new MediaItem of type 'video' or 'audio' (despite the method's name)

        This method creates a new MediaItem from the Regular Expression or Json
        results <resultSet>. 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.UpdateVideoItem method is called if the item is focussed or selected
        for playback.

        """

        Logger.Trace(resultSet)

        videos = self.__GetNestedValue(resultSet, "Assets", "Video")
        if not videos:
            Logger.Warning("No video information found.")
            return None

        videoInfos = filter(lambda vi: vi["fullLength"], videos)
        if len(videoInfos) > 0:
            videoInfo = videoInfos[0]
        else:
            Logger.Warning("No full length video found.")
            return None
        videoId = videoInfo["id"]

        url = "http://il.srgssr.ch/integrationlayer/1.0/ue/srf/video/play/%s.json" % (
            videoId, )
        item = mediaitem.MediaItem(resultSet["title"], url)
        item.type = "video"

        item.thumb = self.__GetNestedValue(videoInfo, "Image",
                                           "ImageRepresentations",
                                           "ImageRepresentation", 0, "url")
        item.description = self.__GetNestedValue(videoInfo, "AssetMetadatas",
                                                 "AssetMetadata", 0,
                                                 "description")

        dateValue = str(resultSet["publishedDate"])
        dateValue = dateValue[0:-6]
        dateTime = DateHelper.GetDateFromString(
            dateValue, "%Y-%m-%dT%H:%M:%S")  # 2015-01-20T22:17:59"
        item.SetDate(*dateTime[0:6])

        item.icon = self.icon
        item.httpHeaders = self.httpHeaders
        item.complete = False
        return item
Exemplo n.º 7
0
    def CreateVideoItem(self, resultSet):
        """Creates a MediaItem of type 'video' using the resultSet from the regex.

        Arguments:
        resultSet : tuple (string) - the resultSet of the self.videoItemRegex

        Returns:
        A new MediaItem of type 'video' or 'audio' (despite the method's name)

        This method creates a new MediaItem from the Regular Expression or Json
        results <resultSet>. 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.UpdateVideoItem method is called if the item is focussed or selected
        for playback.

        """

        Logger.Trace(resultSet)

        if "fullengthSegment" in resultSet and "segment" in resultSet[
                "fullengthSegment"]:
            videoId = resultSet["fullengthSegment"]["segment"]["id"]
            geoLocation = resultSet["fullengthSegment"]["segment"][
                "geolocation"]
            geoBlock = False
            if "flags" in resultSet["fullengthSegment"]["segment"]:
                geoBlock = resultSet["fullengthSegment"]["segment"][
                    "flags"].get("geoblock", None)
            Logger.Trace("Found geoLocation/geoBlock: %s/%s", geoLocation,
                         geoBlock)
        else:
            Logger.Warning("No video information found.")
            return None

        url = "http://www.srf.ch/player/webservice/videodetail/index?id=%s" % (
            videoId, )
        item = mediaitem.MediaItem(resultSet["titleFull"], url)
        item.type = "video"

        item.thumb = resultSet.get("segmentThumbUrl", None)
        # item.thumb = "%s/scale/width/288" % (item.thumb, )  # apparently only the 144 return the correct HEAD info
        # item.fanart = resultSet.get("imageUrl", None)  $# the HEAD will not return a size, so Kodi can't handle it
        item.description = resultSet.get("description", "")

        dateValue = str(resultSet["time_published"])
        dateTime = DateHelper.GetDateFromString(
            dateValue, "%Y-%m-%d %H:%M:%S")  # 2015-01-20 22:17:59"
        item.SetDate(*dateTime[0:6])

        item.icon = self.icon
        item.httpHeaders = self.httpHeaders
        item.complete = False
        return item
Exemplo n.º 8
0
    def CreateJsonVideo(self, resultSet):
        """Creates a MediaItem of type 'video' using the resultSet from the regex.

        Arguments:
        resultSet : tuple (string) - the resultSet of the self.videoItemRegex

        Returns:
        A new MediaItem of type 'video' or 'audio' (despite the method's name)

        This method creates a new MediaItem from the Regular Expression or Json
        results <resultSet>. 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.UpdateVideoItem method is called if the item is focussed or selected
        for playback.

        """

        # Logger.Trace(JsonHelper.DictionaryToString(resultSet))

        videoId = resultSet['id']
        # category = resultSet["maincategory"].title()
        # subcategory = resultSet["subcategory"].title()

        url = "https://api.nos.nl/mobile/video/%s/phone.json" % (videoId, )
        item = mediaitem.MediaItem(resultSet['title'], url, type="video")
        item.icon = self.icon
        if 'image' in resultSet:
            images = resultSet['image']["formats"]
            matchedImage = images[-1]
            for image in images:
                if image["width"] >= 720:
                    matchedImage = image
                    break
            item.thumb = matchedImage["url"].values()[0]

        item.description = resultSet["description"]
        item.complete = False
        item.isGeoLocked = resultSet.get("geoprotection", False)

        # set the date and time
        date = resultSet["published_at"]
        timeStamp = DateHelper.GetDateFromString(
            date, dateFormat="%Y-%m-%dT%H:%M:%S+{0}".format(date[-4:]))
        item.SetDate(*timeStamp[0:6])
        return item
Exemplo n.º 9
0
    def CreateVideoItem(self, resultSet):
        item = chn_class.Channel.CreateVideoItem(self, resultSet)
        if item is None:
            return item

        # http://www.rtbf.be/auvio/embed/media?id=2101078&autoplay=1
        if "videoId" in resultSet:
            item.url = "%s/auvio/embed/media?id=%s" % (self.baseUrl,
                                                       resultSet["videoId"])
        elif "liveId" in resultSet:
            item.name = "%s - %s" % (resultSet["channel"].strip(), item.name)
            item.url = "%s/auvio/embed/direct?id=%s" % (self.baseUrl,
                                                        resultSet["liveId"])
            item.isLive = True

        if "date" in resultSet:
            # 2016-05-14T20:00:00+02:00 -> strip the hours
            timeStamp = DateHelper.GetDateFromString(
                resultSet["date"].rsplit("+")[0], "%Y-%m-%dT%H:%M:%S")
            item.SetDate(*timeStamp[0:6])

        return item
Exemplo n.º 10
0
    def CreateJsonVideoItem(self, resultSet):
        Logger.Trace(resultSet)
        url = "http://playapi.mtgx.tv/v3/videos/stream/%(id)s" % resultSet
        item = mediaitem.MediaItem(resultSet["title"], url)
        item.type = "video"
        item.thumb = self.parentItem.thumb
        item.icon = self.parentItem.icon
        item.description = resultSet.get("summary", None)

        airedAt = resultSet.get("airedAt", None)
        if airedAt is None:
            airedAt = resultSet.get("publishedAt", None)
        if airedAt is not None:
            # 2016-05-20T15:05:00+00:00
            airedAt = airedAt.split("+")[0].rstrip('Z')
            timeStamp = DateHelper.GetDateFromString(airedAt,
                                                     "%Y-%m-%dT%H:%M:%S")
            item.SetDate(*timeStamp[0:6])

        item.thumb = self.__GetThumbImage(resultSet.get("image"))

        # webvttPath / samiPath
        # loginRequired
        isPremium = resultSet.get("loginRequired", False)
        if isPremium and AddonSettings.HidePremiumItems():
            Logger.Debug("Found premium item, hiding it.")
            return None

        srt = resultSet.get("samiPath")
        if not srt:
            srt = resultSet.get("subtitles_webvtt")
        if srt:
            Logger.Debug("Storing SRT/WebVTT path: %s", srt)
            part = item.CreateNewEmptyMediaPart()
            part.Subtitle = srt
        return item
Exemplo n.º 11
0
    def CreateVideoItem(self, resultSet):
        """Creates a MediaItem of type 'video' using the resultSet from the regex.

        Arguments:
        resultSet : tuple (string) - the resultSet of the self.videoItemRegex

        Returns:
        A new MediaItem of type 'video' or 'audio' (despite the method's name)

        This method creates a new MediaItem from the Regular Expression or Json
        results <resultSet>. 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.UpdateVideoItem method is called if the item is focussed or selected
        for playback.

        """

        Logger.Trace(resultSet)

        drmLocked = False
        geoBlocked = resultSet["is_geo_blocked"]
        # hideGeoBloced = AddonSettings().HideGeoLocked()
        # if geoBlocked and hideGeoBloced:
        #     Logger.Warning("GeoBlocked item")
        #     return None

        title = resultSet["title"]
        if ("_links" not in resultSet or "stream" not in resultSet["_links"]
                or "href" not in resultSet["_links"]["stream"]):
            Logger.Warning("No streams found for %s", title)
            return None

        # the description
        description = resultSet["description"].strip()  # The long version
        summary = resultSet["summary"].strip()  # The short version
        # Logger.Trace("Comparing:\nDesc: %s\nSumm:%s", description, summary)
        if description.startswith(summary):
            pass
        else:
            # the descripts starts with the summary. Don't show
            description = "%s\n\n%s" % (summary, description)

        videoType = resultSet["type"]
        if not videoType == "program":
            title = "%s (%s)" % (title, videoType.title())

        elif resultSet["format_position"][
                "is_episodic"]:  # and resultSet["format_position"]["episode"] != "0":
            # make sure we show the episodes and seaso
            # season = int(resultSet["format_position"]["season"])
            episode = int(resultSet["format_position"]["episode"])
            # name = "s%02de%02d" % (season, episode)
            webisode = resultSet.get("webisode", False)

            # if the name had the episode in it, translate it
            if episode > 0 and not webisode:
                description = "%s\n\n%s" % (title, description)
                title = "%s - %s %s %s %s" % (
                    resultSet["format_title"], self.seasonLabel,
                    resultSet["format_position"]["season"], self.episodeLabel,
                    resultSet["format_position"]["episode"])
            else:
                Logger.Debug(
                    "Found episode number '0' for '%s', using name instead of episode number",
                    title)

        url = resultSet["_links"]["stream"]["href"]
        item = mediaitem.MediaItem(title, url)

        dateInfo = None
        dateFormat = "%Y-%m-%dT%H:%M:%S"
        if "broadcasts" in resultSet and len(resultSet["broadcasts"]) > 0:
            dateInfo = resultSet["broadcasts"][0]["air_at"]
            Logger.Trace("Date set from 'air_at'")

            if "playable_from" in resultSet["broadcasts"][0]:
                startDate = resultSet["broadcasts"][0]["playable_from"]
                playableFrom = DateHelper.GetDateFromString(
                    startDate[0:-6], dateFormat)
                playableFrom = datetime.datetime(*playableFrom[0:6])
                if playableFrom > datetime.datetime.now():
                    drmLocked = True

        elif "publish_at" in resultSet:
            dateInfo = resultSet["publish_at"]
            Logger.Trace("Date set from 'publish_at'")

        if dateInfo is not None:
            # publish_at=2007-09-02T21:55:00+00:00
            info = dateInfo.split("T")
            dateInfo = info[0]
            timeInfo = info[1]
            dateInfo = dateInfo.split("-")
            timeInfo = timeInfo.split(":")
            item.SetDate(dateInfo[0], dateInfo[1], dateInfo[2], timeInfo[0],
                         timeInfo[1], 0)

        item.type = "video"
        item.complete = False
        item.icon = self.icon
        item.isGeoLocked = geoBlocked
        item.isDrmProtected = drmLocked

        thumbData = resultSet['_links'].get('image', None)
        if thumbData is not None:
            # item.thumbUrl = thumbData['href'].replace("{size}", "thumb")
            item.thumb = self.__GetThumbImage(thumbData['href'])

        item.description = description

        srt = resultSet.get("sami_path")
        if not srt:
            srt = resultSet.get("subtitles_webvtt")
        if srt:
            Logger.Debug("Storing SRT/WebVTT path: %s", srt)
            part = item.CreateNewEmptyMediaPart()
            part.Subtitle = srt
        return item
Exemplo n.º 12
0
    def CreateJsonItem(self, resultSet):
        """Creates a new MediaItem for an episode

        Arguments:
        resultSet : list[string] - the resultSet of the self.episodeItemRegex

        Returns:
        A new MediaItem of type 'folder'

        This method creates a new MediaItem from the Regular Expression
        results <resultSet>. The method should be implemented by derived classes
        and are specific to the channel.

        """
        Logger.Trace(resultSet)

        # determine the title
        programTitle = resultSet.get("programTitle", "") or ""
        showTitle = resultSet.get("title", "") or ""
        if showTitle == "" and programTitle != "":
            title = programTitle
        elif showTitle != "" and programTitle == "":
            title = showTitle
        elif programTitle == "" and showTitle == "":
            Logger.Warning("Could not find title for item: %s", resultSet)
            return None
        elif showTitle != "" and showTitle != programTitle:
            title = "%s - %s" % (programTitle, showTitle)
        else:
            # they are the same
            title = showTitle

        if "live" in resultSet and resultSet["live"]:
            title = "%s (&middot;Live&middot;)" % (title, )

        itemType = resultSet.get("contentType")
        if "contentUrl" in resultSet:
            url = resultSet["contentUrl"]
        else:
            url = resultSet["url"]
        broadCastDate = resultSet.get("broadcastDate", None)

        if itemType in ("videoEpisod", "videoKlipp", "singel"):
            if not url.startswith("/video/") and not url.startswith("/klipp/"):
                Logger.Warning("Found video item without a /video/ or /klipp/ url.")
                return None
            itemType = "video"
            if "programVersionId" in resultSet:
                url = "https://www.svt.se/videoplayer-api/video/%s" % (resultSet["programVersionId"],)
            else:
                url = "%s%s" % (self.baseUrl, url)
        else:
            itemType = "folder"
            url = "%s%s" % (self.baseUrl, url)

        item = mediaitem.MediaItem(title, url)
        item.icon = self.icon
        item.type = itemType
        item.isGeoLocked = resultSet.get("onlyAvailableInSweden", False)
        item.description = resultSet.get("description", "")

        if "season" in resultSet and "episodeNumber" in resultSet and resultSet["episodeNumber"]:
            season = int(resultSet["season"])
            episode = int(resultSet["episodeNumber"])
            if season > 0 and episode > 0:
                item.name = "s%02de%02d - %s" % (season, episode, item.name)
                item.SetSeasonInfo(season, episode)

        # thumb = resultSet.get("imageMedium", self.noImage).replace("/medium/", "/extralarge/")
        thumb = self.noImage
        if self.parentItem:
            thumb = self.parentItem.thumb

        for imageKey in ("image", "imageMedium", "thumbnailMedium", "thumbnail", "poster"):
            if imageKey in resultSet and resultSet[imageKey] is not None:
                thumb = resultSet[imageKey]
                break

        item.thumb = self.__GetThumb(thumb or self.noImage)

        if broadCastDate is not None:
            if "+" in broadCastDate:
                broadCastDate = broadCastDate.rsplit("+")[0]
            timeStamp = DateHelper.GetDateFromString(broadCastDate, "%Y-%m-%dT%H:%M:%S")
            item.SetDate(*timeStamp[0:6])
        return item