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)
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.' )