def show_subcats(url=_common.args.url): show_data = _connection.getURL(url) show_tree = BeautifulSoup(show_data, 'html.parser', parse_only=SoupStrainer('div', class_='group-a')) subs = show_tree.find_all('a') for sub in subs: name = sub.string url = sub['href'] if BASE not in url: url = BASE + url if name is None: name = sub.contents[-1] if 'Episodes' in name or 'Clips' in name or 'Peeks' in name or 'Watch' in name or 'Video' in name: if 'id=' in url: u = sys.argv[0] u += '?url="' + urllib.quote_plus(url) + '"' u += '&mode="' + SITE + '"' u += '&sitemode="playurl"' item = xbmcgui.ListItem(name) item.setInfo(type='video', infoLabels={'title': name}) item.setProperty('isplayable', 'true') xbmcplugin.addDirectoryItem(pluginHandle, url=u, listitem=item, isFolder=False) else: _common.add_directory(name, SITE, 'add_videos', url) _common.set_view('seasons')
def seasons(season_url=_common.args.url): season_data = _connection.getURL(FULLEPISODES % season_url + '&start=0&rows=1', forwardheader='12.13.14.15') try: season_menu = int( BeautifulSoup(season_data).find( 'section', class_='video-content-list')['data-numfound']) except: season_menu = 0 if season_menu > 0: season_url2 = FULLEPISODES % season_url + '&start=0&rows=' + str( season_menu) _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) season_data2 = _connection.getURL(CLIPS % season_url + '&start=0&rows=1', forwardheader='12.13.14.15') try: season_menu2 = int( BeautifulSoup(season_data2).find( 'section', class_='video-content-list')['data-numfound']) except: season_menu2 = 0 if season_menu2 > 0: season_url3 = CLIPS % season_url + '&start=0&rows=' + str(season_menu2) _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(collection_ids = _common.args.url): for collection_id in collection_ids.split(','): if ',' not in collection_ids: season_url = SEASONSEPISODES else: season_url = SEASONSEPISODESEXTRA season_data = _connection.getURL(season_url % collection_id) print BeautifulSoup(season_data, 'html.parser').episodes season_tree = BeautifulSoup(season_data, 'html.parser') episode_count = int(season_tree.episodes['totalitems']) if episode_count > 0: if ',' not in collection_ids: display = 'Episodes' else: display = 'Episodes - %s' % season_tree.episode['collectiontitle'] _common.add_directory(display, SITE, 'episodes', FULLEPISODES % collection_id) for collection_id in collection_ids.split(','): if ',' not in collection_ids: seasonclips_url = SEASONSCLIPS else: seasonclips_url = SEASONSCLIPSEXTRA season_data2 = _connection.getURL(seasonclips_url % collection_id) season_tree2 = BeautifulSoup(season_data2, 'html.parser') print BeautifulSoup(season_data2, 'html.parser').episodes episode_count = int(season_tree2.episodes['totalitems']) if episode_count > 0: if ',' not in collection_ids: display = 'Clips' else: display = 'Clips - %s' % season_tree2.episode['collectiontitle'] _common.add_directory(display, SITE, 'episodes', CLIPS % collection_id) _common.set_view('seasons')
def seasons(collection_ids=_common.args.url): for collection_id in collection_ids.split(","): if "," not in collection_ids: season_url = SEASONSEPISODES else: season_url = SEASONSEPISODESEXTRA season_data = _connection.getURL(season_url % collection_id) print BeautifulSoup(season_data, "html.parser").episodes season_tree = BeautifulSoup(season_data, "html.parser") episode_count = int(season_tree.episodes["totalitems"]) if episode_count > 0: if "," not in collection_ids: display = "Episodes" else: display = "Episodes - %s" % season_tree.episode["collectiontitle"] _common.add_directory(display, SITE, "episodes", FULLEPISODES % collection_id) for collection_id in collection_ids.split(","): if "," not in collection_ids: seasonclips_url = SEASONSCLIPS else: seasonclips_url = SEASONSCLIPSEXTRA season_data2 = _connection.getURL(seasonclips_url % collection_id) season_tree2 = BeautifulSoup(season_data2, "html.parser") print BeautifulSoup(season_data2, "html.parser").episodes episode_count = int(season_tree2.episodes["totalitems"]) if episode_count > 0: if "," not in collection_ids: display = "Clips" else: display = "Clips - %s" % season_tree2.episode["collectiontitle"] _common.add_directory(display, SITE, "episodes", CLIPS % collection_id) _common.set_view("seasons")
def seasons(collection_ids = _common.args.url): for collection_id in collection_ids.split(','): if ',' not in collection_ids: season_url = SEASONSEPISODES else: season_url = SEASONSEPISODESEXTRA season_data = _connection.getURL(season_url % collection_id) season_tree = BeautifulSoup(season_data, 'html.parser') episode_count = int(season_tree.episodes['totalitems']) if episode_count > 0: if ',' not in collection_ids: display = 'Episodes' else: display = 'Episodes - %s' % season_tree.episode['collectiontitle'] _common.add_directory(display, SITE, 'episodes', FULLEPISODES % collection_id) for collection_id in collection_ids.split(','): if ',' not in collection_ids: seasonclips_url = SEASONSCLIPS else: seasonclips_url = SEASONSCLIPSEXTRA season_data2 = _connection.getURL(seasonclips_url % collection_id) season_tree2 = BeautifulSoup(season_data2, 'html.parser') episode_count = int(season_tree2.episodes['totalitems']) if episode_count > 0: if ',' not in collection_ids: display = 'Clips' else: display = 'Clips - %s' % season_tree2.episode['collectiontitle'] _common.add_directory(display, SITE, 'episodes', CLIPS % collection_id) _common.set_view('seasons')
def seasons(SITE, BRANDID): xbmcplugin.addSortMethod(pluginHandle, xbmcplugin.SORT_METHOD_LABEL) season_url = _common.args.url season_menu = [] season_numbers = [] clip_numbers = [] season_url2 = VIDEOLIST % BRANDID + '001/-1/' + season_url + '/-1/-1/-1/-1' season_data = _connection.getURL(season_url2) season_data2 = simplejson.loads(season_data)['videos'] season_count = int(season_data2['@count']) if season_count > 1: season_menu = season_data2['video'] elif season_count == 1: season_menu.append(dict(season_data2['video'])) for season_item in season_menu: if int(season_item['@accesslevel']) == 0: if season_item['@type'] == 'lf': try: if season_item['season']['@id'] not in season_numbers: season_numbers.append(season_item['season']['@id']) season_name = 'Season ' + season_item['season']['@id'] season_url3 = VIDEOLIST % BRANDID + '001/' + season_item['@type'] + '/' + season_url + '/' + season_item['season']['@id'] + '/-1/-1/-1' _common.add_directory(season_name, SITE, 'episodes', season_url3) except: pass elif season_item['@type'] == 'sf': try: if season_item['season']['@id'] not in clip_numbers: clip_numbers.append(season_item['season']['@id']) season_name = 'Season Clips ' + season_item['season']['@id'] season_url4 = VIDEOLIST % BRANDID + '001/' + season_item['@type'] + '/' + season_url + '/' + season_item['season']['@id'] + '/-1/-1/-1' _common.add_directory(season_name, SITE, 'episodes', season_url4) except: pass _common.set_view('seasons')
def season_options(url = _common.args.url): _common.add_directory('All Videos', SITE,'add_videos',url) _common.add_directory('Full Episodes', SITE, 'add_videos', url + 'fulleps') _common.add_directory('Bonus Clips', SITE, 'add_videos', url + 'bonusclips') _common.add_directory('After Shows', SITE, 'add_videos', url + 'aftershows') _common.add_directory('Sneak Peeks', SITE, 'add_videos', url + 'sneakpeeks') _common.set_view('seasons')
def seasons(season_url = _common.args.url): base_url = season_url season_dict = OrderedDict({}) if 'the-tonight-show' in season_url: add_show_thetonightshow(season_url) return has_episodes = False video_url = season_url + '/video' episode_url = season_url for season_url in (episode_url, video_url): season_data = _connection.getURL(season_url) season_tree = BeautifulSoup(season_data, 'html.parser') season_menu = season_tree.find_all('div', class_ = 'nbc_mpx_carousel') for season in season_menu: try: season_title = season.h2.text.strip() season_title = re.sub(' +',' ', season_title) season_id = season['id'] season_node = season_id.split('_')[-1] if season_title not in season_dict.keys(): season_dict[season_title] = EPISODES % season_node if 'full episodes' == season_title.lower() or 'Season' in season_title: has_episodes = True except: pass if not has_episodes: _common.add_directory('Full Episodes', SITE, 'episodes', base_url + '/episodes') for season_title in season_dict: season_url = season_dict[season_title] _common.add_directory(season_title, SITE, 'episodes', season_url) _common.set_view('seasons')
def seasons(season_url = _common.args.url): xbmcplugin.addSortMethod(pluginHandle, xbmcplugin.SORT_METHOD_LABEL) season_menu = [] season_numbers = [] clip_numbers = [] season_url2 = VIDEOLIST + '-1/' + season_url + '/-1/-1/-1/-1' season_data = _connection.getURL(season_url2) season_data2 = simplejson.loads(season_data)['videos'] season_count = int(season_data2['@count']) if season_count > 1: season_menu = season_data2['video'] elif season_count == 1: season_menu.append(dict(season_data2['video'])) for season_item in season_menu: if int(season_item['@accesslevel']) == 0: if season_item['@type'] == 'lf': try: if season_item['season']['@id'] not in season_numbers: season_numbers.append(season_item['season']['@id']) season_name = 'Season ' + season_item['season']['@id'] season_url3 = VIDEOLIST + season_item['@type'] + '/' + season_url + '/' + season_item['season']['@id'] + '/-1/-1/-1' _common.add_directory(season_name, SITE, 'episodes', season_url3) except: pass elif season_item['@type'] == 'sf': try: if season_item['season']['@id'] not in clip_numbers: clip_numbers.append(season_item['season']['@id']) season_name = 'Season Clips ' + season_item['season']['@id'] season_url4 = VIDEOLIST + season_item['@type'] + '/' + season_url + '/' + season_item['season']['@id'] + '/-1/-1/-1' _common.add_directory(season_name, SITE, 'episodes', season_url4) except: pass _common.set_view('seasons')
def seasons(show_url = _common.args.url): """ Load the items for a show. This can be "Full Epiodes" and "Clips", or something based on the data. Southpark has a different site structure, so this is redirected to a different function. Some pages have a manifest Javascript object that contains JSON feeds to all episodes. Other pages do not have this. This function tries to find if the show home page has such a feed. If so, only data from the feed is used. If the home page does not have the feed, try to find the URL for the full episodes and the clips pages. For each of these pages the script tries to load the manifest feed. If this cannot be found, add items based on the HTML page. A consequence of this is that some shows can have mixed results: full episides pages does not have a manifest, but clips does. This can lead to duplication of container items. Many shows seem to contain a feed for full episodes, but this feed is empty """ if 'South Park' in _common.args.name: add_items_from_southpark(show_url) else: triforceManifestFeed = _get_manifest(show_url) if triforceManifestFeed: add_items_from_manifestfile(triforceManifestFeed, show_url) else: full_episodes_url = get_full_episodes_url(show_url) clips_url = get_clips_url(show_url) if full_episodes_url: triforceManifestFeed = _get_manifest(full_episodes_url) if triforceManifestFeed: add_items_from_manifestfile(triforceManifestFeed, full_episodes_url) else: _common.add_directory('Full Episodes', SITE, 'episodes', full_episodes_url) if clips_url: triforceManifestFeed = _get_manifest(clips_url) if triforceManifestFeed: add_items_from_manifestfile(triforceManifestFeed, clips_url) else: _common.add_directory('Full Episodes', SITE, 'episodes', clips_url) _common.set_view('seasons')
def seasons(season_url = _common.args.url): season_data = _connection.getURL(season_url) season_tree = BeautifulSoup(season_data, 'html.parser') season_menu = season_tree.find_all('div', class_ = 'tab-wrap') for season_item in season_menu: season_name = season_item.h2.text _common.add_directory(season_name, SITE, 'episodes', season_url) _common.set_view('seasons')
def seasons(season_url=_common.args.url): season_data = _connection.getURL(season_url) season_tree = BeautifulSoup(season_data) season_menu = season_tree.find_all('div', class_='tab-wrap') for season_item in season_menu: season_name = season_item.h2.text _common.add_directory(season_name, SITE, 'episodes', season_url) _common.set_view('seasons')
def season_options(url=_common.args.url): _common.add_directory('All Videos', SITE, 'add_videos', url) _common.add_directory('Full Episodes', SITE, 'add_videos', url + 'fulleps') _common.add_directory('Bonus Clips', SITE, 'add_videos', url + 'bonusclips') _common.add_directory('After Shows', SITE, 'add_videos', url + 'aftershows') _common.add_directory('Sneak Peeks', SITE, 'add_videos', url + 'sneakpeeks') _common.set_view('seasons')
def seasons(season_url = _common.args.url): for type in TYPES: season_data = cove.videos.filter(fields = 'mediafiles', filter_program = season_url, order_by = '-airdate', filter_availability_status = 'Available', limit_start = 0, filter_type = type) try: season_menu = int(season_data['count']) except: season_menu = 0 if season_menu > 0: _common.add_directory(type+'s', SITE, 'episodes', (season_url + '#'+type)) _common.set_view('seasons')
def seasons(season_url = _common.args.url): seasons = [] season_data = _connection.getURL(season_url) media_list = simplejson.loads(season_data)['FolderList'][0]['PlaylistList'][0]['MediaList'] for media in media_list: season_number = media['Season'] if season_number not in seasons: season_title = 'Season %s' % season_number seasons.append(season_number) _common.add_directory(season_title, SITE, 'episodes', season_url + '#' + season_number) _common.set_view('seasons')
def seasons(season_url = _common.args.url): season_data = _connection.getURL(season_url) season_tree = BeautifulSoup(season_data, 'html.parser', parse_only = SoupStrainer('div')) season_source = season_tree.find('div', id = 'TPVideoPlaylistTaxonomyContainer')['source'] playlist_url = PLAYLIST % season_source playlist_data = _connection.getURL(playlist_url) playlist_data = playlist_data.replace('$pdk.NBCplayer.ShowPlayerTaxonomy.GetList(', '').replace(');', '') season_menu = simplejson.loads(playlist_data) for season_item in season_menu['playlistTaxonomy']: _common.add_directory(season_item['reference']['name'], SITE, 'episodes', FEED % season_item['reference']['feed']) _common.set_view('seasons')
def seasons(show_name = _common.args.url): for type in TYPES: season_data = _connection.getURL(SEASON % (show_name, type)) season_menu = simplejson.loads(season_data) try: season_count = int(season_menu['matched']) except: season_count = 0 if season_count > 0: _common.add_directory(type + 's', SITE, 'episodes', EPISODES % (show_name, type)) _common.set_view('seasons')
def seasons(season_url = _common.args.url): season_data = _connection.getURL(season_url) season_menu = BeautifulSoup(season_data, 'html5lib').find('a', class_ = 'full_episodes') season_menu2 = BeautifulSoup(season_data, 'html5lib').find('a', class_ = 'video_clips') if season_menu is not None: season_url2 = BASE + season_menu['href'] _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) if season_menu2 is not None: season_url3 = BASE + season_menu2['href'] _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(url = _common.args.url): show_data = _connection.getURL(url) show_tree = BeautifulSoup(show_data) season_menu = show_tree.find('select', id = 'videolist_id') if season_menu: season_menu2 = season_menu.find_all('option') for season_item in season_menu2: season_url = BASE + season_item['value'] season_name = season_item.text _common.add_directory(season_name, SITE, 'season_options', season_url) _common.set_view('seasons')
def seasons(SITE, FULLEPISODES, CLIPSSEASON, CLIPS): show_id = _common.args.url master_name = show_id.split('#')[0] show_id = show_id.split('#')[1] _common.add_directory('Full Episodes', SITE, 'episodes', master_name + '#' + FULLEPISODES % show_id) clips_data = _connection.getURL(CLIPSSEASON % show_id) clips_menu = simplejson.loads(clips_data) for season in clips_menu: clip_name = _common.smart_utf8(season['title']) _common.add_directory(clip_name, SITE, 'episodes', master_name + '#' + CLIPS % (show_id, season['id'])) _common.set_view('seasons')
def add_items_from_southpark(show_url): """ Add the seasons for South Park """ show_data = _connection.getURL(show_url) seasons = BeautifulSoup(show_data, 'html5lib').find_all('a',class_='seasonbtn') if seasons: for season in seasons: try: display = 'Season %s' %str(int(season.string)) except: display = 'Special %s' %season.string _common.add_directory(display, SITE, 'episodes', season['href'] )
def seasons(url=_common.args.url): show_data = _connection.getURL(url) show_tree = BeautifulSoup(show_data) season_menu = show_tree.find('select', id='videolist_id') if season_menu: season_menu2 = season_menu.find_all('option') for season_item in season_menu2: season_url = BASE + season_item['value'] season_name = season_item.text _common.add_directory(season_name, SITE, 'season_options', season_url) _common.set_view('seasons')
def seasons(season_url = _common.args.url): season_url = season_url + '/video' season_data = _connection.getURL(season_url) season_tree = BeautifulSoup(season_data, 'html5lib') season_menu = season_tree.find_all('div', class_ = 'nbc_mpx_carousel') for season in season_menu: season_title = season.h2.text.strip() season_title = re.sub(' +',' ', season_title) season_id = season['id'] season_node = season_id.split('_')[-1] _common.add_directory(season_title, SITE, 'episodes', EPISODES % season_node) _common.set_view('seasons')
def seasons(season_url=_common.args.url): season_data = _connection.getURL(season_url) season_menu = BeautifulSoup(season_data, 'html5lib').find('a', class_='full_episodes') season_menu2 = BeautifulSoup(season_data, 'html5lib').find('a', class_='video_clips') if season_menu is not None: season_url2 = BASE + season_menu['href'] _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) if season_menu2 is not None: season_url3 = BASE + season_menu2['href'] _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(SITE, FULLEPISODES, CLIPSSEASON, CLIPS): show_id = _common.args.url master_name = show_id.split('#')[0] show_id = show_id.split('#')[1] _common.add_directory('Full Episodes', SITE, 'episodes', master_name + '#' + FULLEPISODES % show_id) clips_data = _connection.getURL(CLIPSSEASON % show_id) clips_menu = simplejson.loads(clips_data) for season in clips_menu: clip_name = _common.smart_utf8(season['title']) _common.add_directory( clip_name, SITE, 'episodes', master_name + '#' + CLIPS % (show_id, season['id'])) _common.set_view('seasons')
def seasons(season_url = _common.args.url): season_data = _connection.getURL(season_url) season_tree = BeautifulSoup(season_data, 'html.parser', parse_only = SoupStrainer('div')) season_source = season_tree.find('div', id = 'TPVideoPlaylistTaxonomyContainer')['source'] playlist_url = PLAYLIST % season_source playlist_data = _connection.getURL(playlist_url) playlist_data = playlist_data.replace('$pdk.NBCplayer.ShowPlayerTaxonomy.GetList(', '').replace(');', '') season_menu = simplejson.loads(playlist_data) try: for season_item in season_menu['playlistTaxonomy']: _common.add_directory(season_item['reference']['name'], SITE, 'episodes', FEED % season_item['reference']['feed']) except: pass _common.set_view('seasons')
def seasons(season_url = _common.args.url): season_data = _connection.getURL(FULLEPISODES % season_url, header = {'X-Forwarded-For' : '12.13.14.15'}) try: count = int(simplejson.loads(season_data)['meta']['count']) except: count = 0 if count > 0: season_url2 = FULLEPISODES % season_url + '&start=0&rows=' + str(count) _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) season_data2 = _connection.getURL(CLIPS % season_url, header = {'X-Forwarded-For' : '12.13.14.15'}) try: count = int(simplejson.loads(season_data2)['meta']['count']) except: count = 0 if count > 0: season_url3 = CLIPS % season_url + '&start=0&rows=' + str(count) _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(season_url = _common.args.url): season_data = _connection.getURL(season_url) season_tree = BeautifulSoup(season_data, 'html.parser', parse_only = SoupStrainer('div')) season_menu = season_tree.find('a', text = re.compile('full episodes', re.IGNORECASE)) season_menu2 = season_tree.find('a', href = re.compile('(?<!stand-up)/(video|clips)')) if season_menu is not None: season_url2 = season_menu['href'] if 'http' not in season_url2: season_url2 = season_url + season_url2 _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) elif 'episode' in season_url: if 'South Park' in _common.args.name: seasons = BeautifulSoup(season_data, 'html5lib').find_all('a',class_='seasonbtn') if seasons: for season in seasons: try: display = 'Season %s' %str(int(season.string)) except: display = 'Special %s' %season.string _common.add_directory(display, SITE, 'episodes', season['href'] ) else: _common.add_directory('Full Episodes', SITE, 'episodes', season_url) print season_url if season_menu2 is not None: season_url3 = season_menu2['href'] if 'http' not in season_url3: season_url3 = season_url + season_url3 _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(season_url = _common.args.url): fullepisodes = 0 clips = 0 season_data = _connection.getURL(VIDEOLIST % season_url) season_menu = simplejson.loads(season_data)['videos'] for season_item in season_menu: if int(season_item['fullep']) == 1: fullepisodes = 1 else: clips = 1 if fullepisodes == 1: _common.add_directory('Full Episodes', SITE, 'episodes', season_url + '#1') if clips == 1: _common.add_directory('Clips', SITE, 'episodes', season_url + '#0') _common.set_view('seasons')
def seasons(url = _common.args.url): homedir = url.split('/')[-1].replace('-','+') print homedir season_url = FULLEPISODES % homedir season_data = _connection.getURL(season_url) season_menu = simplejson.loads(season_data)[2]['data'] season_tree = BeautifulSoup(season_menu, 'html.parser', parse_only = SoupStrainer('ul', id= 'full-episode-ul')) season_db = [] for season in season_tree.find('ul', id= 'full-episode-ul').find_all('li'): primary = season['data-field_primary_filter_value'] secondary = season['data-field_season_value'] if (primary, secondary) not in season_db: season_db.append((primary, secondary)) _common.add_directory(primary + ' ' + secondary, SITE, 'episodes', season_url + '#' + primary + '#' + secondary) _common.set_view('seasons')
def seasons(season_string = _common.args.url): collection_id = season_string.split('#')[0] tve = season_string.split('#')[1].split('=')[1][1:] clips = season_string.split('#')[2].split('=')[1][1:] for season in tve.split('-'): if season: _common.add_directory('Season ' + season, SITE, 'episodes', FULLEPISODES % (collection_id, season)) for season in clips.split('-'): if season: if season != '*': display = 'Clips Season ' + season else: display = 'Specials' _common.add_directory(display, SITE, 'episodes', CLIPS % (collection_id, season.replace('*', ''))) _common.set_view('seasons')
def seasons(season_url=_common.args.url): fullepisodes = 0 clips = 0 season_data = _connection.getURL(VIDEOLIST % season_url) season_menu = simplejson.loads(season_data)['videos'] for season_item in season_menu: if int(season_item['fullep']) == 1: fullepisodes = 1 else: clips = 1 if fullepisodes == 1: _common.add_directory('Full Episodes', SITE, 'episodes', season_url + '#1') if clips == 1: _common.add_directory('Clips', SITE, 'episodes', season_url + '#0') _common.set_view('seasons')
def seasons(season_url=_common.args.url): if 'the-tonight-show' in season_url: add_show_thetonightshow(season_url) return season_url = season_url + '/video' season_data = _connection.getURL(season_url) season_tree = BeautifulSoup(season_data) season_menu = season_tree.find_all('div', class_='nbc_mpx_carousel') for season in season_menu: season_title = season.h2.text.strip() season_title = re.sub(' +', ' ', season_title) season_id = season['id'] season_node = season_id.split('_')[-1] _common.add_directory(season_title, SITE, 'episodes', EPISODES % season_node) _common.set_view('seasons')
def seasons(): season_data = _connection.getURL(SHOWS) season_tree = BeautifulSoup(season_data) season_videotypes = season_tree.find('select', id = 'rb-video-browser-content_type').find_all('option') season_shows = season_tree.find('select', id = 'rb-video-browser-show').find_all('option') for season_item in season_shows: if season_item['value'] == _common.args.url: season_category = season_item['title'].replace('[','').replace(']','').replace('"','').split(',') for season_videoitem in season_videotypes: if season_videoitem['value'] in season_category: season_name = season_videoitem.string season_url = 'rb-video-browser-num_items=100&module_id_base=rb-video-browser' season_url += '&rb-video-browser-show='+season_item['value'] season_url += '&rb-video-browser-content_type='+season_videoitem['value'] _common.add_directory(season_name, SITE, 'episodes', season_url) _common.set_view('seasons')
def seasons(season_urls = _common.args.url): for season_url in season_urls.split(','): name = season_url.split('#')[0] season_url = season_url.split('#')[1] for type in TYPES: season_data = cove.videos.filter(fields = 'mediafiles', filter_program = season_url, order_by = '-airdate', filter_availability_status = 'Available', limit_start = 0, filter_type = type) try: season_menu = int(season_data['count']) except: season_menu = 0 if season_menu > 0: if ',' in season_urls: print season_data _common.add_directory(name + ' ' + type+'s', SITE, 'episodes', (season_url + '#' + type)) else: _common.add_directory(type+'s', SITE, 'episodes', (season_url + '#' + type)) _common.set_view('seasons')
def add_items_from_southpark(show_url): """ Add the seasons for South Park """ show_data = _connection.getURL(show_url) seasons = BeautifulSoup(show_data, 'html5lib').find('div', class_ = 'seasonPagination').find_all('a') if seasons: for season in seasons: season_url = season['href'] if 'http' not in season_url: season_url = SOUTHPARKBASE + season_url season_number = season.string if season_number == 'ALL': continue try: display = 'Season %s' % str(int(season_number)) except: pass _common.add_directory(display, SITE, 'episodes', season_url )
def add_items_from_manifestfile(triforceManifestFeed, season_url): """ Add container items based on the manifest feed. If there are no items in the feed skip it. Special rule not to add Daily Show items to Colbert Report and vice versa """ if True: #try: feeds = [] for zone in triforceManifestFeed['manifest']['zones']: thiszone = triforceManifestFeed['manifest']['zones'][zone] feed_data = _connection.getURL(thiszone['feed']) feed = simplejson.loads(feed_data) if _keyinfeed(['videos', 'episodes', 'playlist', 'playlists'], feed['result'].keys()): if 'episodes' in feed['result']: if len(feed['result']['episodes']) == 0: continue elif 'videos' in feed['result']: if len(feed['result']['videos']) == 0: continue elif 'playlist' in feed['result']: if len(feed['result']['playlist']) == 0: continue elif 'playlists' in feed['result']: if len(feed['result']['playlists'][0]) == 0: continue title = '' try: title = feed['result']['promo']['headline'] except: pass if title == '': if ' - ' in thiszone['moduleName']: title = thiszone['moduleName'].split(' - ')[1] else: title = thiszone['moduleName'] if title.endswith(' Promo'): title = title[:-6] feeds.append({'title': title, 'url': thiszone['feed']}) feeds.sort(key=lambda x: x['title']) for feed in feeds: if 'Daily Show' in feed['title'] and 'colbertreport' in season_url: continue if 'Colbert' in feed['title'] and 'dailyshow' in season_url: continue # add #ManifestFeed at the end of the URL, so we can detect that this is a feed, not a full page _common.add_directory(feed['title'], SITE, 'episodes', feed['url'] + "#ManifestFeed")
def seasons(season_url = _common.args.url): season_data = _connection.getURL(FULLEPISODES % urllib.quote_plus(season_url) + '&range=0-1') try: season_menu = int(simplejson.loads(season_data)['total_count']) except: season_menu = 0 if season_menu > 0: season_url2 = FULLEPISODES % urllib.quote_plus(season_url) + '&range=0-' + str(season_menu) _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) season_data2 = _connection.getURL(CLIPS % urllib.quote_plus(season_url) + '&range=0-1') try: season_menu2 = int(simplejson.loads(season_data2)['total_count']) except: season_menu2 = 0 if season_menu2 > 0: season_url3 = CLIPS % urllib.quote_plus(season_url) + '&range=0-' + str(season_menu2) _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(season_url = _common.args.url): clip_url = season_url.split('#')[0] episode_id = season_url.split('#')[1] clip_data = _connection.getURL(season_url) episode_data = _connection.getURL(FULLEPISODES % episode_id) try: season_menu = int(simplejson.loads(episode_data)['episodes']['totalItems']) except: season_menu = 0 if season_menu > 0: _common.add_directory('Episodes', SITE, 'episodes', FULLEPISODES % episode_id) try: season_menu = int(simplejson.loads(clip_data)['totalResults']) except: season_menu = 0 if season_menu > 0: _common.add_directory('Clips', SITE, 'episodes', clip_url) _common.set_view('seasons')
def add_items_from_southpark(show_url): """ Add the seasons for South Park """ show_data = _connection.getURL(show_url) seasons = BeautifulSoup(show_data, 'html5lib').find( 'div', class_='seasonPagination').find_all('a') if seasons: for season in seasons: season_url = season['href'] if 'http' not in season_url: season_url = SOUTHPARKBASE + season_url season_number = season.string if season_number == 'ALL': continue try: display = 'Season %s' % str(int(season_number)) except: pass _common.add_directory(display, SITE, 'episodes', season_url)
def seasons(season_url = _common.args.url): season_data = _connection.getURL(FULLEPISODES % season_url) try: season_menu = int(BeautifulSoup(season_data).find('div', class_ = 'total-videos').text.split(' ')[0]) except: season_menu = 0 if season_menu > 0: season_url2 = FULLEPISODES % season_url _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) season_data2 = _connection.getURL(CLIPS % season_url) try: season_menu2 = int(BeautifulSoup(season_data2).find('div', class_ = 'total-videos').text.split(' ')[0]) except: season_menu2 = 0 if season_menu2 > 0: season_url3 = CLIPS % season_url _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(season_url = _common.args.url): season_data = _connection.getURL(FULLEPISODES % season_url + '&start=0&rows=1', header = {'X-Forwarded-For' : '12.13.14.15'}) try: season_menu = int(BeautifulSoup(season_data).find('section', class_ = 'video-content-list')['data-numfound']) except: season_menu = 0 if season_menu > 0: season_url2 = FULLEPISODES % season_url + '&start=0&rows=' + str(season_menu) _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) season_data2 = _connection.getURL(CLIPS % season_url + '&start=0&rows=1', header = {'X-Forwarded-For' : '12.13.14.15'}) try: season_menu2 = int(BeautifulSoup(season_data2).find('section', class_ = 'video-content-list')['data-numfound']) except: season_menu2 = 0 if season_menu2 > 0: season_url3 = CLIPS % season_url + '&start=0&rows=' + str(season_menu2) _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(season_url = _common.args.url): season_data = _connection.getURL(FULLEPISODES % season_url) try: season_menu = int(BeautifulSoup(season_data, 'html.parser').find('div', class_ = 'total-videos').text.split(' ')[0]) except: season_menu = 0 if season_menu > 0: season_url2 = FULLEPISODES % season_url _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) season_data2 = _connection.getURL(CLIPS % season_url) try: season_menu2 = int(BeautifulSoup(season_data2, 'html.parser').find('div', class_ = 'total-videos').text.split(' ')[0]) except: season_menu2 = 0 if season_menu2 > 0: season_url3 = CLIPS % season_url _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(season_url = _common.args.url): season_data = _connection.getURL(FULLEPISODES % urllib.quote_plus(season_url) + '&range=0-1') try: season_menu = int(simplejson.loads(season_data)['totalResults']) except: season_menu = 0 if season_menu > 0: season_url2 = FULLEPISODES % urllib.quote_plus(season_url) + '&range=0-' + str(season_menu) _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) season_data2 = _connection.getURL(CLIPS % urllib.quote_plus(season_url) + '&range=0-1') try: season_menu2 = int(simplejson.loads(season_data2)['totalResults']) except: season_menu2 = 0 if season_menu2 > 0: season_url3 = CLIPS % urllib.quote_plus(season_url) + '&range=0-' + str(season_menu2) _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(url=_common.args.url): homedir = url.split('/')[-1].replace('-', '+') print homedir season_url = FULLEPISODES % homedir season_data = _connection.getURL(season_url) season_menu = simplejson.loads(season_data)[2]['data'] season_tree = BeautifulSoup(season_menu, 'html.parser', parse_only=SoupStrainer('ul', id='full-episode-ul')) season_db = [] for season in season_tree.find('ul', id='full-episode-ul').find_all('li'): primary = season['data-field_primary_filter_value'] secondary = season['data-field_season_value'] if (primary, secondary) not in season_db: season_db.append((primary, secondary)) _common.add_directory(primary + ' ' + secondary, SITE, 'episodes', season_url + '#' + primary + '#' + secondary) _common.set_view('seasons')
def add_items_from_manifestfile(triforceManifestFeed, season_url): """ Add container items based on the manifest feed. If there are no items in the feed skip it. Special rule not to add Daily Show items to Colbert Report and vice versa """ if True: feeds = [] for zone in triforceManifestFeed['manifest']['zones']: thiszone = triforceManifestFeed['manifest']['zones'][zone] feed_data = _connection.getURL(thiszone['feed']) feed = simplejson.loads(feed_data) if _keyinfeed(['videos','episodes','playlist','playlists'], feed['result'].keys()) : if 'episodes' in feed['result']: if len(feed['result']['episodes']) == 0: continue elif 'videos' in feed['result']: if len(feed['result']['videos']) == 0: continue elif 'playlist' in feed['result']: if len(feed['result']['playlist']) == 0: continue elif 'playlists' in feed['result']: if len(feed['result']['playlists'][0]) == 0: continue title = '' try: title = feed['result']['promo']['headline'] except: pass if title == '': if ' - ' in thiszone['moduleName']: title = thiszone['moduleName'].split(' - ')[1] else: title = thiszone['moduleName'] if title.endswith(' Promo'): title = title[:-6] feeds.append({'title': title, 'url': thiszone['feed']}) feeds.sort(key = lambda x: x['title']) for feed in feeds: if 'Daily Show' in feed['title'] and 'colbertreport' in season_url: continue if 'Colbert' in feed['title'] and 'dailyshow' in season_url: continue # add #ManifestFeed at the end of the URL, so we can detect that this is a feed, not a full page _common.add_directory(feed['title'], SITE, 'episodes', feed['url'] + "#ManifestFeed")
def seasons(show_url=_common.args.url): """ Load the items for a show. This can be "Full Epiodes" and "Clips", or something based on the data. Southpark has a different site structure, so this is redirected to a different function. Some pages have a manifest Javascript object that contains JSON feeds to all episodes. Other pages do not have this. This function tries to find if the show home page has such a feed. If so, only data from the feed is used. If the home page does not have the feed, try to find the URL for the full episodes and the clips pages. For each of these pages the script tries to load the manifest feed. If this cannot be found, add items based on the HTML page. A consequence of this is that some shows can have mixed results: full episides pages does not have a manifest, but clips does. This can lead to duplication of container items. Many shows seem to contain a feed for full episodes, but this feed is empty """ if 'South Park' in _common.args.name: add_items_from_southpark(show_url) else: triforceManifestFeed = _get_manifest(show_url) if triforceManifestFeed: add_items_from_manifestfile(triforceManifestFeed, show_url) else: full_episodes_url = get_full_episodes_url(show_url) clips_url = get_clips_url(show_url) if full_episodes_url: triforceManifestFeed = _get_manifest(full_episodes_url) if triforceManifestFeed: add_items_from_manifestfile(triforceManifestFeed, full_episodes_url) else: _common.add_directory('Full Episodes', SITE, 'episodes', full_episodes_url) if clips_url: triforceManifestFeed = _get_manifest(clips_url) if triforceManifestFeed: add_items_from_manifestfile(triforceManifestFeed, clips_url) else: _common.add_directory('Full Episodes', SITE, 'episodes', clips_url) _common.set_view('seasons')
def seasons(season_urls = _common.args.url): root_url = season_urls if season_urls[-1:] == '/': season_urls = season_urls + 'video' else: season_urls = season_urls + '/video' season_data = _connection.getURL(season_urls) show_id = re.compile('video.settings.show_id = (.*);').findall(season_data)[0] section_ids = re.compile('video.section_ids = \[(.*)\];').findall(season_data)[0] if section_ids: for section in section_ids.split(','): season_url = SEASONS % section season_data2 = _connection.getURL(season_url) try: season_title = simplejson.loads(season_data2)['result']['title'] _common.add_directory(season_title, SITE, 'episodes', FULLEPISODES % (section, show_id)) except: pass else: show_tree = BeautifulSoup(season_data, 'html5lib') season_menu = show_tree.find_all(attrs = {'name' : 'season'}) for season_item in season_menu: season_url = root_url + 'season/%s/videos/episodes' % season_item['value'] _common.add_directory('Season ' + season_item['value'], SITE, 'episodesClassic', season_url) for season_item in season_menu: season_url = root_url + 'season/%s/videos/clips' % season_item['value'] _common.add_directory('Clips Season ' + season_item['value'], SITE, 'episodesClassic', season_url) _common.set_view('seasons')
def seasons(season_urls=_common.args.url): for season_url in season_urls.split(','): season_data = _connection.getURL(FULLEPISODES % urllib.quote_plus(season_url) + '&range=0-1') try: season_menu = int(simplejson.loads(season_data)['totalResults']) except: season_menu = 0 if season_menu > 0: season_url2 = FULLEPISODES % urllib.quote_plus( season_url) + '&range=0-' + str(season_menu) _common.add_directory('Full Episodes', SITE, 'episodes', season_url2) season_data2 = _connection.getURL(CLIPS % urllib.quote_plus(season_url) + '&range=0-1') try: season_menu2 = int(simplejson.loads(season_data2)['totalResults']) except: season_menu2 = 0 if season_menu2 > 0: season_url3 = CLIPS % urllib.quote_plus( season_url) + '&range=0-' + str(season_menu2) if ',' in season_urls: _common.add_directory('Clips %s' % season_url, SITE, 'episodes', season_url3) else: _common.add_directory('Clips', SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(): season_data = _connection.getURL(SHOWS) season_tree = BeautifulSoup(season_data) season_videotypes = season_tree.find( 'select', id='rb-video-browser-content_type').find_all('option') season_shows = season_tree.find( 'select', id='rb-video-browser-show').find_all('option') for season_item in season_shows: if season_item['value'] == _common.args.url: season_category = season_item['title'].replace('[', '').replace( ']', '').replace('"', '').split(',') for season_videoitem in season_videotypes: if season_videoitem['value'] in season_category: season_name = season_videoitem.string season_url = 'rb-video-browser-num_items=100&module_id_base=rb-video-browser' season_url += '&rb-video-browser-show=' + season_item[ 'value'] season_url += '&rb-video-browser-content_type=' + season_videoitem[ 'value'] _common.add_directory(season_name, SITE, 'episodes', season_url) _common.set_view('seasons')
def seasons(season_url=_common.args.url): if ',' in season_url: multiSeason = True else: multiSeason = False for season_url in season_url.split(','): season_data = _connection.getURL(season_url) season_tree = BeautifulSoup(season_data) season_item = season_tree.find('a', text=re.compile('Episode( Guide)?')) if season_item is not None: if BASE not in season_item['href']: season_data2 = _connection.getURL(BASE + season_item['href']) else: season_data2 = _connection.getURL(season_item['href']) season_tree = BeautifulSoup(season_data2) try: season_menu2 = season_tree.find( 'ul', class_='season_navigation').find_all('a') for season_item2 in season_menu2: season_name = season_item2.text season_url2 = season_item2['href'] _common.add_directory(season_name, SITE, 'episodes', season_url2) except: pass season_item = season_tree.find('a', text='Video Clips') if season_item is not None: season_name2 = season_item.text if BASE not in season_item['href']: season_url3 = BASE + season_item['href'] else: season_url3 = season_item['href'] if not multiSeason: _common.add_directory(season_name2, SITE, 'episodes', season_url3) else: title = season_tree.find('title').string.split('|')[0].strip() _common.add_directory(title + ' ' + season_name2, SITE, 'episodes', season_url3) _common.set_view('seasons')
def seasons(season_urls=_common.args.url): root_url = season_urls if season_urls[-1:] == '/': season_urls = season_urls + 'video' else: season_urls = season_urls + '/video' season_data = _connection.getURL(season_urls) show_id = re.compile('video.settings.show_id = (.*);').findall( season_data)[0] section_ids = re.compile('video.section_ids = \[(.*)\];').findall( season_data)[0] if section_ids: for section in section_ids.split(','): season_url = SEASONS % section season_data2 = _connection.getURL(season_url) try: season_title = simplejson.loads( season_data2)['result']['title'] _common.add_directory(season_title, SITE, 'episodes', FULLEPISODES % (section, show_id)) except: pass else: show_tree = BeautifulSoup(season_data, 'html5lib') season_menu = show_tree.find_all(attrs={'name': 'season'}) for season_item in season_menu: season_url = root_url + 'season/%s/videos/episodes' % season_item[ 'value'] _common.add_directory('Season ' + season_item['value'], SITE, 'episodesClassic', season_url) for season_item in season_menu: season_url = root_url + 'season/%s/videos/clips' % season_item[ 'value'] _common.add_directory('Clips Season ' + season_item['value'], SITE, 'episodesClassic', season_url) _common.set_view('seasons')
def add_show_thetonightshow(url): _common.add_directory('Full Episodes', SITE, 'episodes', url) _common.add_directory('Clips', SITE, 'episodes', url) _common.set_view('seasons')
def seasons(SITE, season_urls): for season_url in season_urls.split(','): _common.add_directory( season_url.split('#')[0], SITE, 'episodes', season_url.split('#')[1]) _common.set_view('seasons')