Example #1
0
    def __init__(self,
                 path,
                 tracker,
                 imdb_link=None,
                 take_screenshots=True,
                 num_screenshots=0,
                 delete_unwanted_files=False):

        assert issubclass(tracker, trackers.BaseTracker)

        try:
            self.tracker = tracker()
            self.release = files.Release(path)
        except trackers.TrackerError as e:
            raise UploadInterruptedError(e)
        except files.ReleaseError as e:
            raise UploadInterruptedError(e)

        self.delete_unwanted_files = delete_unwanted_files
        self.take_screens = take_screenshots
        self.num_screens = num_screenshots
        self.use_nfo = True
        self.metadata_is_verified = False
        self.technical_is_verified = False

        self.title = None
        self.year = None
        self.source = self.release.source
        self.resolution = None
        self.codec = None
        self.container = None

        self.nfo = None
        self.tmdb = None
        self.film_description = None
        self.mediainfo = None
        self.screenshots = None
        self.torrent = None
        self.torrent_description = None

        if imdb_link is None:
            self.imdb = None
        else:
            self.imdb = metadata.IMDb(imdb_link)
Example #2
0
    def get_imdb_id(self):

        if isinstance(self.imdb, metadata.IMDb):
            return

        imdb_id = self.get_imdb_id_from_nfo()

        if imdb_id is not None:
            self.imdb = metadata.IMDb(imdb_id)
            return

        logging.debug('Searching IMDb, TMDb, and Google.')

        # Search using TMDb API
        try:
            tmdb = metadata.TMDB(title=self.release.title,
                                 year=self.release.year)
            tmdb.get_metadata()
            tmdb_search = metadata.IMDb(tmdb.imdb_id)
        except (metadata.TMDBError, metadata.IMDbError):
            logging.debug('TMDb search failed to produce an IMDb link.')
            tmdb_search = None

        if self.release.year is not None:
            query = '{title} ({year})'.format(title=self.release.title,
                                              year=self.release.year)
        else:
            query = self.release.title

        # Search using IMDb web site
        params = {

            # Title, and year if we have it
            'q': query,

            # Search by title
            's': 'tt',

            # Search for films
            'ttype': 'ft'
        }
        response = requests.get('http://www.imdb.com/find', params=params)
        response.raise_for_status()
        dom = BeautifulSoup(response.text)
        first_result = dom.find('tr', attrs={'class': 'findResult'})
        if first_result is not None:
            imdb_link = first_result.a.get('href').strip()
            try:
                imdb_search = metadata.IMDb(imdb_link)
            except metadata.IMDbError:
                logging.debug('IMDb search failed to produce an IMDb link.')
                imdb_search = None
        else:
            imdb_search = None

        # Search using Google
        query += ' IMDb'
        params = {

            # Title, and year if we have it
            'q': query,

            # We're feeling lucky.  ;)
            'btnI': ''
        }
        response = requests.get('http://www.google.com/search', params=params)
        response.raise_for_status()

        try:
            google_search = metadata.IMDb(response.url)
        except metadata.IMDbError:
            logging.debug('Google search failed to produce an IMDb link.')
            google_search = None

        if (imdb_search, google_search, tmdb_search).count(None) > 1:
            raise UploadInterruptedError('More than one search failed.')

        if imdb_search == google_search or imdb_search == tmdb_search:
            self.imdb = imdb_search
        elif google_search == tmdb_search:
            self.imdb = tmdb_search
        else:
            raise UploadInterruptedError(
                'Google, IMDb, and TMDb searches all produced different IMDb IDs.'
            )