Exemple #1
0
def main():
    # Connect to the Plex server
    print("Connecting to the Plex server at '{base_url}'...".format(
        base_url=PLEX_URL))
    try:
        plex = PlexServer(PLEX_URL, PLEX_TOKEN)
    except:
        print("No Plex server found at: {base_url}".format(base_url=PLEX_URL))
        print("Exiting script.")
        return

    # Get list of movies from the Plex server
    print(
        "Retrieving a list of movies from the '{library}' library in Plex...".
        format(library=MOVIE_LIBRARY_NAME))
    try:
        movie_library = plex.library.section(MOVIE_LIBRARY_NAME)
    except:
        print("The '{library}' library does not exist in Plex.".format(
            library=MOVIE_LIBRARY_NAME))
        print("Exiting script.")
        return

    imdb = Imdb()
    conn_db = sqlite3.connect(PLEX_DATABASE_FILE)
    db = conn_db.cursor()

    if RATING_SOURCE == 'imdb':
        print("Using IDMB ratings.")
    elif RATING_SOURCE == 'rt':
        print("Using Rotten Tomatoes critic ratings.")
    else:
        print("Invalid rating source. Must be 'imdb' or 'rt'.")
        print("Exiting script.")
        return

    for plex_movie in movie_library.all():
        if 'imdb://' in plex_movie.guid:
            imdb_id = plex_movie.guid.split('imdb://')[1].split('?')[0]
        elif 'themoviedb://' in plex_movie.guid:
            tmdb_id = plex_movie.guid.split('themoviedb://')[1].split('?')[0]
            imdb_id = get_imdb_id_from_tmdb(tmdb_id)
        else:
            imdb_id = None

        if not imdb_id:
            print("Missing IMDB ID. Skipping movie '{pm.title}'.".format(
                pm=plex_movie))
            continue

        if RATING_SOURCE == 'imdb':
            if imdb.title_exists(imdb_id):
                imdb_movie = imdb.get_title_by_id(imdb_id)
            else:
                print(
                    "Movie not found on IMDB. Skipping movie '{pm.title} ({imdb_id})'."
                    .format(pm=plex_movie, imdb_id=imdb_id))
                continue

            print("{im.rating}\t{pm.title}".format(pm=plex_movie,
                                                   im=imdb_movie))

            if not DRY_RUN:
                db_execute(
                    db,
                    "UPDATE metadata_items SET rating = ? WHERE id = ? AND user_fields NOT LIKE ?",
                    [
                        imdb_movie.rating, plex_movie.ratingKey,
                        '%lockedFields=5%'
                    ])

                extra_data = db_execute(
                    db, "SELECT extra_data FROM metadata_items WHERE id = ?",
                    [plex_movie.ratingKey]).fetchone()[0]
                if extra_data:
                    extra_data = re.sub(
                        r"at%3AratingImage=.+?&|at%3AaudienceRatingImage=.+?&",
                        '', extra_data)

                    db_execute(
                        db,
                        "UPDATE metadata_items SET extra_data = ? WHERE id = ?",
                        [extra_data, plex_movie.ratingKey])

                db_execute(
                    db,
                    "UPDATE metadata_items SET extra_data = ? || extra_data WHERE id = ?",
                    [
                        'at%3AratingImage=imdb%3A%2F%2Fimage%2Erating&',
                        plex_movie.ratingKey
                    ])

        elif RATING_SOURCE == 'rt':
            rt_client_result = RottenTomatoesClient.search(
                term=plex_movie.title, limit=5)
            if RT_MATCH_YEAR:
                rt_movie = next((m for m in rt_client_result['movies']
                                 if m['year'] == plex_movie.year), None)
            else:
                rt_movie = next((m for m in rt_client_result['movies']), None)

            if rt_movie is None:
                print(
                    "Movie not found on RottenTomatoes. Skipping movie '{pm.title} ({imdb_id})'."
                    .format(pm=plex_movie, imdb_id=imdb_id))
                continue

            rt_rating = rt_movie['meterScore'] / 10.0
            tomato = 'ripe' if rt_rating >= 6 else 'rotten'

            print("{rt_rating}\t{pm.title}".format(pm=plex_movie,
                                                   rt_rating=rt_rating))

            if not DRY_RUN:
                db_execute(
                    db,
                    "UPDATE metadata_items SET audience_rating = ? WHERE id = ?",
                    [rt_rating, plex_movie.ratingKey])

                extra_data = db_execute(
                    db, "SELECT extra_data FROM metadata_items WHERE id = ?",
                    [plex_movie.ratingKey]).fetchone()[0]
                if extra_data:
                    extra_data = re.sub(
                        r"at%3AratingImage=.+?&|at%3AaudienceRatingImage=.+?&",
                        '', extra_data)

                    db_execute(
                        db,
                        "UPDATE metadata_items SET extra_data = ? WHERE id = ?",
                        [extra_data, plex_movie.ratingKey])

                db_execute(
                    db,
                    "UPDATE metadata_items SET extra_data = ? || extra_data WHERE id = ?",
                    [
                        'at%3AaudienceRatingImage=rottentomatoes%3A%2F%2Fimage%2Erating%2E{}&'
                        .format(tomato), plex_movie.ratingKey
                    ])

    conn_db.commit()
    db.close()
Exemple #2
0
from imdbpie import Imdb
import json

imdb = Imdb(anonymize=True, cache=True)

for i in xrange(0, 9999999):
    cnt = 0
    movie_id = "tt" + str(i).zfill(7)
    with open('reviews.json', 'w') as fp:
        if imdb.title_exists(movie_id):
            cnt += 1
            title = imdb.get_title_by_id(movie_id)
            print movie_id, title.title
            reviews = imdb.get_title_reviews(movie_id)
            # if reviews == None:
            # 	reviews = []
            # else:
            # 	reviews = [review.__dict__ for review in reviews]
            json.dump([title, reviews],
                      fp,
                      indent=2,
                      default=lambda o: o.__dict__)
            if cnt > 10:
                break
Exemple #3
0
def title_exists(imdb_id):
    global imdb
    if imdb is None:
        imdb = Imdb()

    return imdb.title_exists(imdb_id)
Exemple #4
0
from imdbpie import Imdb
import json

imdb = Imdb(anonymize=True, cache=True)

for i in xrange(0, 9999999):
	cnt = 0
	movie_id = "tt" + str(i).zfill(7)
	with open('reviews.json', 'w') as fp:
		if imdb.title_exists(movie_id):
			cnt += 1
			title = imdb.get_title_by_id(movie_id)
			print movie_id, title.title
			reviews = imdb.get_title_reviews(movie_id)
			# if reviews == None:
			# 	reviews = []
			# else:
			# 	reviews = [review.__dict__ for review in reviews]
			json.dump([title, reviews], fp, indent=2, default=lambda o: o.__dict__)
			if cnt > 10:
				break