示例#1
0
from tmdbv3api import TMDb, Discover

tmdb = TMDb()

tmdb.api_key = ''

discover = Discover()

# What are the most popular TV shows?

show = discover.discover_tv_shows({'sort_by': 'popularity.desc'})

for p in show:
    print(p.name)
    print(p.overview)
  --file="<path to file>"  To handle a single file.
  --verbose                Prints all informations got from TMDB  
  --cleanup                Removes all files generated by this tool.
  
  
Example:
  python TMDB_fetcher.py "E:\Videos" -k=abcdef 
  python TMDB_fetcher.py "D:\" -k=abcdef --file="D:\Avatar.mp4"
  python TMDB_fetcher.py "E:\Videos" --cleanup
  
"""
# TMDB API, see : https://pypi.org/project/tmdbv3api/
# see the json schemas here :  https://developers.themoviedb.org/3/movies/get-movie-details

from tmdbv3api import TMDb  # $ pip install tmdbv3api
TMDB = TMDb()
from tmdbv3api import Movie
MOVIE = Movie()

import json
import argparse
from docopt import docopt  # pip install docopt
import os
import sys
import re
import textwrap
import logging
import datetime
import wget  # pip install wget

VERSION = 1.0
示例#3
0
def main(argv):
    configFile = ''
    dumpFile = ''

    try:
        opts, args = getopt.getopt(argv, "hc:d:", ["configfile=", "dumpfile"])
    except getopt.GetoptError:
        printHelp()
        sys.exit(2)

    for opt, arg in opts:
        if opt == '-h':
            printHelp()
            sys.exit(0)
        elif opt in ("-c", "--configfile"):
            configFile = arg
        elif opt in ("-d", "--dumpfile"):
            dumpFile = arg

    if configFile == '':
        printHelp()
        sys.exit(0)

    config = dict()
    with open(configFile, "r") as readFile:
        config = json.load(readFile)

    TMDb().language = getConfigParam(config, ['language'])
    TMDb().api_key = 'e24fcd17eff0cfe0064fa7b5cb05b97d'

    overwrite = bool(getConfigParam(config, ["overwrite_files"]))

    showEnabled = bool(getConfigParam(config, ["tv_show_mode", "enable"]))
    movieEnabled = bool(getConfigParam(config, ["movie_mode", "enable"]))
    tmpFolder = getConfigParam(config, ["tmp_folder"])
    saveDump = bool(getConfigParam(config, ["dump_data"]))
    autoRename = bool(getConfigParam(config, ["auto_rename"]))

    showDump = None
    movieDump = None

    if showEnabled:
        showDump = createShowDump(config, dumpFile)
        showDump.determineRenaming()

    if movieEnabled:
        movieDump = createMovieDump(config, dumpFile)
        movieDump.determineRenaming()

    if saveDump and showDump != None:
        arr = []
        for show in showDump.tvShows.keys():
            arr.append(show.serialize())

        if not os.path.exists(tmpFolder):
            os.makedirs(tmpFolder)
        with open(tmpFolder + "/tv_shows.json", "w") as writeFile:
            json.dump(arr, writeFile, indent=4)

    if saveDump and movieDump != None:
        arr = []
        for movie in movieDump.movieData.keys():
            arr.append(movie.serialize())
        with open(tmpFolder + "/movies.json", "w") as writeFile:
            json.dump(arr, writeFile, indent=4)

    if autoRename and showDump != None:
        showDump.moveFiles(overwrite)
    if autoRename and movieDump != None:
        movieDump.moveFiles(overwrite)

    sys.exit(0)
    def run_imdb_sync():
        try:
            plex = PlexServer(PLEX_URL, PLEX_TOKEN)
        except:
            print("No Plex server found at: {base_url}".format(
                base_url=PLEX_URL))
            print("Please check that config.ini exists, and is correct.")
            print(
                "If the URL displayed is correct, your token may be incorrect."
            )
            input("Press Enter to exit")
            sys.exit()

# Get list of movies from the Plex server
        all_movies = []
        for movie_lib in MOVIE_LIBRARIES:
            try:
                print(
                    "Retrieving a list of movies from the '{library}' library in Plex."
                    .format(library=movie_lib))
                movie_library = plex.library.section(movie_lib)
                library_language = movie_library.language  # IMDB will use language from last library in list
                all_movies.extend(movie_library.all())
            except:
                print("The '{library}' library does not exist in Plex.".format(
                    library=movie_lib))
                print("Please check that config.ini exists, and is correct.")
                input("Press Enter to exit")
                sys.exit()

# Get the requested imdb list
        print(
            "Retrieving movies from selected IMDB list. Depending on the amount of pages selected this might take a few minutes."
        )
        maxpages = int(PAGE_NUMBERS) + 1
        title_name = []
        title_years = []
        title_ids = []
        for i in range(1, maxpages):
            url = IMDB_URL + '?page={}'.format(i)
            r = requests.get(url,
                             headers={'Accept-Language': library_language})
            tree = html.fromstring(r.content)
            title_name.extend(
                tree.xpath(
                    "//div[contains(@class, 'lister-item-content')]//h3[contains(@class, 'lister-item-header')]//a/text()"
                ))
            title_years.extend(
                tree.xpath(
                    "//div[contains(@class, 'lister-item-content')]//h3[contains(@class, 'lister-item-header')]//span[contains(@class, 'lister-item-year')]/text()"
                ))
            title_ids.extend(
                tree.xpath(
                    "//div[contains(@class, 'lister-item-image')]//a/img//@data-tconst"
                ))

# Convert TMDB to IMDB ID and create a dictionary of {imdb_id: movie}
        print(
            "Matching IMDB IDs to Library. For large Libraries using TMDB agent this step can take a long time."
        )
        reqcount = 0
        tmdb = TMDb()
        tmdb.api_key = parser.get('tmdb', 'apikey')
        movie = Movie()
        imdb_map = {}
        for m in all_movies:
            if 'themoviedb://' in m.guid:
                if reqcount >= 10:
                    time.sleep(2.5)
                    reqcount = 0
                if tmdb.api_key:
                    try:
                        tmdb_id = m.guid.split('themoviedb://')[1].split(
                            '?')[0]
                        tmdbapi = movie.details(tmdb_id)
                        imdb_id = tmdbapi.imdb_id
                        reqcount += 1
                    except AttributeError:
                        imdb_id = None
                        reqcount += 1
                else:
                    imdb_id = None
            elif 'imdb://' in m.guid:
                imdb_id = m.guid.split('imdb://')[1].split('?')[0]
            else:
                imdb_id = None

            if imdb_id and imdb_id in title_ids:
                imdb_map[imdb_id] = m
            else:
                imdb_map[m.ratingKey] = m

# Add movies to the selected collection
        print("Adding the collection '{}' to matched movies.".format(
            IMDB_COLLECTION_NAME))
        in_library_idx = []
        for i, imdb_id in enumerate(title_ids):
            movie = imdb_map.pop(imdb_id, None)
            if movie:
                add_collection(movie.librarySectionID, movie.ratingKey)
                in_library_idx.append(i)


# Get list of missing movies from selected list
        missing_imdb_movies = [
            (idx, imdb)
            for idx, imdb in enumerate(zip(title_ids, title_name, title_years))
            if idx not in in_library_idx
        ]

        return missing_imdb_movies, len(title_ids)