Esempio n. 1
0
 def movieset(self, db_id, include_set_movies_fields=""):
     '''get movieset from kodi db'''
     if include_set_movies_fields:
         optparams = [("setid", try_parse_int(db_id)), ("movies", {"properties": include_set_movies_fields})]
     else:
         optparams = ("setid", try_parse_int(db_id))
     return self.get_json("VideoLibrary.GetMovieSetDetails", returntype="",
                          fields=["title", "art", "playcount"], optparam=optparams)
Esempio n. 2
0
 def album(self, db_id):
     '''get albumdetails from kodi db'''
     album = self.get_json("AudioLibrary.GetAlbumDetails", returntype="albumdetails",
                           fields=FIELDS_ALBUMS, optparam=("albumid", try_parse_int(db_id)))
     # override type as the kodi json api is returning the album type instead of mediatype
     album["type"] = "album"
     return album
Esempio n. 3
0
 def tvshow(self, db_id):
     '''get tvshow from kodi db'''
     tvshow = self.get_json("VideoLibrary.GetTvShowDetails",
                            returntype="tvshowdetails",
                            fields=FIELDS_TVSHOWS,
                            optparam=("tvshowid", try_parse_int(db_id)))
     return self.tvshow_watchedcounts(tvshow)
Esempio n. 4
0
 def episodes(self, sort=None, filters=None, limits=None, filtertype=None, tvshowid=None):
     '''get episodes from kodi db'''
     if tvshowid:
         params = ("tvshowid", try_parse_int(tvshowid))
     else:
         params = None
     return self.get_json("VideoLibrary.GetEpisodes", sort=sort, filters=filters, fields=FIELDS_EPISODES,
                          limits=limits, returntype="episodes", filtertype=filtertype, optparam=params)
 def search_movies(self, title, year=""):
     '''
         Search tmdb for a specific movie, returns a list of all closest matches
         parameters:
         title: (required) the title of the movie to search for
         year: (optional) the year of the movie to search for (enhances search result if supplied)
     '''
     params = {"query": title, "language": KODI_LANGUAGE}
     if year:
         params["year"] = try_parse_int(year)
     return self.get_data("search/movie", params)
 def search_tvshows(self, title, year=""):
     '''
         Search tmdb for a specific tvshow, returns a list of all closest matches
         parameters:
         title: (required) the title of the tvshow to search for
         year: (optional) the first air date year of the tvshow to search for (enhances search result if supplied)
     '''
     params = {"query": title, "language": KODI_LANGUAGE}
     if year:
         params["first_air_date_year"] = try_parse_int(year)
     return self.get_data("search/tv", params)
Esempio n. 7
0
 def search_tvshows(self, title, year=""):
     '''
         Search tmdb for a specific tvshow, returns a list of all closest matches
         parameters:
         title: (required) the title of the tvshow to search for
         year: (optional) the first air date year of the tvshow to search for (enhances search result if supplied)
     '''
     params = {"query": title, "language": KODI_LANGUAGE}
     if year:
         params["first_air_date_year"] = try_parse_int(year)
     return self.get_data("search/tv", params)
Esempio n. 8
0
 def search_movies(self, title, year=""):
     '''
         Search tmdb for a specific movie, returns a list of all closest matches
         parameters:
         title: (required) the title of the movie to search for
         year: (optional) the year of the movie to search for (enhances search result if supplied)
     '''
     params = {"query": title, "language": KODI_LANGUAGE}
     if year:
         params["year"] = try_parse_int(year)
     return self.get_data("search/movie", params)
Esempio n. 9
0
 def score_image(item):
     '''score item based on number of likes and the language'''
     score = 0
     item["url"] = item["url"].replace(" ", "%20")
     score += try_parse_int(item["likes"])
     if "lang" in item:
         if item["lang"] == KODI_LANGUAGE:
             score += 1000
         elif item["lang"] == "en":
             score += 500
     item["score"] = score
     return item
Esempio n. 10
0
    def handle_command(self, command):
        if command == "q" or command == "-q" or command == "quit" or command == "exit":  # quit
            exit(0)
            return

        idx = try_parse_int(command)
        if idx is not None:
            if not self.is_valid_search_result_idx(idx):
                print("Invalid index")
                print()
                return

            self.open_search_result(idx)
            exit(0)
            return

        if command == "-r":  # repeat last query
            last_results = history.get_last_query_results()
            if last_results is None:
                print("There is no last results to show.")
                print()
            else:
                self.search_results = last_results
                self.print_search_results()
            return

        if command.startswith("-a "):  # append to last query
            last_search_query = history.get_last_search_query()
            search_query = last_search_query + command[len("-a"):]
            print("Fetching search results for: \"%s\"" % search_query)
            print()

            self.fetch_search_results(search_query)
            self.print_search_results()
            return

        if command == "-b":  # go back one search result
            if len(self.search_result_history) == 0:
                print("Can't go back")
                print()
                return

            self.search_results = self.search_result_history.pop()
            print("Showing search results for: \"%s\"" % self.search_results.query)
            print()
            self.print_search_results()
            history.write_last_query(self.search_results)
            return

        self.fetch_search_results(command)
        self.print_search_results()
Esempio n. 11
0
 def get_top250_db(self):
     '''
         get the top250 listing for both movies and tvshows as dict with imdbid as key
         uses 7 day cache to prevent overloading the server
     '''
     results = {}
     for listing in [("top", "chttp_tt_"), ("toptv", "chttvtp_tt_")]:
         html = requests.get("http://www.imdb.com/chart/%s" % listing[0],
                             headers={'User-agent': 'Mozilla/5.0'},
                             timeout=20)
         soup = BeautifulSoup.BeautifulSoup(html.text)
         for table in soup.findAll('table'):
             if table.get("class") == "chart full-width":
                 for td_def in table.findAll('td'):
                     if td_def.get("class") == "titleColumn":
                         a_link = td_def.find("a")
                         if a_link:
                             url = a_link["href"]
                             imdb_id = url.split("/")[2]
                             imdb_rank = url.split(listing[1])[1]
                             results[imdb_id] = try_parse_int(imdb_rank)
     return results
 def map_details(data):
     """helper method to map the details received from trakt to kodi compatible format"""
     result = {}
     ytb_plgn = 'plugin://plugin.video.youtube/?action=play_video&videoid='
     if sys.version_info.major == 3:
         for key, value in data.items():
             # filter the N/A values
             if value in ["N/A", "None"] or not value:
                 continue
             if key == "title":
                 result["title"] = value
             elif key == "year":
                 try:
                     result["year"] = try_parse_int(value.split("-")[0])
                 except Exception:
                     result["year"] = value
             elif key == "genre":
                 result["genre"] = value.split(", ")
             elif key == "country":
                 result["country"] = value
             elif key == "votes":
                 result["votes.trakt"] = value
             elif key == "rating":
                 result["rating.trakt"] = value
             elif key == "trailer":
                 trakttr = value.split("=")[1]
                 result["trakt.trailer"] = '%s%s' % (ytb_plgn, trakttr)
             elif key == "country":
                 result["country"] = value
             elif key == "status":
                 result["status"] = value
             elif key == "overview":
                 result["trakt.plot"] = value
             elif key == "tagline":
                 result["trakt.tagline"] = value
             elif key == "aired_episodes":
                 result["aired.episodes"] = value
     return result
Esempio n. 13
0
 def get_top250_db(self):
     '''
         get the top250 listing for both movies and tvshows as dict with imdbid as key
         uses 7 day cache to prevent overloading the server
     '''
     results = {}
     for listing in [("top", "chttp_tt_"), ("toptv", "chttvtp_tt_")]:
         html = requests.get(
             "http://www.imdb.com/chart/%s" %
             listing[0], headers={
                 'User-agent': 'Mozilla/5.0'}, timeout=20)
         soup = BeautifulSoup.BeautifulSoup(html.text)
         for table in soup.findAll('table'):
             if table.get("class") == "chart full-width":
                 for td_def in table.findAll('td'):
                     if td_def.get("class") == "titleColumn":
                         a_link = td_def.find("a")
                         if a_link:
                             url = a_link["href"]
                             imdb_id = url.split("/")[2]
                             imdb_rank = url.split(listing[1])[1]
                             results[imdb_id] = try_parse_int(imdb_rank)
     return results
Esempio n. 14
0
    def get_user_to_pick_a_result(self, promt_msg):
        if self._get_num_items() == 0:
            print("No results to choose from...")
            return False

        self._set_user_input_mode_to_allow_input(True)
        self._display_page()

        user_picked_something = False
        self.user_has_quit = False
        while not user_picked_something:

            user_input = input()
            handled_input = self._check_and_handle_page_input(user_input)
            if handled_input:
                if self.user_has_quit:
                    return False
                continue

            # Check to make sure we have an integer
            user_idx = utils.try_parse_int(user_input)
            if user_idx is False:
                utils.print_error(
                    "\"{}\" is not a valid option.".format(user_input))
                continue

            # Check if the integer is an index on the page
            if user_idx < 0 or user_idx >= self.num_items_per_page:
                print("Must select a menu option between (0 and {})".format(
                    self.num_items_per_page - 1))
                continue

            # We have a valid index at this point
            # Now get the actual index in the list
            user_picked_something = True

        return self._get_item_idx_for_item_in_page_idx(user_idx)
Esempio n. 15
0
 def episode(self, db_id):
     '''get episode from kodi db'''
     return self.get_json("VideoLibrary.GetEpisodeDetails", returntype="episodedetails",
                          fields=FIELDS_EPISODES, optparam=("episodeid", try_parse_int(db_id)))
Esempio n. 16
0
 def movie(self, db_id):
     '''get moviedetails from kodi db'''
     return self.get_json("VideoLibrary.GetMovieDetails", returntype="moviedetails",
                          fields=FIELDS_MOVIES, optparam=("movieid", try_parse_int(db_id)))
Esempio n. 17
0
 def channel(self, db_id):
     '''get pvr channel from kodi db'''
     return self.get_json("PVR.GetChannelDetails", returntype="channeldetails",
                          fields=FIELDS_CHANNELS, optparam=("channelid", try_parse_int(db_id)))
Esempio n. 18
0
 def recording(self, db_id):
     '''get pvr recording from kodi db'''
     return self.get_json("PVR.GetRecordingDetails", returntype="recordingdetails",
                          fields=FIELDS_RECORDINGS, optparam=("recordingid", try_parse_int(db_id)))
Esempio n. 19
0
 def artist(self, db_id):
     '''get artistdetails from kodi db'''
     return self.get_json("AudioLibrary.GetArtistDetails", returntype="artistdetails",
                          fields=FIELDS_ARTISTS, optparam=("artistid", try_parse_int(db_id)))
Esempio n. 20
0
 def map_details(data):
     '''helper method to map the details received from omdb to kodi compatible format'''
     result = {}
     for key, value in data.iteritems():
         # filter the N/A values
         if value in ["N/A", "NA"] or not value:
             continue
         if key == "Title":
             result["title"] = value
         elif key == "Year":
             try:
                 result["year"] = try_parse_int(value.split("-")[0])
             except Exception:
                 result["year"] = value
         elif key == "Year":
             result["year"] = value
         if key == "Rated":
             result["mpaa"] = value.replace("Rated", "")
         elif key == "Title":
             result["title"] = value
         elif key == "Released":
             date_time = arrow.get(value, "DD MMM YYYY")
             result["premiered"] = date_time.strftime(
                 xbmc.getRegion("dateshort"))
             try:
                 result["premiered.formatted"] = date_time.format(
                     'DD MMM YYYY', locale=KODI_LANGUAGE)
             except Exception:
                 result["premiered.formatted"] = value
         elif key == "Runtime":
             result["runtime"] = try_parse_int(value.replace(" min",
                                                             "")) * 60
         elif key == "Genre":
             result["genre"] = value.split(", ")
         elif key == "Director":
             result["director"] = value.split(", ")
         elif key == "Writer":
             result["writer"] = value.split(", ")
         elif key == "Country":
             result["country"] = value.split(", ")
         elif key == "Awards":
             result["awards"] = value
         elif key == "Poster":
             result["thumbnail"] = value
             result["art"] = {}
             result["art"]["thumb"] = value
         elif key == "imdbVotes":
             result["votes.imdb"] = value
             result["votes"] = try_parse_int(value.replace(",", ""))
         elif key == "Ratings":
             for rating_item in value:
                 if rating_item["Source"] == "Internet Movie Database":
                     rating = rating_item["Value"]
                     result["rating.imdb.text"] = rating
                     rating = rating.split("/")[0]
                     result["rating.imdb"] = rating
                     result["rating"] = float(rating)
                     result["rating.percent.imdb"] = "%s" % (try_parse_int(
                         float(rating) * 10))
                 elif rating_item["Source"] == "Rotten Tomatoes":
                     rating = rating_item["Value"]
                     result["rottentomatoes.rating.percent"] = rating
                     rating = rating.replace("%", "")
                     # this should be a dedicated rt rating instead of the meter
                     result["rottentomatoes.rating"] = rating
                     result["rating.rt"] = rating
                     result["rottentomatoes.meter"] = rating
                     result["rottentomatoesmeter"] = rating
                     rating = int(rating)
                     if rating < 60:
                         result["rottentomatoes.rotten"] = rating
                         result["rottentomatoes.image"] = "rotten"
                     else:
                         result["rottentomatoes.fresh"] = rating
                         result["rottentomatoes.image"] = "fresh"
                 elif rating_item["Source"] == "Metacritic":
                     rating = rating_item["Value"]
                     result["rating.mc.text"] = rating
                     rating = rating.split("/")[0]
                     result["metacritic.rating"] = rating
                     result["rating.mc"] = rating
                     result["metacritic.rating.percent"] = "%s" % rating
         elif key == "imdbID":
             result["imdbnumber"] = value
         elif key == "BoxOffice":
             result["boxoffice"] = value
         elif key == "DVD":
             date_time = arrow.get(value, "DD MMM YYYY")
             result["dvdrelease"] = date_time.format('YYYY-MM-DD')
             result["dvdrelease.formatted"] = date_time.format(
                 'DD MMM YYYY', locale=KODI_LANGUAGE)
         elif key == "Production":
             result["studio"] = value.split(", ")
         elif key == "Website":
             result["homepage"] = value
         # rotten tomatoes - will probably never work again (OMDBAPI doesnt't provide them anymore)
         elif key == "tomatoReviews":
             result["rottentomatoes.reviews"] = formatted_number(value)
         elif key == "tomatoConsensus":
             result["rottentomatoes.consensus"] = value
         elif key == "tomatoUserMeter":
             result["rottentomatoes.usermeter"] = value
         elif key == "tomatoUserRating":
             result["rottentomatoes.userrating"] = value
             result["rottentomatoes.userrating.percent"] = "%s" % (
                 try_parse_int(float(value) * 10))
         elif key == "tomatoUserReviews":
             result["rottentomatoes.userreviews"] = int_with_commas(value)
         elif key == "tomatoURL":
             result["rottentomatoes.url"] = value
     return result
 def map_details(data):
     """helper method to map the details received from omdb to kodi compatible format"""
     result = {}
     if sys.version_info.major == 3:
         for key, value in data.items():
             # filter the N/A values
             if value in ["N/A", "NA"] or not value:
                 continue
             if key == "title":
                 result["title"] = value
             elif key == "year":
                 try:
                     result["year"] = try_parse_int(value.split("-")[0])
                 except Exception:
                     result["year"] = value
             elif key == "rated":
                 result["mpaa"] = value.replace("Rated", "")
             elif key == "released":
                 date_time = arrow.get(value, "DD MMM YYYY")
                 result["premiered"] = date_time.strftime(
                     xbmc.getRegion("dateshort"))
                 try:
                     result["premiered.formatted"] = date_time.format(
                         'DD MMM YYYY', locale=KODI_LANGUAGE)
                 except Exception:
                     result["premiered.formatted"] = value
             elif key == "runtime":
                 result["runtime"] = try_parse_int(value.replace(
                     " min", "")) * 60
             elif key == "genre":
                 result["genre"] = value.split(", ")
             elif key == "director":
                 result["director"] = value.split(", ")
             elif key == "writer":
                 result["writer"] = value.split(", ")
             elif key == "country":
                 result["country"] = value.split(", ")
                 result["country.0"] = value.split(", ")[0]
             elif key == "awards":
                 result["awards"] = value
             elif key == "poster":
                 result["thumbnail"] = value
                 result["art"] = {}
                 result["art"]["thumb"] = value
             elif key == "imdbVotes":
                 result["votes.imdb"] = value
                 result["votes"] = try_parse_int(value.replace(",", ""))
             elif key == "imdbRating":
                 result["rating.imdb"] = value
                 result["rating"] = float(value)
                 result["rating.percent.imdb"] = "%s" % (try_parse_int(
                     float(value) * 10))
             elif key == "metascore":
                 result["metacritic.rating"] = value
                 result["metacritic.rating.percent"] = "%s" % value
             elif key == "imdbID":
                 result["imdbnumber"] = value
             elif key == "BoxOffice":
                 result["boxoffice"] = value
             elif key == "DVD":
                 date_time = arrow.get(value, "DD MMM YYYY")
                 result["dvdrelease"] = date_time.format('YYYY-MM-DD')
                 result["dvdrelease.formatted"] = date_time.format(
                     'DD MMM YYYY', locale=KODI_LANGUAGE)
             elif key == "Production":
                 result["studio"] = value.split(", ")
             elif key == "Website":
                 result["homepage"] = value
             elif key == "plot":
                 result["plot"] = value
                 result["imdb.plot"] = value
             elif key == "type":
                 if value == "series":
                     result["type"] = "tvshow"
                 else:
                     result["type"] = value
                 result["media_type"] = result["type"]
         # rotten tomatoes
             elif key == "tomatoMeter":
                 result["rottentomatoes.meter"] = value
                 result["rottentomatoesmeter"] = value
             elif key == "tomatoImage":
                 result["rottentomatoes.image"] = value
             elif key == "tomatoRating":
                 result["rottentomatoes.rating"] = value
                 result["rottentomatoes.rating.percent"] = "%s" % (
                     try_parse_int(float(value) * 10))
                 result["rating.rt"] = value
             elif key == "tomatoReviews":
                 result["rottentomatoes.reviews"] = formatted_number(value)
             elif key == "tomatoFresh":
                 result["rottentomatoes.fresh"] = value
             elif key == "tomatoRotten":
                 result["rottentomatoes.rotten"] = value
             elif key == "tomatoConsensus":
                 result["rottentomatoes.consensus"] = value
             elif key == "tomatoUserMeter":
                 result["rottentomatoes.usermeter"] = value
             elif key == "tomatoUserRating":
                 result["rottentomatoes.userrating"] = value
                 result["rottentomatoes.userrating.percent"] = "%s" % (
                     try_parse_int(float(value) * 10))
             elif key == "tomatoUserReviews":
                 result["rottentomatoes.userreviews"] = int_with_commas(
                     value)
             elif key == "tomatoeURL":
                 result["rottentomatoes.url"] = value
     else:
         for key, value in data.iteritems():
             # filter the N/A values
             if value in ["N/A", "NA"] or not value:
                 continue
             if key == "title":
                 result["title"] = value
             elif key == "Year":
                 try:
                     result["year"] = try_parse_int(value.split("-")[0])
                 except Exception:
                     result["year"] = value
             elif key == "rated":
                 result["mpaa"] = value.replace("Rated", "")
             elif key == "released":
                 date_time = arrow.get(value, "DD MMM YYYY")
                 result["premiered"] = date_time.strftime(
                     xbmc.getRegion("dateshort"))
                 try:
                     result["premiered.formatted"] = date_time.format(
                         'DD MMM YYYY', locale=KODI_LANGUAGE)
                 except Exception:
                     result["premiered.formatted"] = value
             elif key == "runtime":
                 result["runtime"] = try_parse_int(value.replace(
                     " min", "")) * 60
             elif key == "genre":
                 result["genre"] = value.split(", ")
             elif key == "director":
                 result["director"] = value.split(", ")
             elif key == "writer":
                 result["writer"] = value.split(", ")
             elif key == "country":
                 result["country"] = value.split(", ")
             elif key == "awards":
                 result["awards"] = value
             elif key == "poster":
                 result["thumbnail"] = value
                 result["art"] = {}
                 result["art"]["thumb"] = value
             elif key == "imdbVotes":
                 result["votes.imdb"] = value
                 result["votes"] = try_parse_int(value.replace(",", ""))
             elif key == "imdbRating":
                 result["rating.imdb"] = value
                 result["rating"] = float(value)
                 result["rating.percent.imdb"] = "%s" % (try_parse_int(
                     float(value) * 10))
             elif key == "metascore":
                 result["metacritic.rating"] = value
                 result["metacritic.rating.percent"] = "%s" % value
             elif key == "imdbID":
                 result["imdbnumber"] = value
             elif key == "BoxOffice":
                 result["boxoffice"] = value
             elif key == "DVD":
                 date_time = arrow.get(value, "DD MMM YYYY")
                 result["dvdrelease"] = date_time.format('YYYY-MM-DD')
                 result["dvdrelease.formatted"] = date_time.format(
                     'DD MMM YYYY', locale=KODI_LANGUAGE)
             elif key == "Production":
                 result["studio"] = value.split(", ")
             elif key == "Website":
                 result["homepage"] = value
             elif key == "plot":
                 result["plot"] = value
                 result["imdb.plot"] = value
             elif key == "type":
                 if value == "series":
                     result["type"] = "tvshow"
                 else:
                     result["type"] = value
                 result["media_type"] = result["type"]
         # rotten tomatoes
             elif key == "tomatoMeter":
                 result["rottentomatoes.meter"] = value
                 result["rottentomatoesmeter"] = value
             elif key == "tomatoImage":
                 result["rottentomatoes.image"] = value
             elif key == "tomatoRating":
                 result["rottentomatoes.rating"] = value
                 result["rottentomatoes.rating.percent"] = "%s" % (
                     try_parse_int(float(value) * 10))
                 result["rating.rt"] = value
             elif key == "tomatoReviews":
                 result["rottentomatoes.reviews"] = formatted_number(value)
             elif key == "tomatoFresh":
                 result["rottentomatoes.fresh"] = value
             elif key == "tomatoRotten":
                 result["rottentomatoes.rotten"] = value
             elif key == "tomatoConsensus":
                 result["rottentomatoes.consensus"] = value
             elif key == "tomatoUserMeter":
                 result["rottentomatoes.usermeter"] = value
             elif key == "tomatoUserRating":
                 result["rottentomatoes.userrating"] = value
                 result["rottentomatoes.userrating.percent"] = "%s" % (
                     try_parse_int(float(value) * 10))
             elif key == "tomatoUserReviews":
                 result["rottentomatoes.userreviews"] = int_with_commas(
                     value)
             elif key == "tomatoeURL":
                 result["rottentomatoes.url"] = value
     return result
Esempio n. 22
0
 def musicvideo(self, db_id):
     '''get musicvideo from kodi db'''
     return self.get_json("VideoLibrary.GetMusicVideoDetails", returntype="musicvideodetails",
                          fields=FIELDS_MUSICVIDEOS, optparam=("musicvideoid", try_parse_int(db_id)))
Esempio n. 23
0
 def map_details(self, data, media_type):
     '''helper method to map the details received from tmdb to kodi compatible formatting'''
     if not data:
         return {}
     details = {}
     details["tmdb_id"] = data["id"]
     details["rating"] = data["vote_average"]
     details["votes"] = data["vote_count"]
     details["rating.tmdb"] = data["vote_average"]
     details["votes.tmdb"] = data["vote_count"]
     details["popularity"] = data["popularity"]
     details["popularity.tmdb"] = data["popularity"]
     details["plot"] = data["overview"]
     details["genre"] = [item["name"] for item in data["genres"]]
     details["homepage"] = data["homepage"]
     details["status"] = data["status"]
     details["cast"] = []
     details["castandrole"] = []
     details["writer"] = []
     details["director"] = []
     details["media_type"] = media_type
     # cast
     if "credits" in data:
         if "cast" in data["credits"]:
             for cast_member in data["credits"]["cast"]:
                 cast_thumb = ""
                 if cast_member["profile_path"]:
                     cast_thumb = "http://image.tmdb.org/t/p/original%s" % cast_member["profile_path"]
                 details["cast"].append({"name": cast_member["name"], "role": cast_member["character"],
                                         "thumbnail": cast_thumb})
                 details["castandrole"].append((cast_member["name"], cast_member["character"]))
         # crew (including writers and directors)
         if "crew" in data["credits"]:
             for crew_member in data["credits"]["crew"]:
                 cast_thumb = ""
                 if crew_member["profile_path"]:
                     cast_thumb = "http://image.tmdb.org/t/p/original%s" % crew_member["profile_path"]
                 if crew_member["job"] in ["Author", "Writer"]:
                     details["writer"].append(crew_member["name"])
                 if crew_member["job"] in ["Producer", "Executive Producer"]:
                     details["director"].append(crew_member["name"])
                 if crew_member["job"] in ["Producer", "Executive Producer", "Author", "Writer"]:
                     details["cast"].append({"name": crew_member["name"], "role": crew_member["job"],
                                             "thumbnail": cast_thumb})
     # artwork
     details["art"] = {}
     if data.get("images"):
         if data["images"].get("backdrops"):
             fanarts = self.get_best_images(data["images"]["backdrops"])
             details["art"]["fanarts"] = fanarts
             details["art"]["fanart"] = fanarts[0] if fanarts else ""
         if data["images"].get("posters"):
             posters = self.get_best_images(data["images"]["posters"])
             details["art"]["posters"] = posters
             details["art"]["poster"] = posters[0] if posters else ""
     if not details["art"].get("poster") and data.get("poster_path"):
         details["art"]["poster"] = "http://image.tmdb.org/t/p/original%s" % data["poster_path"]
     if not details["art"].get("fanart") and data.get("backdrop_path"):
         details["art"]["fanart"] = "http://image.tmdb.org/t/p/original%s" % data["backdrop_path"]
     # movies only
     if media_type == "movie":
         details["title"] = data["title"]
         details["originaltitle"] = data["original_title"]
         if data["belongs_to_collection"]:
             details["set"] = data["belongs_to_collection"].get("name", "")
         if data.get("release_date"):
             details["premiered"] = data["release_date"]
             details["year"] = try_parse_int(data["release_date"].split("-")[0])
         details["tagline"] = data["tagline"]
         if data["runtime"]:
             details["runtime"] = data["runtime"] * 60
         details["imdbnumber"] = data["imdb_id"]
         details["budget"] = data["budget"]
         details["budget.formatted"] = int_with_commas(data["budget"])
         details["revenue"] = data["revenue"]
         details["revenue.formatted"] = int_with_commas(data["revenue"])
         if data.get("production_companies"):
             details["studio"] = [item["name"] for item in data["production_companies"]]
         if data.get("production_countries"):
             details["country"] = [item["name"] for item in data["production_countries"]]
         if data.get("keywords"):
             details["tag"] = [item["name"] for item in data["keywords"]["keywords"]]
     # tvshows only
     if media_type == "tvshow":
         details["title"] = data["name"]
         details["originaltitle"] = data["original_name"]
         if data.get("created_by"):
             details["director"] += [item["name"] for item in data["created_by"]]
         if data.get("episode_run_time"):
             details["runtime"] = data["episode_run_time"][0] * 60
         if data.get("first_air_date"):
             details["premiered"] = data["first_air_date"]
             details["year"] = try_parse_int(data["first_air_date"].split("-")[0])
         if "last_air_date" in data:
             details["lastaired"] = data["last_air_date"]
         if data.get("networks"):
             details["studio"] = [item["name"] for item in data["networks"]]
         if "origin_country" in data:
             details["country"] = data["origin_country"]
         if data.get("external_ids"):
             details["imdbnumber"] = data["external_ids"].get("imdb_id", "")
             details["tvdb_id"] = data["external_ids"].get("tvdb_id", "")
         if "results" in data["keywords"]:
             details["tag"] = [item["name"] for item in data["keywords"]["results"]]
     # trailer
     for video in data["videos"]["results"]:
         if video["site"] == "YouTube" and video["type"] == "Trailer":
             details["trailer"] = 'plugin://plugin.video.youtube/?action=play_video&videoid=%s' % video["key"]
             break
     return details
 def map_details(data):
     '''helper method to map the details received from omdb to kodi compatible format'''
     result = {}
     for key, value in data.iteritems():
         # filter the N/A values
         if value in ["N/A", "NA"] or not value:
             continue
         if key == "Title":
             result["title"] = value
         elif key == "Year":
             try:
                 result["year"] = try_parse_int(value.split("-")[0])
             except Exception:
                 result["year"] = value
         elif key == "rated":
             result["mpaa"] = value.replace("Rated", "")
         elif key == "title":
             result["title"] = value
         elif key == "released":
             date_time = arrow.get(value, "DD MMM YYYY")
             result["premiered"] = date_time.strftime(
                 xbmc.getRegion("dateshort"))
             try:
                 result["premiered.formatted"] = date_time.format(
                     'DD MMM YYYY', locale=KODI_LANGUAGE)
             except Exception:
                 result["premiered.formatted"] = value
         elif key == "runtime":
             result["runtime"] = try_parse_int(value.replace(" min",
                                                             "")) * 60
         elif key == "genre":
             result["genre"] = value.split(", ")
         elif key == "director":
             result["director"] = value.split(", ")
         elif key == "writer":
             result["writer"] = value.split(", ")
         elif key == "country":
             result["country"] = value.split(", ")
         elif key == "awards":
             result["awards"] = value
         elif key == "poster":
             result["thumbnail"] = value
             result["art"] = {}
             result["art"]["thumb"] = value
         elif key == "imdbVotes":
             result["votes.imdb"] = value
             result["votes"] = try_parse_int(value.replace(",", ""))
         elif key == "tomatoUserMeter":
             result["rottentomatoes.audience"] = value
         elif key == "metascore":
             rating = value
             result["rating.mc.text"] = rating
             rating = rating.split("/")[0]
             result["metacritic.rating"] = rating
             result["rating.mc"] = rating
             result["metacritic.rating.percent"] = "%s" % rating
         elif key == "tomatoMeter":
             rating = value
             result["rottentomatoes.rating.percent"] = rating
             rating = rating.replace("%", "")
             # this should be a dedicated rt rating instead of the meter
             result["rottentomatoes.rating"] = rating
             result["rating.rt"] = rating
             result["rottentomatoes.meter"] = rating
             result["rottentomatoesmeter"] = rating
             rating = int(rating)
             if rating < 60:
                 result["rottentomatoes.rotten"] = rating
                 result["rottentomatoes.image"] = "rotten"
             else:
                 result["rottentomatoes.fresh"] = rating
                 result["rottentomatoes.image"] = "fresh"
         elif key == "imdbID":
             result["imdbnumber"] = value
         elif key == "BoxOffice":
             result["boxoffice"] = value
         elif key == "DVD":
             date_time = arrow.get(value, "DD MMM YYYY")
             result["dvdrelease"] = date_time.format('YYYY-MM-DD')
             result["dvdrelease.formatted"] = date_time.format(
                 'DD MMM YYYY', locale=KODI_LANGUAGE)
         elif key == "Production":
             result["studio"] = value.split(", ")
         elif key == "Website":
             result["homepage"] = value
         elif key == "plot":
             result["plot"] = value
             result["imdb.plot"] = value
         elif key == "Type":
             if value == "series":
                 result["type"] = "tvshow"
             else:
                 result["type"] = value
             result["media_type"] = result["type"]
     return result
Esempio n. 25
0
 def song(self, db_id):
     '''get songdetails from kodi db'''
     return self.get_json("AudioLibrary.GetSongDetails", returntype="songdetails",
                          fields=FIELDS_SONGS, optparam=("songid", try_parse_int(db_id)))
 def map_details(self, data, media_type):
     '''helper method to map the details received from tmdb to kodi compatible formatting'''
     if not data:
         return {}
     details = {}
     details["tmdb_id"] = data["id"]
     details["rating"] = data["vote_average"]
     details["votes"] = data["vote_count"]
     details["rating.tmdb"] = data["vote_average"]
     details["votes.tmdb"] = data["vote_count"]
     details["popularity"] = data["popularity"]
     details["popularity.tmdb"] = data["popularity"]
     details["plot"] = data["overview"]
     details["genre"] = [item["name"] for item in data["genres"]]
     details["homepage"] = data["homepage"]
     details["status"] = data["status"]
     details["cast"] = []
     details["castandrole"] = []
     details["writer"] = []
     details["director"] = []
     details["media_type"] = media_type
     # cast
     if "credits" in data:
         if "cast" in data["credits"]:
             for cast_member in data["credits"]["cast"]:
                 cast_thumb = ""
                 if cast_member["profile_path"]:
                     cast_thumb = "http://image.tmdb.org/t/p/original%s" % cast_member[
                         "profile_path"]
                 details["cast"].append({
                     "name": cast_member["name"],
                     "role": cast_member["character"],
                     "thumbnail": cast_thumb
                 })
                 details["castandrole"].append(
                     (cast_member["name"], cast_member["character"]))
         # crew (including writers and directors)
         if "crew" in data["credits"]:
             for crew_member in data["credits"]["crew"]:
                 cast_thumb = ""
                 if crew_member["profile_path"]:
                     cast_thumb = "http://image.tmdb.org/t/p/original%s" % crew_member[
                         "profile_path"]
                 if crew_member["job"] in ["Author", "Writer"]:
                     details["writer"].append(crew_member["name"])
                 if crew_member["job"] in [
                         "Producer", "Executive Producer"
                 ]:
                     details["director"].append(crew_member["name"])
                 if crew_member["job"] in [
                         "Producer", "Executive Producer", "Author",
                         "Writer"
                 ]:
                     details["cast"].append({
                         "name": crew_member["name"],
                         "role": crew_member["job"],
                         "thumbnail": cast_thumb
                     })
     # artwork
     details["art"] = {}
     if data.get("images"):
         if data["images"].get("backdrops"):
             fanarts = self.get_best_images(data["images"]["backdrops"])
             details["art"]["fanarts"] = fanarts
             details["art"]["fanart"] = fanarts[0] if fanarts else ""
         if data["images"].get("posters"):
             posters = self.get_best_images(data["images"]["posters"])
             details["art"]["posters"] = posters
             details["art"]["poster"] = posters[0] if posters else ""
     if not details["art"].get("poster") and data.get("poster_path"):
         details["art"][
             "poster"] = "http://image.tmdb.org/t/p/original%s" % data[
                 "poster_path"]
     if not details["art"].get("fanart") and data.get("backdrop_path"):
         details["art"][
             "fanart"] = "http://image.tmdb.org/t/p/original%s" % data[
                 "backdrop_path"]
     # movies only
     if media_type == "movie":
         details["title"] = data["title"]
         details["originaltitle"] = data["original_title"]
         if data["belongs_to_collection"]:
             details["set"] = data["belongs_to_collection"].get("name", "")
         if data.get("release_date"):
             details["premiered"] = data["release_date"]
             details["year"] = try_parse_int(
                 data["release_date"].split("-")[0])
         details["tagline"] = data["tagline"]
         if data["runtime"]:
             details["runtime"] = data["runtime"] * 60
         details["imdbnumber"] = data["imdb_id"]
         details["budget"] = data["budget"]
         details["budget.formatted"] = int_with_commas(data["budget"])
         details["revenue"] = data["revenue"]
         details["revenue.formatted"] = int_with_commas(data["revenue"])
         if data.get("production_companies"):
             details["studio"] = [
                 item["name"] for item in data["production_companies"]
             ]
         if data.get("production_countries"):
             details["country"] = [
                 item["name"] for item in data["production_countries"]
             ]
         if data.get("keywords"):
             details["tag"] = [
                 item["name"] for item in data["keywords"]["keywords"]
             ]
     # tvshows only
     if media_type == "tvshow":
         details["title"] = data["name"]
         details["originaltitle"] = data["original_name"]
         if data.get("created_by"):
             details["director"] += [
                 item["name"] for item in data["created_by"]
             ]
         if data.get("episode_run_time"):
             details["runtime"] = data["episode_run_time"][0] * 60
         if data.get("first_air_date"):
             details["premiered"] = data["first_air_date"]
             details["year"] = try_parse_int(
                 data["first_air_date"].split("-")[0])
         if "last_air_date" in data:
             details["lastaired"] = data["last_air_date"]
         if data.get("networks"):
             details["studio"] = [item["name"] for item in data["networks"]]
         if "origin_country" in data:
             details["country"] = data["origin_country"]
         if data.get("external_ids"):
             details["imdbnumber"] = data["external_ids"].get("imdb_id", "")
             details["tvdb_id"] = data["external_ids"].get("tvdb_id", "")
         if "results" in data["keywords"]:
             details["tag"] = [
                 item["name"] for item in data["keywords"]["results"]
             ]
     # trailer
     for video in data["videos"]["results"]:
         if video["site"] == "YouTube" and video["type"] == "Trailer":
             details[
                 "trailer"] = 'plugin://plugin.video.youtube/?action=play_video&videoid=%s' % video[
                     "key"]
             break
     return details
Esempio n. 27
0
 def map_details(data):
     '''helper method to map the details received from omdb to kodi compatible format'''
     result = {}
     for key, value in data.iteritems():
         # filter the N/A values
         if value in ["N/A", "NA"] or not value:
             continue
         if key == "Title":
             result["title"] = value
         elif key == "Year":
             try:
                 result["year"] = try_parse_int(value.split("-")[0])
             except Exception:
                 result["year"] = value
         elif key == "Year":
             result["year"] = value
         if key == "Rated":
             result["mpaa"] = value.replace("Rated", "")
         elif key == "Title":
             result["title"] = value
         elif key == "Released":
             date_time = arrow.get(value, "DD MMM YYYY")
             result["premiered"] = date_time.strftime(xbmc.getRegion("dateshort"))
             try:
                 result["premiered.formatted"] = date_time.format('DD MMM YYYY', locale=KODI_LANGUAGE)
             except Exception:
                 result["premiered.formatted"] = value
         elif key == "Runtime":
             result["runtime"] = try_parse_int(value.replace(" min", "")) * 60
         elif key == "Genre":
             result["genre"] = value.split(", ")
         elif key == "Director":
             result["director"] = value.split(", ")
         elif key == "Writer":
             result["writer"] = value.split(", ")
         elif key == "Country":
             result["country"] = value.split(", ")
         elif key == "Awards":
             result["awards"] = value
         elif key == "Poster":
             result["thumbnail"] = value
             result["art"] = {}
             result["art"]["thumb"] = value
         elif key == "imdbVotes":
             result["votes.imdb"] = value
             result["votes"] = try_parse_int(value.replace(",", ""))
         elif key == "Ratings":
             for rating_item in value:
                 if rating_item["Source"] == "Internet Movie Database":
                     rating = rating_item["Value"]
                     result["rating.imdb.text"] = rating
                     rating = rating.split("/")[0]
                     result["rating.imdb"] = rating
                     result["rating"] = float(rating)
                     result["rating.percent.imdb"] = "%s" % (try_parse_int(float(rating) * 10))
                 elif rating_item["Source"] == "Rotten Tomatoes":
                     rating = rating_item["Value"]
                     result["rottentomatoes.rating.percent"] = rating
                     rating = rating.replace("%", "")
                     # this should be a dedicated rt rating instead of the meter
                     result["rottentomatoes.rating"] = rating
                     result["rating.rt"] = rating
                     result["rottentomatoes.meter"] = rating
                     result["rottentomatoesmeter"] = rating
                     rating = int(rating)
                     if rating < 60:
                         result["rottentomatoes.rotten"] = rating
                         result["rottentomatoes.image"] = "rotten"
                     else:
                         result["rottentomatoes.fresh"] = rating
                         result["rottentomatoes.image"] = "fresh"
                 elif rating_item["Source"] == "Metacritic":
                     rating = rating_item["Value"]
                     result["rating.mc.text"] = rating
                     rating = rating.split("/")[0]
                     result["metacritic.rating"] = rating
                     result["rating.mc"] = rating
                     result["metacritic.rating.percent"] = "%s" % rating
         elif key == "imdbID":
             result["imdbnumber"] = value
         elif key == "BoxOffice":
             result["boxoffice"] = value
         elif key == "DVD":
             date_time = arrow.get(value, "DD MMM YYYY")
             result["dvdrelease"] = date_time.format('YYYY-MM-DD')
             result["dvdrelease.formatted"] = date_time.format('DD MMM YYYY', locale=KODI_LANGUAGE)
         elif key == "Production":
             result["studio"] = value.split(", ")
         elif key == "Website":
             result["homepage"] = value
         # rotten tomatoes - will probably never work again (OMDBAPI doesnt't provide them anymore)
         elif key == "tomatoReviews":
             result["rottentomatoes.reviews"] = formatted_number(value)
         elif key == "tomatoConsensus":
             result["rottentomatoes.consensus"] = value
         elif key == "tomatoUserMeter":
             result["rottentomatoes.usermeter"] = value
         elif key == "tomatoUserRating":
             result["rottentomatoes.userrating"] = value
             result["rottentomatoes.userrating.percent"] = "%s" % (try_parse_int(float(value) * 10))
         elif key == "tomatoUserReviews":
             result["rottentomatoes.userreviews"] = int_with_commas(value)
         elif key == "tomatoURL":
             result["rottentomatoes.url"] = value
     return result