Пример #1
0
def get_tvdb_id_from_name(name, lang):
    tools.show_busy()
    search_results = TVDB.search(name, language=lang)
    if not search_results:
        tools.hide_busy()
        plugin.ok(
            'TV show not found',
            'no show information found for %s in tvdb' % text.to_utf8(name))
    items = []
    for show in search_results:
        if show['seriesname'] == name:
            if 'firstaired' in show:
                show['year'] = int(show['firstaired'].split('-')[0].strip())
            else:
                show['year'] = 'unknown'
            items.append(show)
    if len(items) > 1:
        selection = plugin.select('Choose TV Show', [
            '%s (%s)' % (text.to_utf8(s['seriesname']), s['year'])
            for s in items
        ])
    else:
        selection = 0
    tools.hide_busy()
    if selection != -1:
        return items[selection]['id']
Пример #2
0
def get_video_link(players, params):
    lister = Lister()
    for lang, lang_params in params.items():
        for key, value in lang_params.items():
            if isinstance(value, basestring):
                params[lang][key + '_+'] = value.replace(' ', '+')
                params[lang][key + '_-'] = value.replace(' ', '-')
                params[lang][key + '_escaped'] = value.replace(' ', '%2520')
                params[lang][key + '_escaped+'] = value.replace(' ', '%252B')
    selection = None
    try:
        if len(players) > 1:
            index = plugin.select('Play with...',
                                  [player.title for player in players])
            if index == -1:
                return None
            players = [players[index]]
        resolve_f = lambda p: resolve_player(p, lister, params)
        result = resolve_f(players[0])
        if result:
            title, links = result
            if len(links) == 1:
                selection = links[0]
            else:
                index = plugin.select('Play with...',
                                      [x['label'] for x in links])
                if index > -1:
                    selection = links[index]
        else:
            plugin.ok('Error', 'Video not found')
    finally:
        lister.stop()
    return selection
Пример #3
0
def tv_add_to_library_parsed(id, player):
	if id.startswith('tt'):
		try:
			id = TVDB.search_by_imdb(id)
		except:
			plugin.ok('TV show not found', 'no show information found for %s in TheTVDB' % id)
	library_folder = lib_tvshows.setup_library(plugin.get_setting('tv_library_folder', unicode))
	show = TVDB[int(id)]
	imdb = show['imdb_id']
	library_folder = lib_tvshows.setup_library(plugin.get_setting('tv_library_folder', unicode))
	if lib_tvshows.add_tvshow_to_library(library_folder, show, player):
		plugin.setProperty('plugin.video.openmeta.clean_library', 'true')
	tools.scan_library(path=plugin.get_setting('tv_library_folder', unicode))
Пример #4
0
def movies_play_by_name(name, lang='en', usedefault='True'):
	tools.show_busy()
	from resources.lib.TheMovieDB import Search
	items = Search().movie(query=name, language=lang, page=1)['results']
	if not items:
		tools.hide_busy()
		plugin.ok('Movie not found', 'No information found for ' + name)
	if len(items) > 1:
		selection = plugin.select('Movie', ['%s (%s)' % ((s['title']), text.parse_year(s['release_date'])) for s in items])
	else:
		selection = 0
	tools.hide_busy()
	if selection != -1:
		id = items[selection]['id']
		movies_play_choose_player('tmdb', id, usedefault)
Пример #5
0
def tmdb_play_episode(id, season, episode):
	from resources.lib.TheMovieDB import TV, TV_Seasons, TV_Episodes
	tried = 'tvdb'
	id = int(id)
	season = int(season)
	episode = int(episode)
	dbid = xbmc.getInfoLabel('ListItem.DBID')
	try:
		dbid = int(dbid)
	except:
		dbid = None
	show = TV(id).info(language='en', append_to_response='external_ids,images')
	if 'first_air_date' in show and show['first_air_date'] != None:
		year = show['first_air_date'][:4]
	else:
		year = None
	trakt_ids = play_base.get_trakt_ids('tmdb', id)
	if 'status_code' in show:
		return trakt_play_episode(trakt_ids['trakt'], season, episode)
	if 'name' in show:
		title = show['name']
	else:
		title = None
	show_info = meta_info.get_tvshow_metadata_tmdb(show)
	title = show_info['name']
	preason = TV_Seasons(id, season).info(language='en', append_to_response='external_ids,images')
	if 'The resource you requested could not be found' in str(preason):
		return trakt_play_episode(trakt_ids['trakt'], season, episode)
	season_info = meta_info.get_season_metadata_tmdb(show_info, preason)
	prepisode = TV_Episodes(id, season, episode).info(language='en', append_to_response='external_ids,images')
	if prepisode == '{u"status_code": 34, u"status_message": u"The resource you requested could not be found."}':
		return trakt_play_episode(trakt_ids['tmdb'], season, episode)
	episode_info = meta_info.get_episode_metadata_tmdb(season_info, prepisode)
	if show_info['poster'] != None and show_info['poster'] != '':
		show_poster = show_info['poster']
	else:
		show_poster = ''
	if show_info['fanart'] != None and show_info['fanart'] != '':
		show_fanart = show_info['fanart']
	else:
		show_fanart = ''
	episodes = preason['episodes']
	items = []
	play_plugin = meta_players.ADDON_SELECTOR.id
	players = meta_players.get_players('tvshows')
	players = [p for p in players if p.id == play_plugin] or players
	if not players:
		return xbmc.executebuiltin('Action(Info)')
	trakt_ids = play_base.get_trakt_ids('tmdb', id, show_info['name'], 'show', show['first_air_date'][:4])
	params = {}
	for lang in meta_players.get_needed_langs(players):
		if show['name'] is None:
			continue
		episode_parameters = get_tmdb_episode_parameters(show, preason, prepisode)
		if episode_parameters is not None:
			params[lang] = episode_parameters
		else:
			if trakt_ids['trakt'] != None and trakt_ids['trakt'] != '':
				return trakt_play_episode(trakt_ids['trakt'], season, episode)
			else:
				msg = 'No TMDb information found for %s - S%sE%s' % (show_info['name'], season, episode)
				plugin.ok('Episode information not found', msg)
		if trakt_ids != None:
			params[lang].update(trakt_ids)
		params[lang]['info'] = show_info
		params[lang] = text.to_unicode(params[lang])
	link = play_base.on_play_video(players, params, trakt_ids)
	if link:
		plugin.setProperty('plugin.video.openmeta.data', json.dumps(
			{
				'dbid': dbid,
				'tmdb': id,
				'season': season,
				'episode': episode
			}))
		episode_metadata = meta_info.get_episode_metadata_tmdb(season_info, prepisode)
		play_base.action_play(
			{
				'label': episode_info['title'],
				'path': link,
				'info': [],
				'is_playable': True,
				'info_type': 'video',
				'thumbnail': episode_info['poster'],
				'poster': episode_info['poster'],
				'fanart': str(show_info['fanart'])
			})
Пример #6
0
def tvmaze_play_episode(id, season, episode, title=None):
	title = ''
	try:
		id = int(id)
	except:
		title = id
	if title and title != '':
		url = 'https://api.tvmaze.com/search/shows?q=%s' % id
		response = urllib.urlopen(url)
		shows = json.loads(response.read())
		if len(shows) > 0:
			show = shows[0]
			id = show['show']['id']
	url = 'https://api.tvmaze.com/shows/%d?embed[]=seasons&embed[]=episodes' % int(id)
	response = urllib.urlopen(url)
	show = json.loads(response.read())
	season = int(season)
	episode = int(episode)
	dbid = xbmc.getInfoLabel('ListItem.DBID')
	try:
		dbid = int(dbid)
	except:
		dbid = None
	if show['externals']:
		if show['externals']['thetvdb']:
			trakt_ids = play_base.get_trakt_ids('tvdb', show['externals']['thetvdb'], show['name'], 'show', show['premiered'][:4])
		elif show['externals']['imdb']:
			trakt_ids = play_base.get_trakt_ids('imdb', show['externals']['imdb'], show['name'], 'show', show['premiered'][:4])
		else:
			trakt_ids = play_base.get_trakt_ids(query=show['name'], type='show', year=show['premiered'][:4])
	else:
		trakt_ids = play_base.get_trakt_ids(query=show['name'], type='show', year=show['premiered'][:4])
	show_info = meta_info.get_tvshow_metadata_tvmaze(show)
	preasons = show['_embedded']['seasons']
	for item in preasons:
		if item['number'] == season: 
			preason = item
			season = preasons.index(item) + 1
		elif item['premiereDate'] and item['endDate']:
			if int(item['premiereDate'][:4]) <= season and int(item['endDate'][:4]) >= season: 
				preason = item
				season = preasons.index(item) + 1
	prepisodes = show['_embedded']['episodes']
	for item in prepisodes:
		if item['number'] == episode:
			prepisode = item
	season_info = meta_info.get_season_metadata_tvmaze(show_info, preason)
	episode_info = meta_info.get_episode_metadata_tvmaze(season_info, prepisode)
	if show_info['poster'] != None and show_info['poster'] != '':
		show_poster = show_info['poster']
	else:
		show_poster = ''
	if show_info['fanart'] != None and show_info['fanart'] != '':
		show_fanart = show_info['fanart']
	else:
		show_fanart = ''
	items = []
	play_plugin = meta_players.ADDON_SELECTOR.id
	players = meta_players.get_players('tvshows')
	players = [p for p in players if p.id == play_plugin] or players
	if not players:
		return xbmc.executebuiltin('Action(Info)')
	params = {}
	for lang in meta_players.get_needed_langs(players):
		if show['name'] is None:
			continue
		episode_parameters = get_tvmaze_episode_parameters(show, preason, prepisode)
		if episode_parameters is not None:
			params[lang] = episode_parameters
		else:
			if trakt_ids['tmdb'] != None and trakt_ids['tmdb'] != '' and tried != 'tmdb': 
				tried = 'tmdb'
				return tvdb_play_episode(trakt_ids['tvdb'], season, episode)
			elif tried == 'tmdb':
				msg = 'No TVDb or TMDb information found for %s - S%sE%s' % (show_info['name'], season, episode)
				plugin.ok('Episode information not found', msg)
			else:
				msg = 'No TMDb information found for %s - S%sE%s' % (show_info['name'], season, episode)
				plugin.ok('Episode information not found', msg)
		if trakt_ids != None:
			params[lang].update(trakt_ids)
		params[lang]['info'] = show_info
		params[lang] = text.to_unicode(params[lang])
	link = play_base.on_play_video(players, params, trakt_ids)
	if link:
		plugin.setProperty('plugin.video.openmeta.data', json.dumps(
			{
				'dbid': dbid,
				'tvdb': trakt_ids['tvdb'],
				'season': season,
				'episode': episode
			}))
		episode_metadata = meta_info.get_episode_metadata_tvmaze(season_info, prepisode)
		play_base.action_play(
			{
				'label': episode_info['title'],
				'path': link,
				'info': [],
				'is_playable': True,
				'info_type': 'video',
				'thumbnail': episode_info['poster'],
				'poster': episode_info['poster'],
				'fanart': str(show_info['fanart'])
			})
Пример #7
0
def trakt_play_episode(id, season, episode):
	from resources.lib.Trakt import get_show, get_season, get_seasons, get_episode
	id = int(id)
	season = int(season)
	episode = int(episode)
	show = None
	preason = None
	prepisode = None
	dbid = xbmc.getInfoLabel('ListItem.DBID')
	try:
		dbid = int(dbid)
	except:
		dbid = None
	show = get_show(id)
	if 'name' in show:
		show_title = show['name']
	elif 'title' in show:
		show_title = show['title']
	if show:
		if show['first_aired']:
			year = show['first_aired'][:4]
		else:
			year = None
		trakt_ids = play_base.get_trakt_ids('trakt', id, show_title, 'show', year)
		preason = get_season(id, season)
		if preason:
			prepisode = get_episode(id, season, episode)
		elif not preason and season > 1900: 
			seasons = get_seasons(id)
			for item in seasons:
				if item['first_aired'] != None:
					if int(item['first_aired'][:4]) == season: 
						season_number = item['number']
						preason = get_season(id, season_number)
	if not prepisode or not preason or not show:
		return tvmaze_play_episode(show_title, season, episode)
	show_info = meta_info.get_tvshow_metadata_trakt(show)
	season_info = meta_info.get_season_metadata_trakt(show_info, preason)
	episode_info = meta_info.get_episode_metadata_trakt(season_info, prepisode)
	title = show_info['name']
	if show_info['poster'] != None and show_info['poster'] != '':
		show_poster = show_info['poster']
	else:
		show_poster = ''
	if show_info['fanart'] != None and show_info['fanart'] != '':
		show_fanart = show_info['fanart']
	else:
		show_fanart = ''
	items = []
	play_plugin = meta_players.ADDON_SELECTOR.id
	players = meta_players.get_players('tvshows')
	players = [p for p in players if p.id == play_plugin] or players
	if not players:
		return xbmc.executebuiltin('Action(Info)')
	params = {}
	for lang in meta_players.get_needed_langs(players):
		if show['name'] is None:
			continue
		episode_parameters = get_trakt_episode_parameters(show, preason, prepisode)
		if episode_parameters is not None:
			params[lang] = episode_parameters
		else:
			if trakt_ids['tmdb'] != None and trakt_ids['tmdb'] != '' and tried != 'tmdb': 
				tried = 'tmdb'
				return tvdb_play_episode(trakt_ids['tvdb'], season, episode)
			elif tried == 'tmdb':
				msg = 'No TVDb or TMDb information found for %s - S%sE%s' % (show_info['name'], season, episode)
				plugin.ok('Episode information not found', msg)
			else:
				msg = 'No TMDb information found for %s - S%sE%s' % (show_info['name'], season, episode)
				plugin.ok('Episode information not found', msg)
		if trakt_ids != None:
			params[lang].update(trakt_ids)
		params[lang]['info'] = show_info
		params[lang] = text.to_unicode(params[lang])
	link = play_base.on_play_video(players, params, trakt_ids)
	if link:
		plugin.setProperty('plugin.video.openmeta.data', json.dumps(
			{
				'dbid': dbid,
				'trakt': id,
				'season': season,
				'episode': episode
			}))
		episode_metadata = meta_info.get_episode_metadata_trakt(season_info, prepisode)
		play_base.action_play(
			{
				'label': episode_info['title'],
				'path': link,
				'info': episode_info,
				'is_playable': True,
				'info_type': 'video',
				'thumbnail': episode_info['poster'],
				'poster': episode_info['poster'],
				'fanart': str(show_info['fanart'])
			})
Пример #8
0
def play_episode(id, season, episode):
	from resources.lib.TheTVDB import TVDB
	id = int(id)
	season = int(season)
	episode = int(episode)
	dbid = xbmc.getInfoLabel('ListItem.DBID')
	try:
		dbid = int(dbid)
	except:
		dbid = None
	show = TVDB[id]
	show_info = meta_info.get_tvshow_metadata_tvdb(show, banners=False)
	play_plugin = meta_players.ADDON_SELECTOR.id
	PLAYERS = meta_players.get_players('tvshows')
	players = [p for p in PLAYERS if p.id == play_plugin] or PLAYERS
	if not players or len(players) == 0:
		xbmc.executebuiltin('Action(Info)')
		play_base.action_cancel()
		return
	trakt_ids = play_base.get_trakt_ids('tvdb', id, show['seriesname'], 'show', show.get('year', 0))
	params = {}
	for lang in meta_players.get_needed_langs(players):
		tvdb_data = show
		if tvdb_data['seriesname'] is None:
			continue
		episode_parameters = get_episode_parameters(tvdb_data, season, episode)
		if episode_parameters is not None:
			params[lang] = episode_parameters
		else:
			if trakt_ids['tmdb'] != None and trakt_ids['tmdb'] != '':
				return tmdb_play_episode(trakt_ids['tmdb'], season, episode)
			elif trakt_ids['tvdb'] == None or trakt_ids['tvdb'] == '':
				plugin.ok('Information not found for:', '%s - S%sE%s' % (show_info['name'], season, episode))
			else:
				plugin.ok('Information not found for:', '%s - S%sE%s' % (show_info['name'], season, episode))
		if trakt_ids != None:
			params[lang].update(trakt_ids)
		params[lang]['info'] = show_info
		params[lang] = text.to_unicode(params[lang])
	link = play_base.on_play_video(players, params, trakt_ids)
	if link:
		plugin.setProperty('plugin.video.openmeta.data', json.dumps(
			{
				'dbid': dbid,
				'tvdb': id,
				'season': season,
				'episode': episode
			}))
		season_info = meta_info.get_season_metadata_tvdb(show_info, show[season], banners=False)
		episode_info = meta_info.get_episode_metadata_tvdb(season_info, show[season][episode])
		play_base.action_play(
			{
				'label': episode_info['name'],
				'path': link,
				'info': episode_info,
				'is_playable': True,
				'info_type': 'video',
				'thumbnail': episode_info['poster'],
				'poster': episode_info['poster'],
				'fanart': episode_info['fanart']
			})
Пример #9
0
def get_tvdb_id_from_imdb_id(imdb_id):
    tvdb_id = TVDB.search_by_imdb(imdb_id)
    if not tvdb_id:
        plugin.ok('TV show not found',
                  'no show information found for %s in tvdb' % imdb_id)
    return tvdb_id