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
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)
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
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('"', '"') 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'])
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
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)
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']
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
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
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'])
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
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