Source code for Code.tmdb_helper

# -*- coding: utf-8 -*-

# plex debugging
try:
    import plexhints  # noqa: F401
except ImportError:
    pass
else:  # the code is running outside of Plex
    from plexhints.constant_kit import CACHE_1DAY  # constant kit
    from plexhints.log_kit import Log  # log kit
    from plexhints.parse_kit import JSON  # parse kit
    from plexhints.util_kit import String  # util kit

# imports from Libraries\Shared
from typing import Optional

# url borrowed from TheMovieDB.bundle
tmdb_base_url = 'http://127.0.0.1:32400/services/tmdb?uri='


[docs]def get_tmdb_id_from_imdb_id(imdb_id): # type: (str) -> Optional[int] """ Convert IMDB ID to TMDB ID. Use the builtin Plex tmdb api service to search for a movie by IMDB ID. Parameters ---------- imdb_id : str IMDB ID to convert. Returns ------- Optional[int] Return TMDB ID if found, otherwise None. Examples -------- >>> get_tmdb_id_from_imdb_id(imdb_id='tt1254207') 10378 """ # according to https://www.themoviedb.org/talk/5f6a0500688cd000351c1712 we can search by imdb id # https://api.themoviedb.org/3/find/tt0458290?api_key=###&external_source=imdb_id find_imdb_item = 'find/{}?external_source=imdb_id' url = '{}/{}'.format(tmdb_base_url, find_imdb_item.format(String.Quote(s=imdb_id, usePlus=True))) try: tmdb_data = JSON.ObjectFromURL( url=url, sleep=2.0, headers=dict(Accept='application/json'), cacheTime=CACHE_1DAY, errors='strict') except Exception as e: Log.Debug('Error converting IMDB ID to TMDB ID: {}'.format(e)) else: Log.Debug('TMDB data: {}'.format(tmdb_data)) try: tmdb_id = int(tmdb_data['movie_results'][0]['id']) # this is already an integer, but let's force it except (IndexError, KeyError, ValueError): Log.Debug('Error converting IMDB ID to TMDB ID: {}'.format(tmdb_data)) else: return tmdb_id
[docs]def get_tmdb_id_from_collection(search_query): # type: (str) -> Optional[int] """ Search for a collection by name. Use the builtin Plex tmdb api service to search for a tmdb collection by name. Parameters ---------- search_query : str Name of collection to search for. Returns ------- Optional[int] Return collection ID if found, otherwise None. Examples -------- >>> get_tmdb_id_from_collection(search_query='James Bond Collection') 645 >>> get_tmdb_id_from_collection(search_query='James Bond') 645 """ # /search/collection?query=James%20Bond%20Collection&include_adult=false&language=en-US&page=1" query_url = 'search/collection?query={}' # Plex returns 500 error if spaces are in collection query, same with `_`, `+`, and `%20`... so use `-` url = '{}/{}'.format(tmdb_base_url, query_url.format(String.Quote( s=search_query.replace(' ', '-'), usePlus=True))) try: tmdb_data = JSON.ObjectFromURL( url=url, sleep=2.0, headers=dict(Accept='application/json'), cacheTime=CACHE_1DAY, errors='strict') except Exception as e: Log.Debug('Error searching for collection {}: {}'.format(search_query, e)) else: collection_id = None Log.Debug('TMDB data: {}'.format(tmdb_data)) end_string = 'Collection' # collection names on themoviedb end with 'Collection' try: for result in tmdb_data['results']: if result['name'].lower() == search_query.lower() or \ '{} {}'.format(search_query.lower(), end_string).lower() == result['name'].lower(): collection_id = int(result['id']) except (IndexError, KeyError, ValueError): Log.Debug('Error searching for collection {}: {}'.format(search_query, tmdb_data)) else: return collection_id