Trakt: Added countries to API search filter

pull/105/head
desimaniac 5 years ago
parent 940cfc6694
commit 8094175204

@ -72,18 +72,25 @@ class Trakt:
return None return None
@backoff.on_predicate(backoff.expo, lambda x: x is None, max_tries=6, on_backoff=backoff_handler) @backoff.on_predicate(backoff.expo, lambda x: x is None, max_tries=6, on_backoff=backoff_handler)
def _make_items_request(self, url, limit, languages, type_name, object_name, authenticate_user=None, payload={}, def _make_items_request(self, url, limit, type_name, object_name, authenticate_user=None, payload={},
sleep_between=5, genres=None, include_non_acting_roles=False): sleep_between=5, countries=None, languages=None, genres=None, include_non_acting_roles=False):
# languages
if not languages: if not languages:
languages = ['en'] languages = ['en']
languages = ','.join(languages).lower()
payload = dict_merge(payload, { payload = dict_merge(payload, {
'extended': 'full', 'extended': 'full',
'limit': limit, 'limit': limit,
'page': 1, 'page': 1,
'languages': ','.join(languages), 'languages': languages,
}) })
# countries
if countries:
payload['countries'] = ','.join(countries).lower()
# currently only support for one genre item, despite name # currently only support for one genre item, despite name
if genres: if genres:
payload['genres'] = genres payload['genres'] = genres
@ -395,95 +402,103 @@ class Trakt:
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_trending_shows(self, limit=1000, languages=None, genres=None): def get_trending_shows(self, limit=1000, countries=None, languages=None, genres=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/shows/trending', url='https://api.trakt.tv/shows/trending',
object_name='shows', object_name='shows',
type_name='trending', type_name='trending',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_popular_shows(self, limit=1000, languages=None, genres=None): def get_popular_shows(self, limit=1000, countries=None, languages=None, genres=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/shows/popular', url='https://api.trakt.tv/shows/popular',
object_name='shows', object_name='shows',
type_name='popular', type_name='popular',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_anticipated_shows(self, limit=1000, languages=None, genres=None): def get_anticipated_shows(self, limit=1000, countries=None, languages=None, genres=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/shows/anticipated', url='https://api.trakt.tv/shows/anticipated',
object_name='shows', object_name='shows',
type_name='anticipated', type_name='anticipated',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
def get_person_shows(self, person, limit=1000, languages=None, genres=None, def get_person_shows(self, person, limit=1000, countries=None, languages=None, genres=None,
include_non_acting_roles=False): include_non_acting_roles=False):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/people/%s/shows' % person.replace(' ', '-').lower(), url='https://api.trakt.tv/people/%s/shows' % person.replace(' ', '-').lower(),
object_name='shows', object_name='shows',
type_name='person', type_name='person',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
include_non_acting_roles=include_non_acting_roles, include_non_acting_roles=include_non_acting_roles,
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_most_played_shows(self, limit=1000, languages=None, genres=None, most_type=None): def get_most_played_shows(self, limit=1000, countries=None, languages=None, genres=None, most_type=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/shows/played/%s' % ('weekly' if not most_type else most_type), url='https://api.trakt.tv/shows/played/%s' % ('weekly' if not most_type else most_type),
object_name='shows', object_name='shows',
type_name='played', type_name='played',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_most_watched_shows(self, limit=1000, languages=None, genres=None, most_type=None): def get_most_watched_shows(self, limit=1000, languages=None, countries=None, genres=None, most_type=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/shows/watched/%s' % ('weekly' if not most_type else most_type), url='https://api.trakt.tv/shows/watched/%s' % ('weekly' if not most_type else most_type),
object_name='shows', object_name='shows',
type_name='watched', type_name='watched',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_recommended_shows(self, authenticate_user=None, limit=1000, languages=None, genres=None): def get_recommended_shows(self, authenticate_user=None, limit=1000, countries=None, languages=None, genres=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/recommendations/shows', url='https://api.trakt.tv/recommendations/shows',
object_name='shows', object_name='shows',
type_name='recommended from {authenticate_user}', type_name='recommended from {authenticate_user}',
authenticate_user=authenticate_user, authenticate_user=authenticate_user,
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
def get_watchlist_shows(self, authenticate_user=None, limit=1000, languages=None): def get_watchlist_shows(self, authenticate_user=None, limit=1000, countries=None, languages=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/users/{authenticate_user}/watchlist/shows', url='https://api.trakt.tv/users/{authenticate_user}/watchlist/shows',
object_name='shows', object_name='shows',
type_name='watchlist from {authenticate_user}', type_name='watchlist from {authenticate_user}',
authenticate_user=authenticate_user, authenticate_user=authenticate_user,
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
) )
def get_user_list_shows(self, list_url, authenticate_user=None, limit=1000, languages=None): def get_user_list_shows(self, list_url, authenticate_user=None, limit=1000, countries=None, languages=None):
list_user, list_key = extract_list_user_and_key_from_url(list_url) list_user, list_key = extract_list_user_and_key_from_url(list_url)
log.debug('Fetching %s from %s', list_key, list_user) log.debug('Fetching %s from %s', list_key, list_user)
@ -494,6 +509,7 @@ class Trakt:
type_name=(list_key + ' from ' + list_user), type_name=(list_key + ' from ' + list_user),
authenticate_user=authenticate_user, authenticate_user=authenticate_user,
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
) )
@ -508,104 +524,113 @@ class Trakt:
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_trending_movies(self, limit=1000, languages=None, genres=None): def get_trending_movies(self, limit=1000, countries=None, languages=None, genres=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/movies/trending', url='https://api.trakt.tv/movies/trending',
object_name='movies', object_name='movies',
type_name='trending', type_name='trending',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_popular_movies(self, limit=1000, languages=None, genres=None): def get_popular_movies(self, limit=1000, countries=None, languages=None, genres=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/movies/popular', url='https://api.trakt.tv/movies/popular',
object_name='movies', object_name='movies',
type_name='popular', type_name='popular',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_anticipated_movies(self, limit=1000, languages=None, genres=None): def get_anticipated_movies(self, limit=1000, countries=None, languages=None, genres=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/movies/anticipated', url='https://api.trakt.tv/movies/anticipated',
object_name='movies', object_name='movies',
type_name='anticipated', type_name='anticipated',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
def get_person_movies(self, person, limit=1000, languages=None, genres=None, def get_person_movies(self, person, limit=1000, countries=None, languages=None, genres=None,
include_non_acting_roles=False): include_non_acting_roles=False):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/people/%s/movies' % person.replace(' ', '-').lower(), url='https://api.trakt.tv/people/%s/movies' % person.replace(' ', '-').lower(),
object_name='movies', object_name='movies',
type_name='person', type_name='person',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
include_non_acting_roles=include_non_acting_roles, include_non_acting_roles=include_non_acting_roles,
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_most_played_movies(self, limit=1000, languages=None, genres=None, most_type=None): def get_most_played_movies(self, limit=1000, countries=None, languages=None, genres=None, most_type=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/movies/played/%s' % ('weekly' if not most_type else most_type), url='https://api.trakt.tv/movies/played/%s' % ('weekly' if not most_type else most_type),
object_name='movies', object_name='movies',
type_name='played', type_name='played',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
@cache(cache_file=cachefile, retry_if_blank=True) @cache(cache_file=cachefile, retry_if_blank=True)
def get_most_watched_movies(self, limit=1000, languages=None, genres=None, most_type=None): def get_most_watched_movies(self, limit=1000, countries=None, languages=None, genres=None, most_type=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/movies/watched/%s' % ('weekly' if not most_type else most_type), url='https://api.trakt.tv/movies/watched/%s' % ('weekly' if not most_type else most_type),
object_name='movies', object_name='movies',
type_name='watched', type_name='watched',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
def get_boxoffice_movies(self, limit=1000, languages=None, genres=None): def get_boxoffice_movies(self, limit=1000, countries=None, languages=None, genres=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/movies/boxoffice', url='https://api.trakt.tv/movies/boxoffice',
object_name='movies', object_name='movies',
type_name='anticipated', type_name='anticipated',
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
def get_recommended_movies(self, authenticate_user=None, limit=1000, languages=None, genres=None): def get_recommended_movies(self, authenticate_user=None, limit=1000, countries=None, languages=None, genres=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/recommendations/movies', url='https://api.trakt.tv/recommendations/movies',
object_name='movies', object_name='movies',
type_name='recommended from {authenticate_user}', type_name='recommended from {authenticate_user}',
authenticate_user=authenticate_user, authenticate_user=authenticate_user,
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
genres=genres, genres=genres,
) )
def get_watchlist_movies(self, authenticate_user=None, limit=1000, languages=None): def get_watchlist_movies(self, authenticate_user=None, limit=1000, countries=None, languages=None):
return self._make_items_request( return self._make_items_request(
url='https://api.trakt.tv/users/{authenticate_user}/watchlist/movies', url='https://api.trakt.tv/users/{authenticate_user}/watchlist/movies',
object_name='movies', object_name='movies',
type_name='watchlist from {authenticate_user}', type_name='watchlist from {authenticate_user}',
authenticate_user=authenticate_user, authenticate_user=authenticate_user,
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
) )
def get_user_list_movies(self, list_url, authenticate_user=None, limit=1000, languages=None): def get_user_list_movies(self, list_url, authenticate_user=None, limit=1000, countries=None, languages=None):
list_user, list_key = extract_list_user_and_key_from_url(list_url) list_user, list_key = extract_list_user_and_key_from_url(list_url)
log.debug('Fetching %s from %s', list_key, list_user) log.debug('Fetching %s from %s', list_key, list_user)
@ -616,5 +641,6 @@ class Trakt:
type_name=(list_key + ' from ' + list_user), type_name=(list_key + ' from ' + list_user),
authenticate_user=authenticate_user, authenticate_user=authenticate_user,
limit=limit, limit=limit,
countries=countries,
languages=languages, languages=languages,
) )

@ -143,7 +143,8 @@ def get_objects(pvr, pvr_type, notifications):
if not objects_list: if not objects_list:
log.error("Aborting due to failure to retrieve %s list from %s", objects_type, pvr_type) log.error("Aborting due to failure to retrieve %s list from %s", objects_type, pvr_type)
if notifications: if notifications:
callback_notify({'event': 'error', 'reason': 'Failure to retrieve %s list from %s' % (objects_type, pvr_type)}) callback_notify({'event': 'error', 'reason': 'Failure to retrieve %s list from %s' % (objects_type,
pvr_type)})
exit() exit()
log.info("Retrieved %s %s list, %s found: %d", pvr_type, objects_type, objects_type, len(objects_list)) log.info("Retrieved %s %s list, %s found: %d", pvr_type, objects_type, objects_type, len(objects_list))
return objects_list return objects_list
@ -374,37 +375,65 @@ def shows(list_type, add_limit=0, add_delay=2.5, sort='votes', genre=None, folde
# get trakt series list # get trakt series list
if list_type.lower() == 'anticipated': if list_type.lower() == 'anticipated':
trakt_objects_list = trakt.get_anticipated_shows(genres=genre, trakt_objects_list = trakt.get_anticipated_shows(
languages=cfg.filters.shows.allowed_languages) countries=cfg.filters.shows.allowed_countries,
languages=cfg.filters.shows.allowed_languages,
genres=genre,
)
elif list_type.lower() == 'trending': elif list_type.lower() == 'trending':
trakt_objects_list = trakt.get_trending_shows(genres=genre, trakt_objects_list = trakt.get_trending_shows(
languages=cfg.filters.shows.allowed_languages) countries=cfg.filters.shows.allowed_countries,
languages=cfg.filters.shows.allowed_languages,
genres=genre,
)
elif list_type.lower() == 'popular': elif list_type.lower() == 'popular':
trakt_objects_list = trakt.get_popular_shows(genres=genre, trakt_objects_list = trakt.get_popular_shows(
languages=cfg.filters.shows.allowed_languages) countries=cfg.filters.shows.allowed_countries,
languages=cfg.filters.shows.allowed_languages,
genres=genre,
)
elif list_type.lower() == 'person': elif list_type.lower() == 'person':
if not actor: if not actor:
log.error("You must specify an actor with the \'--actor\' / \'-a\' parameter when using the \'person\'" + log.error("You must specify an actor with the \'--actor\' / \'-a\' parameter when using the \'person\'" +
" list type!") " list type!")
return None return None
trakt_objects_list = trakt.get_person_shows(person=actor, trakt_objects_list = trakt.get_person_shows(
genres=genre, person=actor,
languages=cfg.filters.shows.allowed_languages, countries=cfg.filters.shows.allowed_countries,
include_non_acting_roles=include_non_acting_roles) languages=cfg.filters.shows.allowed_languages,
genres=genre,
include_non_acting_roles=include_non_acting_roles,
)
elif list_type.lower() == 'recommended': elif list_type.lower() == 'recommended':
trakt_objects_list = trakt.get_recommended_shows(authenticate_user, trakt_objects_list = trakt.get_recommended_shows(
genres=genre, authenticate_user,
languages=cfg.filters.shows.allowed_languages) countries=cfg.filters.shows.allowed_countries,
languages=cfg.filters.shows.allowed_languages,
genres=genre,
)
elif list_type.lower().startswith('played'): elif list_type.lower().startswith('played'):
most_type = misc_helper.substring_after(list_type.lower(), "_") most_type = misc_helper.substring_after(list_type.lower(), "_")
trakt_objects_list = trakt.get_most_played_shows(genres=genre, trakt_objects_list = trakt.get_most_played_shows(
languages=cfg.filters.shows.allowed_languages, countries=cfg.filters.shows.allowed_countries,
most_type=most_type if most_type else None) languages=cfg.filters.shows.allowed_languages,
genres=genre,
most_type=most_type if most_type else None,
)
elif list_type.lower().startswith('watched'): elif list_type.lower().startswith('watched'):
most_type = misc_helper.substring_after(list_type.lower(), "_") most_type = misc_helper.substring_after(list_type.lower(), "_")
trakt_objects_list = trakt.get_most_watched_shows(genres=genre, trakt_objects_list = trakt.get_most_watched_shows(
languages=cfg.filters.shows.allowed_languages, countries=cfg.filters.shows.allowed_countries,
most_type=most_type if most_type else None) languages=cfg.filters.shows.allowed_languages,
genres=genre,
most_type=most_type if most_type else None,
)
elif list_type.lower() == 'watchlist': elif list_type.lower() == 'watchlist':
trakt_objects_list = trakt.get_watchlist_shows(authenticate_user) trakt_objects_list = trakt.get_watchlist_shows(authenticate_user)
else: else:
@ -763,41 +792,72 @@ def movies(list_type, add_limit=0, add_delay=2.5, sort='votes', rotten_tomatoes=
# get trakt movies list # get trakt movies list
if list_type.lower() == 'anticipated': if list_type.lower() == 'anticipated':
trakt_objects_list = trakt.get_anticipated_movies(genres=genre, trakt_objects_list = trakt.get_anticipated_movies(
languages=cfg.filters.movies.allowed_languages) countries=cfg.filters.shows.allowed_countries,
languages=cfg.filters.shows.allowed_languages,
genres=genre,
)
elif list_type.lower() == 'trending': elif list_type.lower() == 'trending':
trakt_objects_list = trakt.get_trending_movies(genres=genre, trakt_objects_list = trakt.get_trending_movies(
languages=cfg.filters.movies.allowed_languages) countries=cfg.filters.shows.allowed_countries,
languages=cfg.filters.shows.allowed_languages,
genres=genre,
)
elif list_type.lower() == 'popular': elif list_type.lower() == 'popular':
trakt_objects_list = trakt.get_popular_movies(genres=genre, trakt_objects_list = trakt.get_popular_movies(
languages=cfg.filters.movies.allowed_languages) countries=cfg.filters.shows.allowed_countries,
languages=cfg.filters.shows.allowed_languages,
genres=genre,
)
elif list_type.lower() == 'boxoffice': elif list_type.lower() == 'boxoffice':
trakt_objects_list = trakt.get_boxoffice_movies(genres=genre, trakt_objects_list = trakt.get_boxoffice_movies(
languages=cfg.filters.movies.allowed_languages) countries=cfg.filters.shows.allowed_countries,
languages=cfg.filters.shows.allowed_languages,
genres=genre,
)
elif list_type.lower() == 'person': elif list_type.lower() == 'person':
if not actor: if not actor:
log.error("You must specify an actor with the \'--actor\' / \'-a\' parameter when using the \'person\'" + log.error("You must specify an actor with the \'--actor\' / \'-a\' parameter when using the \'person\'" +
" list type!") " list type!")
return None return None
trakt_objects_list = trakt.get_person_movies(person=actor, trakt_objects_list = trakt.get_person_movies(
genres=genre, person=actor,
languages=cfg.filters.movies.allowed_languages, countries=cfg.filters.shows.allowed_countries,
include_non_acting_roles=include_non_acting_roles) languages=cfg.filters.shows.allowed_languages,
genres=genre,
include_non_acting_roles=include_non_acting_roles,
)
elif list_type.lower() == 'recommended': elif list_type.lower() == 'recommended':
trakt_objects_list = trakt.get_recommended_movies(authenticate_user, trakt_objects_list = trakt.get_recommended_movies(
genres=genre, authenticate_user,
languages=cfg.filters.movies.allowed_languages) countries=cfg.filters.shows.allowed_countries,
languages=cfg.filters.shows.allowed_languages,
genres=genre,
)
elif list_type.lower().startswith('played'): elif list_type.lower().startswith('played'):
most_type = misc_helper.substring_after(list_type.lower(), "_") most_type = misc_helper.substring_after(list_type.lower(), "_")
trakt_objects_list = trakt.get_most_played_movies(genres=genre, trakt_objects_list = trakt.get_most_played_movies(
languages=cfg.filters.movies.allowed_languages, countries=cfg.filters.shows.allowed_countries,
most_type=most_type if most_type else None) languages=cfg.filters.shows.allowed_languages,
genres=genre,
most_type=most_type if most_type else None,
)
elif list_type.lower().startswith('watched'): elif list_type.lower().startswith('watched'):
most_type = misc_helper.substring_after(list_type.lower(), "_") most_type = misc_helper.substring_after(list_type.lower(), "_")
trakt_objects_list = trakt.get_most_watched_movies(genres=genre, trakt_objects_list = trakt.get_most_watched_movies(
languages=cfg.filters.movies.allowed_languages, countries=cfg.filters.shows.allowed_countries,
most_type=most_type if most_type else None) languages=cfg.filters.shows.allowed_languages,
genres=genre,
most_type=most_type if most_type else None,
)
elif list_type.lower() == 'watchlist': elif list_type.lower() == 'watchlist':
trakt_objects_list = trakt.get_watchlist_movies(authenticate_user) trakt_objects_list = trakt.get_watchlist_movies(authenticate_user)
else: else:

Loading…
Cancel
Save