def get_trailer_xml(item): title = remove_non_ascii(item["title"]) tmdb_id = item["id"] if "release_date" not in item: year = "" else: year = item["release_date"].split("-")[0] if not year: year = tmdbsimple.Movies(tmdb_id).info()["release_date"] # url = "tmdb_imdb({0})".format(tmdb_id) summary = remove_non_ascii(item["overview"]) if item["poster_path"]: thumbnail = "https://image.tmdb.org/t/p/w1280/" + item["poster_path"] else: thumbnail = "" if item["backdrop_path"]: fanart = "https://image.tmdb.org/t/p/w1280/" + item["backdrop_path"] else: fanart = "" name = title + " (" + year + ")" if not COLOR1 == "": name = "[COLOR %s]%s[/COLOR]" % (COLOR1, name) xml = "<dir>"\ "<title>%s</title>"\ "<tmdb>trailer/%s</tmdb>"\ "<thumbnail>%s</thumbnail>"\ "<fanart>%s</fanart>"\ "<summary>%s</summary>"\ "</dir>" % (name, tmdb_id, thumbnail, fanart, summary) return xml
def get_movie_xml(item): title = remove_non_ascii(item["title"]) tmdb_id = item["id"] if "release_date" not in item: year = "" else: year = item["release_date"].split("-")[0] if not year: year = tmdbsimple.Movies(tmdb_id).info()["release_date"] url = "tmdb_imdb({0})".format(tmdb_id) imdb = fetch_from_db(url) if not imdb: imdb = item.get("imdb_id", "") if not imdb: imdb = tmdbsimple.Movies(tmdb_id).info()["imdb_id"] save_to_db(imdb, url) if item["poster_path"]: thumbnail = "https://image.tmdb.org/t/p/w1280/" + item["poster_path"] else: thumbnail = "" if item.get("backdrop_path", ""): fanart = "https://image.tmdb.org/t/p/w1280/" + item["backdrop_path"] else: fanart = "" name = title + " (" + year + ")" if not COLOR1 == "": name = "[COLOR %s]%s[/COLOR]" % (COLOR1, name) xml = "<item>"\ "<title>%s</title>"\ "<meta>"\ "<imdb>%s</imdb>"\ "<content>movie</content>"\ "<title>%s</title>"\ "<year>%s</year>"\ "</meta>"\ "<link>"\ "<sublink>search</sublink>"\ "<sublink>searchsd</sublink>"\ "</link>"\ "<thumbnail>%s</thumbnail>"\ "<fanart>%s</fanart>"\ "</item>" % (name, imdb, title, year, thumbnail, fanart) return xml
def _convert_tmdb_movie_metadata(movie, imdb_id, genres_dict=None): """ converts tmdb movie metadata to format suited for kodiswift :param movie: dictionary of tmdb movie metadata :type movie: dict[str,str or dict] :param dict genres_dict: dictionary of kodi movie genres :return: movie metadata :rtype: dict[str,str] """ info = { 'title': movie['title'], 'year': parse_year(movie['release_date']), 'premiered': movie['release_date'], 'rating': movie['vote_average'], 'votes': movie['vote_count'], 'originaltitle': movie['original_title'], 'tmdb': str(movie['id']), 'imdb_id': imdb_id, 'poster': '%s%s' % ("http://image.tmdb.org/t/p/w500", movie['poster_path']), 'fanart': '%s%s' % ("http://image.tmdb.org/t/p/original", movie['backdrop_path']) } if 'overview' in movie: info['plot'] = movie['overview'] elif 'plot' in movie: info['plot'] = movie['plot'] else: info['plot'] = '' info['name'] = u'%s (%s)' % (info['title'], info['year']) try: info['genre'] = u" / ".join([x['name'] for x in movie['genres']]) except KeyError: if genres_dict: info['genre'] = u" / ".join( [genres_dict[x] for x in movie['genre_ids']]) else: info['genre'] = '' videos = tmdbsimple.Movies(movie["id"]).videos() for video in videos["results"]: xbmc.log("video:" + repr(video), xbmc.LOGNOTICE) if video["type"] == "Trailer" and video["site"] == "YouTube": info[ "trailer"] = 'plugin://plugin.video.youtube/play/?video_id=%s' % ( video["key"]) break return info
def get_movie_xml(item): if "movie" in item: item = item["movie"] title = remove_non_ascii(item["title"]) year = item["year"] imdb = item["ids"]["imdb"] tmdb = item["ids"]["tmdb"] info = fetch_from_db("tmdb/%s/movie" % (tmdb)) if not info: if not SKIP_TMDB_INFO and tmdb: info = tmdbsimple.Movies(tmdb).info() new_info = { "poster_path": info.get("poster_path", ""), "backdrop_path": info.get("backdrop_path", "") } save_to_db(new_info, "tmdb/%s/movie" % (tmdb)) else: info = {} if info.get("poster_path"): thumbnail = "https://image.tmdb.org/t/p/w1280/" + info["poster_path"] else: thumbnail = "" if info.get("backdrop_path", ""): fanart = "https://image.tmdb.org/t/p/w1280/" + info["backdrop_path"] else: fanart = "" #name = title + " (" + year + ")" if not COLOR1 == "": name = "[COLOR %s]%s[/COLOR]" % (COLOR1, title) else: name = title xml = "<item>" \ "<title>%s</title>" \ "<meta>" \ "<content>movie</content>" \ "<imdb>%s</imdb>" \ "<title>%s</title>" \ "<year>%s</year>" \ "</meta>" \ "<link>" \ "<sublink>search</sublink>" \ "<sublink>searchsd</sublink>" \ "</link>" \ "<thumbnail>%s</thumbnail>" \ "<fanart>%s</fanart>" \ "</item>" % (name, imdb, title, year, thumbnail, fanart) return xml
def tmdb(url): page = 1 try: xml, __builtin__.content_type = fetch_from_db(url) or (None, None) except Exception: xml, __builtin__.content_type = None, None if not xml: content = "files" xml = "" response = None if url.startswith("movies"): if url.startswith("movies/popular"): last = url.split("/")[-1] if last.isdigit(): page = int(last) if not response: response = tmdbsimple.Movies().popular(page=page) if url.startswith("movies/now_playing"): last = url.split("/")[-1] if last.isdigit(): page = int(last) if not response: response = tmdbsimple.Movies().now_playing(page=page) if url.startswith("movies/top_rated"): last = url.split("/")[-1] if last.isdigit(): page = int(last) if not response: response = tmdbsimple.Movies().top_rated(page=page) for item in response["results"]: xml += get_movie_xml(item) content = "movies" elif url.startswith("people"): if url.startswith("people/popular"): last = url.split("/")[-1] if last.isdigit(): page = int(last) if not response: response = tmdbsimple.People().popular(page=page) for item in response["results"]: xml += get_person_xml(item) content = "movies" elif url.startswith("movie"): if url.startswith("movie/upcoming"): last = url.split("/")[-1] if last.isdigit(): page = int(last) if not response: response = tmdbsimple.Movies().upcoming(page=page) for item in response["results"]: xml += get_trailer_xml(item) content = "movies" elif url.startswith("tv"): if url.startswith("tv/popular"): last = url.split("/")[-1] if last.isdigit(): page = int(last) if not response: response = tmdbsimple.TV().popular(page=page) elif url.startswith("tv/top_rated"): last = url.split("/")[-1] if last.isdigit(): page = int(last) if not response: response = tmdbsimple.TV().top_rated(page=page) elif url.startswith("tv/today"): last = url.split("/")[-1] if last.isdigit(): page = int(last) if not response: response = tmdbsimple.TV().airing_today(page=page) elif url.startswith("tv/on_the_air"): last = url.split("/")[-1] if last.isdigit(): page = int(last) if not response: response = tmdbsimple.TV().on_the_air(page=page) for item in response["results"]: xml += get_show_xml(item) content = "tvshows" elif url.startswith("list"): list_id = url.split("/")[-1] if not response: response = tmdbsimple.Lists(list_id).info() for item in response.get("items", []): if "title" in item: xml += get_movie_xml(item) content = "movies" elif "name" in item: xml += get_show_xml(item) content = "tvshows" elif url.startswith("trailer"): movie_id = url.split("/")[-1] if not response: response = tmdbsimple.Movies(movie_id).videos() for item in response["results"]: if "type" in item: xml += get_trailer_video_xml(item) content = "movies" elif url.startswith("person"): split_url = url.split("/") person_id = split_url[-1] media = split_url[-2] if media == "movies": if not response: response = tmdbsimple.People(person_id).movie_credits() elif media == "shows": if not response: response = tmdbsimple.People(person_id).tv_credits() for job in response: if job == "id": continue for item in response[job]: if media == "movies": xml += get_movie_xml(item) content = "movies" elif media == "shows": xml += get_show_xml(item) content = "tvshows" elif url.startswith("genre"): split_url = url.split("/") if len(split_url) == 3: url += "/1" split_url.append(1) page = int(split_url[-1]) genre_id = split_url[-2] media = split_url[-3] if media == "movies": if not response: response = tmdbsimple.Discover().movie( with_genres=genre_id, page=page) elif media == "shows": if not response: response = tmdbsimple.Discover().tv(with_genres=genre_id, page=page) for item in response["results"]: if media == "movies": xml += get_movie_xml(item) content = "movies" elif media == "shows": xml += get_show_xml(item) content = "tvshows" elif url.startswith("year"): split_url = url.split("/") if len(split_url) == 3: url += "/1" split_url.append(1) page = int(split_url[-1]) release_year = split_url[-2] media = split_url[-3] if media == "movies": if not response: response = tmdbsimple.Discover().movie( primary_release_year=release_year, page=page) for item in response["results"]: if media == "movies": xml += get_movie_xml(item) content = "movies" elif url.startswith("network"): split_url = url.split("/") if len(split_url) == 3: url += "/1" split_url.append(1) page = int(split_url[-1]) network_id = split_url[-2] media = split_url[-3] if media == "shows": if not response: response = tmdbsimple.Discover().tv( with_networks=network_id, page=page) for item in response["results"]: if media == "shows": xml += get_show_xml(item) content = "tvshows" elif url.startswith("company"): split_url = url.split("/") if len(split_url) == 3: url += "/1" split_url.append(1) page = int(split_url[-1]) company_id = split_url[-2] media = split_url[-3] if media == "movies": if not response: response = tmdbsimple.Discover().movie( with_companies=company_id, page=page) for item in response["results"]: if media == "movies": xml += get_movie_xml(item) content = "movies" elif url.startswith("keyword"): split_url = url.split("/") if len(split_url) == 3: url += "/1" split_url.append(1) page = int(split_url[-1]) keyword_id = split_url[-2] media = split_url[-3] if media == "movies": if not response: response = tmdbsimple.Discover().movie( with_keywords=keyword_id, page=page) elif media == "shows": if not response: response = tmdbsimple.Discover().tv( with_keywords=keyword_id, page=page) for item in response["results"]: if media == "movies": xml += get_movie_xml(item) content = "movies" elif media == "shows": xml += get_show_xml(item) content = "tvshows" elif url.startswith("collection"): split_url = url.split("/") collection_id = split_url[-1] if not response: response = tmdbsimple.Collections(collection_id).info() for item in response["parts"]: xml += get_movie_xml(item) content = "movies" elif url.startswith("search"): if url == "search": term = koding.Keyboard("Search For") url = "search/%s" % term split_url = url.split("/") if len(split_url) == 2: url += "/1" split_url.append(1) page = int(split_url[-1]) term = split_url[-2] response = tmdbsimple.Search().multi(query=term, page=page) for item in response["results"]: if item["media_type"] == "movie": xml += get_movie_xml(item) elif item["media_type"] == "tv": xml += get_show_xml(item) elif item["media_type"] == "person": name = item["name"] person_id = item["id"] if item.get("profile_path", ""): thumbnail = "https://image.tmdb.org/t/p/w1280/" + item[ "profile_path"] else: thumbnail = "" xml += "<dir>\n"\ "\t<title>%s Shows TMDB</title>\n"\ "\t<tmdb>person/shows/%s</tmdb>\n"\ "\t<thumbnail>%s</thumbnail>\n"\ "</dir>\n\n" % (name.capitalize(), person_id, thumbnail) xml += "<dir>\n"\ "\t<title>%s Movies TMDB</title>\n"\ "\t<tmdb>person/movies/%s</tmdb>\n"\ "\t<thumbnail>%s</thumbnail>\n"\ "\t</dir>\n\n" % (name.capitalize(), person_id, thumbnail) if response and page < response.get("total_pages", 0): base = url.split("/") if base[-1].isdigit(): base = base[:-1] next_url = "/".join(base) + "/" + str(page + 1) xml += "<dir>"\ "<title>Next Page >></title>"\ "<tmdb>%s</tmdb>"\ "<summary>Go To Page %s</summary>"\ "</dir>" % (next_url, page + 1) __builtin__.content_type = content save_to_db((xml, __builtin__.content_type), url) jenlist = JenList(xml) display_list(jenlist.get_list(), __builtin__.content_type)