summaryrefslogtreecommitdiffstats
path: root/addons/metadata.themoviedb.org.python/python/lib/tmdbscraper/fanarttv.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/metadata.themoviedb.org.python/python/lib/tmdbscraper/fanarttv.py')
-rw-r--r--addons/metadata.themoviedb.org.python/python/lib/tmdbscraper/fanarttv.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/addons/metadata.themoviedb.org.python/python/lib/tmdbscraper/fanarttv.py b/addons/metadata.themoviedb.org.python/python/lib/tmdbscraper/fanarttv.py
new file mode 100644
index 0000000..f19cb1c
--- /dev/null
+++ b/addons/metadata.themoviedb.org.python/python/lib/tmdbscraper/fanarttv.py
@@ -0,0 +1,87 @@
+from . import api_utils
+try:
+ from urllib import quote
+except ImportError: # py2 / py3
+ from urllib.parse import quote
+
+API_KEY = '384afe262ee0962545a752ff340e3ce4'
+API_URL = 'https://webservice.fanart.tv/v3/movies/{}'
+
+ARTMAP = {
+ 'movielogo': 'clearlogo',
+ 'hdmovielogo': 'clearlogo',
+ 'hdmovieclearart': 'clearart',
+ 'movieart': 'clearart',
+ 'moviedisc': 'discart',
+ 'moviebanner': 'banner',
+ 'moviethumb': 'landscape',
+ 'moviebackground': 'fanart',
+ 'movieposter': 'poster'
+}
+
+def get_details(uniqueids, clientkey, language, set_tmdbid):
+ media_id = _get_mediaid(uniqueids)
+ if not media_id:
+ return {}
+
+ movie_data = _get_data(media_id, clientkey)
+ movieset_data = _get_data(set_tmdbid, clientkey)
+ if not movie_data and not movieset_data:
+ return {}
+
+ movie_art = {}
+ movieset_art = {}
+ if movie_data:
+ movie_art = _parse_data(movie_data, language)
+ if movieset_data:
+ movieset_art = _parse_data(movieset_data, language)
+ movieset_art = {'set.' + key: value for key, value in movieset_art.items()}
+
+ available_art = movie_art
+ available_art.update(movieset_art)
+
+ return {'available_art': available_art}
+
+def _get_mediaid(uniqueids):
+ for source in ('tmdb', 'imdb', 'unknown'):
+ if source in uniqueids:
+ return uniqueids[source]
+
+def _get_data(media_id, clientkey):
+ headers = {'api-key': API_KEY}
+ if clientkey:
+ headers['client-key'] = clientkey
+ api_utils.set_headers(headers)
+ fanarttv_url = API_URL.format(media_id)
+ return api_utils.load_info(fanarttv_url, default={})
+
+def _parse_data(data, language):
+ result = {}
+ for arttype, artlist in data.items():
+ if arttype not in ARTMAP:
+ continue
+ for image in artlist:
+ image_lang = _get_imagelanguage(arttype, image)
+ if image_lang and image_lang != language:
+ continue
+
+ generaltype = ARTMAP[arttype]
+ if generaltype == 'poster' and not image_lang:
+ generaltype = 'keyart'
+ if artlist and generaltype not in result:
+ result[generaltype] = []
+
+ url = quote(image['url'], safe="%/:=&?~#+!$,;'@()*[]")
+ resultimage = {'url': url, 'preview': url.replace('.fanart.tv/fanart/', '.fanart.tv/preview/')}
+ result[generaltype].append(resultimage)
+
+ return result
+
+def _get_imagelanguage(arttype, image):
+ if 'lang' not in image or arttype == 'moviebackground':
+ return None
+ if arttype in ('movielogo', 'hdmovielogo', 'hdmovieclearart', 'movieart', 'moviebanner',
+ 'moviethumb', 'moviedisc'):
+ return image['lang'] if image['lang'] not in ('', '00') else 'en'
+ # movieposter may or may not have a title and thus need a language
+ return image['lang'] if image['lang'] not in ('', '00') else None