コード例 #1
0
def list_videos(plugin, item_id, **kwargs):
    headers = {"User-Agent": web_utils.get_random_ua()}

    # Yes, it's ugly but need by the website...
    params = {
        "appDefinitionIdToSiteRevision":
        '{"13d21c63-b5ec-5912-8397-c3a5ddb27a97":"440","14bcded7-0066-7c35-14d7-466cb3f09103":"222"}',
        "beckyExperiments":
        "specs.thunderbolt.responsiveAbsoluteChildrenPosition:true,specs.thunderbolt.byRefV2:true,specs.thunderbolt.DatePickerPortal:true,specs.thunderbolt.LinkBarPlaceholderImages:true,specs.thunderbolt.carmi_simple_mode:true,specs.thunderbolt.final_image_auto_encode:true,specs.thunderbolt.premiumDocumentLink:true,specs.thunderbolt.prefetchComponentsShapesInBecky:true,specs.thunderbolt.inflatePresetsWithNoDefaultItems:true,specs.thunderbolt.maskImageCSS:true,specs.thunderbolt.SearchBoxModalSuggestions:true",
        "contentType": "application/json",
        "dfCk": "6",
        "dfVersion": "1.1581.0",
        "excludedSafariOrIOS": "false",
        "experiments":
        "bv_remove_add_chat_viewer_fixer,dm_enableDefaultA11ySettings,dm_fixStylableButtonProperties,dm_fixVectorImageProperties,dm_linkRelDefaults,dm_migrateToTextTheme",
        "externalBaseUrl": URL_ROOT,
        "fileId": "d6fe5896.bundle.min",
        "hasTPAWorkerOnSite": "false",
        "isHttps": "true",
        "isInSeo": "false",
        "isPremiumDomain": "true",
        "isUrlMigrated": "true",
        "isWixCodeOnPage": "false",
        "isWixCodeOnSite": "false",
        "language": "fr",
        "metaSiteId": "f40dc1b3-7269-48b2-afa8-74d3b20f1f32",
        "module": "thunderbolt-platform",
        "originalLanguage": "en",
        "pageId": "6081ef_49d4ee283307414e0ddcabdb5ee6ea68_363.json",
        "quickActionsMenuEnabled": "false",
        "registryLibrariesTopology":
        '[{"artifactId":"editor-elements","namespace":"wixui","url":"https://static.parastorage.com/services/editor-elements/1.7884.0"},{"artifactId":"editor-elements","namespace":"dsgnsys","url":"https://static.parastorage.com/services/editor-elements/1.7884.0"}]',
        "remoteWidgetStructureBuilderVersion": "1.229.0",
        "siteId": "af621213-b9a8-4c1b-aba6-9b0458b47ebf",
        "siteRevision": "422",
        "viewMode": "desktop"
    }
    resp = urlquick.get(
        "https://siteassets.parastorage.com/pages/pages/thunderbolt",
        params=params,
        headers=headers).text
    appID = re.search(r'applications":\{"(.+?)"', resp).group(1)
    compID = re.findall(r'compId":"(.+?)"', resp)[int(item_id)]
    channelId = re.findall(compID + '".+?channelId":"(.+?)"', resp)

    if len(channelId) == 1:
        channelId = channelId[0]
    else:
        channelId = channelId[1]

    resp = urlquick.get(URL_ROOT + "/_api/v2/dynamicmodel", headers=headers)
    instance = re.search(appID + '".+?instance":"(.+?)"', resp.text).group(1)

    params = {
        "siteUrl": URL_ROOT,
        "fullSiteUrl": URL_ROOT + "/replay",
        "channelId": channelId,
        "instance": instance,
        "locale": "fr",
        "isV3Api": "false",
    }

    data = urlquick.get(URL_ROOT + "/wix-vod-server/widget-data",
                        params=params,
                        headers=headers).json()["__VIDEOS__"]["items"]

    for content in data:
        item = Listitem()
        item.label = content["title"]
        item.info['plot'] = content["description"]
        if content.get("custom_uploaded_cover_url"):
            item.art['thumb'] = "https://images-vod.wixmp.com/" + content[
                "custom_uploaded_cover_url"]
        else:
            item.art['thumb'] = "https://images-vod.wixmp.com/" + content[
                "cover_url"]
        item.set_callback(get_video_url,
                          item_id="https://vod.wix.com/public/play/" +
                          content["item_id"] + "?instance=" + instance +
                          '&channel_id=' + channelId)
        item_post_treatment(item)
        yield item
コード例 #2
0
def list_videos(plugin, item_id, season_url, **kwargs):

    if 'api/context' in season_url:
        resp = urlquick.get(season_url)
        json_parser = json.loads(resp.text)

        for video_datas in json_parser['items']:
            video_title = video_datas['meta']['header'][
                'title']
            video_image = video_datas['media']['image']['url']
            video_plot = video_datas['meta']['description']
            # TODO add duration / date
            video_url = URL_ROOT + video_datas['url']

            item = Listitem()
            item.label = video_title
            item.art['thumb'] = video_image
            item.info['plot'] = video_plot

            item.set_callback(
                get_video_url,
                item_id=item_id,
                video_url=video_url)
            item_post_treatment(
                item, is_playable=True, is_downloadable=True)
            yield item

        if json_parser['loadMore'] is not None:
            new_season_url = URL_ROOT + json_parser['loadMore']['url']
            yield Listitem.next_page(item_id=item_id, season_url=new_season_url)

    else:
        resp = urlquick.get(season_url)
        json_value = re.compile(r'window\.__DATA__ \= (.*?)\}\;').findall(
            resp.text)[0]
        json_parser = json.loads(json_value + '}')

        for main_contents_datas in json_parser['children']:
            if 'MainContainer' in main_contents_datas['type']:
                for video_child in main_contents_datas['children']:
                    if video_child['type'] is not None:
                        if 'LineList' in video_child['type']:
                            video_props = video_child['props']
                            if 'video-guide' in video_props['type']:
                                for video_datas in video_props['items']:
                                    video_title = video_datas['meta']['header'][
                                        'title']
                                    video_image = video_datas['media']['image']['url']
                                    video_plot = video_datas['meta']['description']
                                    # TODO add duration / date
                                    video_url = URL_ROOT + video_datas['url']

                                    item = Listitem()
                                    item.label = video_title
                                    item.art['thumb'] = video_image
                                    item.info['plot'] = video_plot

                                    item.set_callback(
                                        get_video_url,
                                        item_id=item_id,
                                        video_url=video_url)
                                    item_post_treatment(
                                        item, is_playable=True, is_downloadable=True)
                                    yield item

                                if 'loadMore' in video_props:
                                    new_season_url = URL_ROOT + video_props['loadMore']['url']
                                    yield Listitem.next_page(
                                        item_id=item_id,
                                        season_url=new_season_url)
コード例 #3
0
def list_programs(plugin, item_id, category_slug, **kwargs):

    resp = urlquick.get(URL_ROOT)
    json_datas = re.compile(r'\/json\"\>\{(.*?)\}\<\/script\>').findall(
        resp.text)[0]
    json_parser = json.loads('{' + json_datas + '}')

    json_entry = json_parser["props"]["apolloState"]
    for json_key in list(json_entry.keys()):
        if "__typename" in json_entry[json_key]:
            if "ProductSet" in json_entry[json_key]["__typename"]:
                if "slug" in json_entry[json_key]:
                    if category_slug in json_entry[json_key]["slug"]:
                        for item_data in json_entry[json_key]["items"]:
                            productset_id = item_data["id"]
                            product_id = json_entry[productset_id]["product"][
                                "id"]

                            product_slug_id = ''
                            if json_entry[product_id][
                                    'collection'] is not None:
                                product_slug_id = json_entry[product_id][
                                    'collection']['id']
                                program_title = json_entry[product_slug_id]['title'] + \
                                    ' - ' + json_entry[product_id]["title"]
                            else:
                                program_title = json_entry[product_id]["title"]

                            program_image_id = json_entry[product_id][
                                "mainLandscapeImage"]["id"]
                            program_image = json_entry[program_image_id]["url"]
                            program_plot = json_entry[product_id][
                                "shortSummary"]
                            program_type = json_entry[product_id][
                                "productType"]

                            item = Listitem()
                            item.label = program_title
                            item.art['thumb'] = item.art[
                                'landscape'] = program_image
                            item.info['plot'] = program_plot
                            if 'EPISODE' in program_type or 'MOVIE' in program_type or 'TRAILER' in program_type:
                                isVideo = False
                                if json_entry[product_id]['slug'] is not None:
                                    video_slug = json_entry[product_id]['slug']
                                    isVideo = True
                                elif json_entry[product_id][
                                        'collection'] is not None:
                                    video_slug = json_entry[product_slug_id][
                                        'slug']
                                    isVideo = True
                                if isVideo:
                                    video_duration = ''
                                    if 'duration' in json_entry[product_id]:
                                        video_duration = json_entry[
                                            product_id]['duration']
                                    item.info['duration'] = video_duration
                                    video_season_number = ''
                                    if json_entry[product_id][
                                            "seasonNumber"] is not None:
                                        video_season_number = str(
                                            json_entry[product_id]
                                            ["seasonNumber"])
                                    video_episode_number = ''
                                    if json_entry[product_id][
                                            "episodeNumber"] is not None:
                                        video_episode_number = str(
                                            json_entry[product_id]
                                            ["episodeNumber"])
                                    item.set_callback(
                                        get_video_url,
                                        item_id=item_id,
                                        video_slug=video_slug,
                                        video_season_number=video_season_number,
                                        video_episode_number=
                                        video_episode_number)
                                    item_post_treatment(item,
                                                        is_playable=True,
                                                        is_downloadable=True)
                                    yield item
                            else:
                                if json_entry[product_id]['slug'] is not None:
                                    program_slug = json_entry[product_id][
                                        'slug']
                                elif json_entry[product_id][
                                        'collection'] is not None:
                                    program_slug = json_entry[product_slug_id][
                                        'slug']
                                program_season_number = ''
                                if json_entry[product_id][
                                        "seasonNumber"] is not None:
                                    program_season_number = str(
                                        json_entry[product_id]["seasonNumber"])
                                item.set_callback(
                                    list_videos,
                                    item_id=item_id,
                                    program_slug=program_slug,
                                    program_season_number=program_season_number
                                )
                                item_post_treatment(item)
                                yield item
コード例 #4
0
def list_videos_category(plugin,
                         item_id,
                         category_id,
                         category_url=None,
                         next_page=None,
                         **kwargs):
    if item_id == 'rsi':
        resp = urlquick.get(category_url)
        json_value = re.compile(r'data-teaser=\"(.*?)\"').findall(resp.text)[0]
        json_value = json_value.replace('&quot;', '"')
        json_parser = json.loads(json_value)

        for video_datas in json_parser:
            video_title = ''
            if 'showTitle' in video_datas:
                video_title = video_datas["showTitle"] + \
                    ' - ' + video_datas["title"]
            else:
                video_title = video_datas["title"]
            video_plot = ''
            if 'description' in video_datas:
                video_plot = video_datas["description"]
            video_image = video_datas["imageUrl"] + '/scale/width/448'
            video_url = video_datas["absoluteDetailUrl"]

            item = Listitem()
            item.label = video_title
            item.art['thumb'] = item.art['landscape'] = video_image
            item.info['plot'] = video_plot

            item.set_callback(get_video_url,
                              item_id=item_id,
                              video_url=video_url)
            item_post_treatment(item, is_playable=True, is_downloadable=True)
            yield item
    else:

        url = URL_API_V3 % ('play' if item_id == 'swissinfo' else 'www',
                            item_id, 'swi' if item_id == 'swissinfo' else
                            item_id, 'latest-media-by-topic')
        params = {'topicId': category_id}
        if next_page:
            params['next'] = next_page
        resp = urlquick.get(url, params=params)
        json_parser = json.loads(resp.text)

        for video_datas in json_parser['data']['data']:
            video_title = ''
            if 'showTitle' in video_datas:
                video_title = video_datas["showTitle"] + \
                    ' - ' + video_datas["title"]
            else:
                video_title = video_datas["title"]
            video_plot = ''
            if 'description' in video_datas:
                video_plot = video_datas["description"]
            video_image = video_datas["imageUrl"] + '/scale/width/448'
            video_id = video_datas['id']

            item = Listitem()
            item.label = video_title
            item.art['thumb'] = item.art['landscape'] = video_image
            item.info['plot'] = video_plot
            item.info['duration'] = video_datas['duration'] / 1000
            item.info.date(video_datas['date'].split('T')[0], "%Y-%m-%d")

            item.set_callback(get_video_url,
                              item_id=item_id,
                              video_url='',
                              video_id=video_id)
            item_post_treatment(item, is_playable=True, is_downloadable=True)
            yield item
        if 'next' in json_parser['data']:
            yield Listitem.next_page(item_id=item_id,
                                     category_id=category_id,
                                     next_page=json_parser['data']['next'])
コード例 #5
0
def list_programs(plugin, item_id, next_url, **kwargs):

    resp = urlquick.get(next_url)
    json_parser = json.loads(resp.text)

    if 'strates' in json_parser:

        program_title = json_parser['currentPage']['displayName']

        for strate in json_parser["strates"]:
            if strate["type"] == "contentRow" or strate[
                    "type"] == "contentGrid":
                strate_title = program_title + ' - ' + strate["title"]

                item = Listitem()
                item.label = strate_title

                item.set_callback(list_sub_programs,
                                  item_id=item_id,
                                  next_url=next_url,
                                  strate_title=strate_title)
                item_post_treatment(item)
                yield item

    elif 'episodes' in json_parser:

        program_title = json_parser['currentPage']['displayName']

        for video_datas in json_parser["episodes"]['contents']:
            video_title = program_title + ' - ' + video_datas['title']
            video_image = video_datas['URLImage']
            video_plot = ''
            if 'summary' in video_datas:
                video_plot = video_datas['summary']
            if 'contentAvailability' in video_datas:
                video_url = video_datas["contentAvailability"][
                    "availabilities"]["stream"]["URLMedias"]
            else:
                video_url = video_datas["URLMedias"]

            item = Listitem()
            item.label = video_title
            item.art['thumb'] = item.art['landscape'] = video_image
            item.info['plot'] = video_plot

            item.set_callback(get_video_url,
                              item_id=item_id,
                              next_url=video_url)
            item_post_treatment(item, is_playable=True, is_downloadable=True)
            yield item

        if json_parser["episodes"]["paging"]["hasNextPage"]:
            yield Listitem.next_page(
                item_id=item_id,
                next_url=json_parser["episodes"]["paging"]["URLPage"])

    elif 'detail' in json_parser:

        if 'seasons' in json_parser['detail']:
            for seasons_datas in json_parser['detail']['seasons']:
                if 'seasonNumber' in seasons_datas:
                    season_title = seasons_datas['onClick']['displayName'] + \
                        ' (Saison ' + str(seasons_datas["seasonNumber"]) + ')'
                else:
                    season_title = seasons_datas['onClick']['displayName']
                season_url = seasons_datas['onClick']['URLPage']

                item = Listitem()
                item.label = season_title
                item.set_callback(list_videos,
                                  item_id=item_id,
                                  next_url=season_url)
                item_post_treatment(item)
                yield item

        else:
            # Case just one video
            program_title = json_parser['currentPage']['displayName']
            video_datas = json_parser['detail']['informations']

            if 'subtitle' in video_datas:
                video_title = program_title + ' - ' + video_datas[
                    'title'] + ' - ' + video_datas['subtitle']
            else:
                video_title = program_title + ' - ' + video_datas['title']
            video_image = video_datas['URLImage']
            video_plot = ''
            if 'summary' in video_datas:
                video_plot = video_datas['summary']
            if 'contentAvailability' in video_datas:
                video_url = video_datas["contentAvailability"][
                    "availabilities"]["stream"]["URLMedias"]
            else:
                video_url = video_datas["URLMedias"]

            item = Listitem()
            item.label = video_title
            item.art['thumb'] = item.art['landscape'] = video_image
            item.info['plot'] = video_plot

            item.set_callback(get_video_url,
                              item_id=item_id,
                              next_url=video_url)
            item_post_treatment(item, is_playable=True, is_downloadable=True)
            yield item

    elif 'contents' in json_parser:

        for content_datas in json_parser['contents']:
            if content_datas["type"] != 'article':
                if 'subtitle' in content_datas:
                    content_title = content_datas['title'] + \
                        ' - ' + content_datas['subtitle']
                else:
                    content_title = content_datas['title']
                content_image = content_datas['URLImage']
                content_url = content_datas['onClick']['URLPage']

                item = Listitem()
                item.label = content_title
                item.art['thumb'] = item.art['landscape'] = content_image

                item.set_callback(list_programs,
                                  item_id=item_id,
                                  next_url=content_url)
                item_post_treatment(item)
                yield item
コード例 #6
0
def list_videos_emissions_2(plugin, item_id, page, show_url, last_page,
                            **kwargs):
    resp = urlquick.get(show_url + '?page=%s' % page)
    root = resp.parse()

    if root.find(".//section[@class='media-meta-list by2 j_w']") is not None:
        root_episodes = root.find(
            ".//section[@class='media-meta-list by2 j_w']")
        episodes = root_episodes.findall(".//figure[@class='media-meta-fig']")
    else:
        episodes = root.findall(".//figure[@class='media-meta-fig']")

    for episode in episodes:
        item = Listitem()
        if episode.find('.//h3') is not None:
            item.label = episode.find('.//h3').find('.//span').find(
                './/a').find('.//strong').text.strip() + ' - ' + episode.find(
                    './/h3').find('.//span').find('.//a').find(
                        './/strong').tail.strip()
        else:
            if episode.find('.//h2/span/a/strong') is not None:
                item.label = episode.find('.//h2/span/a/strong').text.strip() \
                    + ' - ' + episode.find('.//h2/span/a/strong').tail.strip()
            elif episode.find('.//h2/span/span') is not None:
                item.label = episode.find('.//h2/span/span').text.strip()
            elif episode.find('.//h2/span/a') is not None:
                item.label = episode.find('.//h2/span/a').text.strip()
            else:
                item.label = ''

        if episode.find('.//a') is not None:
            if '?cmedia=' in episode.find('.//a').get('href'):
                video_id = episode.find('.//a').get('href').split(
                    '?cmedia=')[1]
            elif 'cfilm=' in episode.find('.//a').get('href') or \
                    'cserie=' in episode.find('.//a').get('href'):
                video_id = episode.find('.//h2').find('.//span').find(
                    './/a').get('href').split('_cmedia=')[1].split('&')[0]
            else:
                video_id = episode.find('.//a').get('href').split(
                    '-')[1].replace('/', '')
        else:
            # TODO: ↪ Root menu (1) ➡ Websites (3) ➡ Allociné (1) ➡ Les émissions (1) ➡ Stars (6) ➡ Clips musicaux (3) ➡ # Les videos (1) ➡ [B]Next page 2[/B]
            continue

        for plot_value in episode.find(
                ".//div[@class='media-meta-figcaption-inner']").findall(
                    './/p'):
            item.info['plot'] = plot_value.text.strip()
        if episode.find('.//meta') is not None:
            item.art['thumb'] = item.art['landscape'] = episode.find(
                './/meta').get('content')
        else:
            if episode.find('.//img').get('data-attr') is not None:
                image_json_parser = json.loads(
                    episode.find('.//img').get('data-attr'))
                item.art['thumb'] = item.art['landscape'] = image_json_parser[
                    'src']
            else:
                item.art['thumb'] = item.art['landscape'] = episode.find(
                    './/img').get('src')

        item.set_callback(get_video_url, item_id=item_id, video_id=video_id)
        item_post_treatment(item, is_playable=True, is_downloadable=True)
        yield item

    # More videos...
    yield Listitem.next_page(item_id=item_id,
                             page=page + 1,
                             last_page=last_page,
                             show_url=show_url)
コード例 #7
0
    for video_datas in list_videos_datas:
        video_title = ''
        if video_datas.find('.//img').get('alt'):
            video_title = video_datas.find('.//img').get('alt').replace(
                'VIDEO: ', '')
        video_image = video_datas.find('.//img').get('data-src')
        video_id = video_datas.find('.//figure').get('data-id')

        item = Listitem()
        item.label = video_title
        item.art['thumb'] = item.art['landscape'] = video_image

        item.set_callback(get_video_url,
                          item_id=item_id,
                          video_id=video_id)
        item_post_treatment(item, is_playable=True, is_downloadable=True)
        yield item
=======
    for script_data in root.iterfind(".//script[@type='text/javascript']"):
        if script_data.text and "__abcnews__" in script_data.text:
            script = script_data.text
            page_data = script[script.find('{'):script.rfind('}') + 1]
            json_parser = json.loads(page_data)
            for element in json_parser['page']['content']['section']['bands']:
                try:
                    block = element['blocks'][0]
                    if block['componentKey'] == 'fullEpisodesBlock':
                        list_videos_datas = block['items']['latestVideos']
                        for video_datas in list_videos_datas:
                            video_title = video_datas['title']
                            video_id = video_datas['id']
コード例 #8
0
def list_videos(plugin, item_id, next_url, sub_program_title, **kwargs):

    resp = urlquick.get(next_url)
    json_parser = json.loads(resp.text)

    for sub_program_datas in json_parser["strates"]:
        if 'title' in sub_program_datas:
            if sub_program_title == sub_program_datas["title"]:
                if 'contents' in sub_program_datas:
                    for video_datas in sub_program_datas["contents"]:
                        if video_datas["type"] == 'quicktime' or video_datas["type"] == 'pfv' or video_datas["type"] == 'VoD' or video_datas["type"] == 'detailPage':
                            if 'title' in video_datas:
                                if 'subtitle' in video_datas:
                                    video_title = video_datas['subtitle'] + ' - ' + video_datas['title']
                                else:
                                    video_title = video_datas['title']
                            else:
                                video_title = video_datas["onClick"][
                                    "displayName"]
                            video_image = video_datas['URLImage']
                            video_url = ''
                            if video_datas["type"] == 'quicktime':
                                video_url = video_datas["onClick"]["URLMedias"]
                            else:
                                resp2 = urlquick.get(
                                    video_datas["onClick"]["URLPage"])
                                json_parser2 = json.loads(resp2.text)
                                video_url = json_parser2['detail'][
                                    'informations']['URLMedias']

                            item = Listitem()
                            item.label = video_title
                            item.art['thumb'] = item.art['landscape'] = video_image

                            item.set_callback(
                                get_video_url,
                                item_id=item_id,
                                next_url=video_url)
                            item_post_treatment(
                                item, is_playable=True, is_downloadable=True)
                            yield item
        else:
            if sub_program_title == json_parser["currentPage"]["displayName"]:
                if 'contents' in sub_program_datas:
                    for video_datas in sub_program_datas["contents"]:
                        if video_datas["type"] == 'quicktime' or video_datas["type"] == 'pfv' or video_datas["type"] == 'VoD' or video_datas["type"] == 'detailPage':
                            if 'title' in video_datas:
                                if 'subtitle' in video_datas:
                                    video_title = video_datas['subtitle'] + ' - ' + video_datas['title']
                                else:
                                    video_title = video_datas['title']
                            else:
                                video_title = video_datas["onClick"][
                                    "displayName"]
                            video_image = video_datas['URLImage']
                            video_url = ''
                            if video_datas["type"] == 'quicktime':
                                video_url = video_datas["onClick"]["URLMedias"]
                            else:
                                resp2 = urlquick.get(
                                    video_datas["onClick"]["URLPage"])
                                json_parser2 = json.loads(resp2.text)
                                video_url = json_parser2['detail'][
                                    'informations']['URLMedias']

                            item = Listitem()
                            item.label = video_title
                            item.art['thumb'] = item.art['landscape'] = video_image

                            item.set_callback(
                                get_video_url,
                                item_id=item_id,
                                next_url=video_url)
                            item_post_treatment(
                                item, is_playable=True, is_downloadable=True)
                            yield item
コード例 #9
0
def list_sub_programs(plugin, item_id, next_url, **kwargs):

    resp = urlquick.get(next_url)
    json_parser = json.loads(resp.text)

    if 'strates' in json_parser:
        for sub_program_datas in json_parser["strates"]:

            if 'title' in sub_program_datas:
                sub_program_title = sub_program_datas["title"]
            else:
                sub_program_title = json_parser["currentPage"]["displayName"]

            item = Listitem()
            item.label = sub_program_title
            item.set_callback(
                list_videos,
                item_id=item_id,
                next_url=next_url,
                sub_program_title=sub_program_title)
            item_post_treatment(item)
            yield item

    elif 'parentShow' in json_parser:
        if 'seasons' in json_parser['parentShow']:
            for seasons_datas in json_parser['parentShow']['seasons']:
                season_title = seasons_datas['onClick']['displayName']
                season_url = seasons_datas['onClick']['URLPage']

                item = Listitem()
                item.label = season_title
                item.set_callback(
                    list_videos_seasons, item_id=item_id, next_url=season_url)
                item_post_treatment(item)
                yield item

    elif 'detail' in json_parser:

        if 'seasons' in json_parser['detail']:
            for seasons_datas in json_parser['detail']['seasons']:
                season_title = seasons_datas['onClick']['displayName']
                season_url = seasons_datas['onClick']['URLPage']

                item = Listitem()
                item.label = season_title
                item.set_callback(
                    list_videos_seasons, item_id=item_id, next_url=season_url)
                item_post_treatment(item)
                yield item
        else:
            # Case just one video
            program_title = json_parser['currentPage']['displayName']
            video_datas = json_parser['detail']['informations']

            if 'subtitle' in video_datas:
                video_title = program_title + ' ' + video_datas['title'] + ' ' + video_datas['subtitle']
            else:
                video_title = program_title + ' ' + video_datas['title']
            video_image = video_datas['URLImage']
            video_plot = ''
            if 'summary' in video_datas:
                video_plot = video_datas['summary']
            if 'URLMedias' in video_datas:
                video_url = video_datas['URLMedias']
            else:
                video_url = URL_ROOT_SITE + json_parser['currentPage']['path']

            item = Listitem()
            item.label = video_title
            item.art['thumb'] = item.art['landscape'] = video_image
            item.info['plot'] = video_plot

            item.set_callback(
                get_video_url,
                item_id=item_id,
                next_url=video_url)
            item_post_treatment(item, is_playable=True, is_downloadable=True)
            yield item

    elif 'contents' in json_parser:

        for video_datas in json_parser['contents']:
            if 'subtitle' in video_datas:
                video_title = video_datas['title'] + ' ' + video_datas['subtitle']
            else:
                video_title = video_datas['title']
            video_image = video_datas['URLImage']
            video_url = URL_ROOT_SITE + video_datas['onClick']['path']

            item = Listitem()
            item.label = video_title
            item.art['thumb'] = item.art['landscape'] = video_image

            item.set_callback(
                get_video_url,
                item_id=item_id,
                next_url=video_url)
            item_post_treatment(item, is_playable=True, is_downloadable=True)
            yield item
コード例 #10
0
def list_videos_program_concert(plugin, item_id, program_url, **kwargs):

    if '/api/' in program_url:
        resp = urlquick.get(
            program_url.replace('https://api-internal.arte.tv',
                                'https://www.arte.tv/guide').replace(" ", ""))
        json_parser = json.loads(resp.text)
        for video_datas in json_parser['data']:
            if video_datas['subtitle'] is not None:
                video_title = video_datas['title'] + ' - ' + video_datas[
                    'subtitle']
            else:
                video_title = video_datas['title']
            video_id = video_datas['programId']
            video_image = ''
            if 'resolutions' in video_datas['images']['landscape']:
                for video_image_datas in video_datas['images']['landscape'][
                        'resolutions']:
                    video_image = video_image_datas['url']
            video_duration = video_datas["duration"]
            video_plot = video_datas.get("shortDescription", '')

            item = Listitem()
            item.label = video_title
            item.art['thumb'] = item.art['landscape'] = video_image
            item.info['duration'] = video_duration
            item.info['plot'] = video_plot

            item.set_callback(get_video_url,
                              item_id=item_id,
                              video_id=video_id)
            item_post_treatment(item, is_playable=True, is_downloadable=True)
            yield item

        if json_parser['nextPage'] is not None:
            yield Listitem.next_page(item_id=item_id,
                                     program_url=json_parser['nextPage'])
    else:
        resp = urlquick.get(program_url.replace(" ", ""))
        json_value = re.compile(r'_INITIAL_STATE__ \= (.*?)\}\;').findall(
            resp.text)[0]
        json_parser = json.loads(json_value + '}')

        value_code = json_parser['pages']['currentCode']
        videos_datas = json_parser['pages']['list'][value_code]['zones'][0]
        for video_datas in videos_datas['data']:
            if video_datas['subtitle'] is not None:
                video_title = video_datas['title'] + ' - ' + video_datas[
                    'subtitle']
            else:
                video_title = video_datas['title']
            video_id = video_datas['programId']
            video_image = ''
            if 'resolutions' in video_datas['images']['landscape']:
                for video_image_datas in video_datas['images']['landscape'][
                        'resolutions']:
                    video_image = video_image_datas['url']
            video_duration = video_datas["duration"]
            video_plot = video_datas.get("shortDescription", '')

            item = Listitem()
            item.label = video_title
            item.art['thumb'] = item.art['landscape'] = video_image
            item.info['duration'] = video_duration
            item.info['plot'] = video_plot

            item.set_callback(get_video_url,
                              item_id=item_id,
                              video_id=video_id)
            item_post_treatment(item, is_playable=True, is_downloadable=True)
            yield item

        if videos_datas['nextPage'] is not None:
            yield Listitem.next_page(item_id=item_id,
                                     program_url=videos_datas['nextPage'])
コード例 #11
0
def list_programs(plugin, item_id, sub_category_code_name, sub_category_url,
                  **kwargs):
    """
    Build programs listing
    - Les feux de l'amour
    - ...
    """
    resp = urlquick.get(sub_category_url)
    json_value = re.compile(r'_INITIAL_STATE__ \= (.*?)\}\;').findall(
        resp.text)[0]
    json_parser = json.loads(json_value + '}')

    value_code = json_parser['pages']['currentCode']
    for sub_category_datas in json_parser['pages']['list'][value_code][
            'zones']:
        if sub_category_datas['code']['name'] == sub_category_code_name:
            for program_datas in sub_category_datas['data']:
                if program_datas[
                        'programId'] is not None and 'RC-' in program_datas[
                            'programId']:
                    program_title = program_datas['title']
                    program_id = program_datas['programId']
                    program_image = ''
                    if program_datas['images']['landscape'] is not None:
                        if 'resolutions' in program_datas['images'][
                                'landscape']:
                            for image_datas in program_datas['images'][
                                    'landscape']['resolutions']:
                                program_image = image_datas['url']
                    elif program_datas['images']['square'] is not None:
                        if 'resolutions' in program_datas['images']['square']:
                            for image_datas in program_datas['images'][
                                    'square']['resolutions']:
                                program_image = image_datas['url']

                    item = Listitem()
                    item.label = program_title
                    item.art['thumb'] = item.art['landscape'] = program_image
                    item.set_callback(
                        list_videos_program,
                        item_id=item_id,
                        sub_category_code_name=sub_category_code_name,
                        program_id=program_id)
                    item_post_treatment(item)
                    yield item
                else:
                    if program_datas['subtitle'] is not None:
                        video_title = program_datas[
                            'title'] + ' - ' + program_datas['subtitle']
                    else:
                        video_title = program_datas['title']
                    video_id = program_datas['programId']
                    video_image = ''
                    if program_datas['images']['landscape'] is not None:
                        if 'resolutions' in program_datas['images'][
                                'landscape']:
                            for video_image_datas in program_datas['images'][
                                    'landscape']['resolutions']:
                                video_image = video_image_datas['url']
                    elif program_datas['images']['square'] is not None:
                        if 'resolutions' in program_datas['images']['square']:
                            for image_datas in program_datas['images'][
                                    'square']['resolutions']:
                                program_image = image_datas['url']
                    video_duration = program_datas["duration"]
                    video_plot = program_datas.get("shortDescription", '')

                    item = Listitem()
                    item.label = video_title
                    item.art['thumb'] = item.art['landscape'] = video_image
                    item.info['duration'] = video_duration
                    item.info['plot'] = video_plot

                    item.set_callback(get_video_url,
                                      item_id=item_id,
                                      video_id=video_id)
                    item_post_treatment(item,
                                        is_playable=True,
                                        is_downloadable=True)
                    yield item
コード例 #12
0
def list_sub_categories(plugin, item_id, category_url, **kwargs):
    """
    Build programs listing
    - Les feux de l'amour
    - ...
    """
    resp = urlquick.get(category_url)
    json_value = re.compile(r'_INITIAL_STATE__ \= (.*?)\}\;').findall(
        resp.text)[0]
    json_parser = json.loads(json_value + '}')

    value_code = json_parser['pages']['currentCode']
    for sub_category_datas in json_parser['pages']['list'][value_code][
            'zones']:
        if 'subcategory' in sub_category_datas['code']['name']:
            sub_category_title = sub_category_datas['title']
            sub_category_url = sub_category_datas['link']['url']

            item = Listitem()
            item.label = sub_category_title
            item.set_callback(list_videos_sub_category,
                              item_id=item_id,
                              sub_category_url=sub_category_url)
            item_post_treatment(item)
            yield item

        elif 'genres' in sub_category_datas['code']['name']:
            sub_category_title = sub_category_datas['title']
            sub_category_code_name = sub_category_datas['code']['name']
            sub_category_url = category_url

            item = Listitem()
            item.label = sub_category_title

            item.set_callback(list_programs_concert,
                              item_id=item_id,
                              sub_category_code_name=sub_category_code_name,
                              sub_category_url=sub_category_url)
            item_post_treatment(item)
            yield item

        elif 'banner' in sub_category_datas['code']['name']:
            continue

        elif 'playlists' in sub_category_datas['code']['name'] or \
                'collections' in sub_category_datas['code']['name'] or \
                'magazines' in sub_category_datas['code']['name'] or \
                'ARTE_CONCERT' in sub_category_datas['code']['name']:
            sub_category_title = sub_category_datas['title']
            sub_category_code_name = sub_category_datas['code']['name']
            sub_category_url = category_url

            item = Listitem()
            item.label = sub_category_title

            item.set_callback(list_programs,
                              item_id=item_id,
                              sub_category_code_name=sub_category_code_name,
                              sub_category_url=sub_category_url)
            item_post_treatment(item)
            yield item