diff --git a/couchpotato/core/providers/automation/imdb/__init__.py b/couchpotato/core/providers/automation/imdb/__init__.py index a0013c4a..ee804af1 100644 --- a/couchpotato/core/providers/automation/imdb/__init__.py +++ b/couchpotato/core/providers/automation/imdb/__init__.py @@ -9,7 +9,7 @@ config = [{ { 'tab': 'automation', 'list': 'watchlist_providers', - 'name': 'imdb_automation', + 'name': 'imdb_automation_watchlist', 'label': 'IMDB', 'description': 'From any public IMDB watchlists. Url should be the CSV link.', 'options': [ @@ -30,5 +30,31 @@ config = [{ }, ], }, + { + 'tab': 'automation', + 'list': 'automation_providers', + 'name': 'imdb_automation_charts', + 'label': 'IMDB', + 'description': 'Import movies from IMDB Charts', + 'options': [ + { + 'name': 'automation_enabled', + 'default': False, + 'type': 'enabler', + }, + { + 'name': 'automation_charts_theaters_use', + 'type': 'checkbox', + 'label': 'In Theaters', + 'description': 'New Movies In-Theaters chart', + }, + { + 'name': 'automation_charts_top250_use', + 'type': 'checkbox', + 'label': 'TOP 250', + 'description': 'IMDB TOP 250 chart', + }, + ], + }, ], }] diff --git a/couchpotato/core/providers/automation/imdb/main.py b/couchpotato/core/providers/automation/imdb/main.py index 75a2d75c..0d494949 100644 --- a/couchpotato/core/providers/automation/imdb/main.py +++ b/couchpotato/core/providers/automation/imdb/main.py @@ -1,7 +1,9 @@ +from bs4 import BeautifulSoup from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import getImdb, splitString, tryInt from couchpotato.core.logger import CPLog from couchpotato.core.providers.automation.base import Automation +import re import traceback log = CPLog(__name__) @@ -11,22 +13,91 @@ class IMDB(Automation, RSS): interval = 1800 + chart_urls = { + 'theater': 'http://www.imdb.com/movies-in-theaters/', + 'top250': 'http://www.imdb.com/chart/top', + } + + def getIMDBids(self): movies = [] - enablers = [tryInt(x) for x in splitString(self.conf('automation_urls_use'))] - urls = splitString(self.conf('automation_urls')) + # Handle Chart URLs + if self.conf('automation_charts_theaters_use'): + log.debug('Started IMDB chart: %s', self.chart_urls['theater']) + data = self.getHTMLData(self.chart_urls['theater']) + if data: + html = BeautifulSoup(data) + + try: + result_div = html.find('div', attrs = {'id': 'main'}) + + entries = result_div.find_all('div', attrs = {'itemtype': 'http://schema.org/Movie'}) + + for entry in entries: + title = entry.find('h4', attrs = {'itemprop': 'name'}).getText() + + log.debug('Identified title: %s', title) + result = re.search('(.*) \((.*)\)', title) + + if result: + name = result.group(1) + year = result.group(2) + + imdb = self.search(name, year) + + if imdb and self.isMinimalMovie(imdb): + movies.append(imdb['imdb']) + + except: + log.error('Failed loading IMDB chart results from %s: %s', (self.chart_urls['theater'], traceback.format_exc())) + + if self.conf('automation_charts_top250_use'): + log.debug('Started IMDB chart: %s', self.chart_urls['top250']) + data = self.getHTMLData(self.chart_urls['top250']) + if data: + html = BeautifulSoup(data) + + try: + result_div = html.find('div', attrs = {'id': 'main'}) + + result_table = result_div.find_all('table')[1] + entries = result_table.find_all('tr') + + for entry in entries[1:]: + title = entry.find_all('td')[2].getText() + + log.debug('Identified title: %s', title) + result = re.search('(.*) \((.*)\)', title) + + if result: + name = result.group(1) + year = result.group(2) + + imdb = self.search(name, year) + + if imdb and self.isMinimalMovie(imdb): + movies.append(imdb['imdb']) + + except: + log.error('Failed loading IMDB chart results from %s: %s', (self.chart_urls['theater'], traceback.format_exc())) + + + # Handle Watchlists + watchlist_enablers = [tryInt(x) for x in splitString(self.conf('automation_urls_use'))] + watchlist_urls = splitString(self.conf('automation_urls')) index = -1 - for url in urls: + for watchlist_url in watchlist_urls: index += 1 - if not enablers[index]: + if not watchlist_enablers[index]: continue try: - rss_data = self.getHTMLData(url) + log.debug('Started IMDB watchlists: %s', watchlist_url) + rss_data = self.getHTMLData(watchlist_url) imdbs = getImdb(rss_data, multiple = True) if rss_data else [] for imdb in imdbs: @@ -35,4 +106,6 @@ class IMDB(Automation, RSS): except: log.error('Failed loading IMDB watchlist: %s %s', (url, traceback.format_exc())) + + # Return the combined resultset return movies