diff --git a/couchpotato/core/providers/automation/imdb/__init__.py b/couchpotato/core/providers/automation/imdb/__init__.py index 142ebab..925138d 100644 --- a/couchpotato/core/providers/automation/imdb/__init__.py +++ b/couchpotato/core/providers/automation/imdb/__init__.py @@ -10,7 +10,7 @@ config = [{ 'tab': 'automation', 'name': 'imdb_automation', 'label': 'IMDB', - 'description': 'From any public IMDB watchlists. Url should end with export?list_id=XXXXX&author_id=XXXXX', + 'description': 'From any public IMDB watchlists. Url should be the RSS link.', 'options': [ { 'name': 'automation_enabled', diff --git a/couchpotato/core/providers/automation/imdb/main.py b/couchpotato/core/providers/automation/imdb/main.py index 7a09053..6364a75 100644 --- a/couchpotato/core/providers/automation/imdb/main.py +++ b/couchpotato/core/providers/automation/imdb/main.py @@ -1,17 +1,17 @@ -from couchpotato.core.helpers.variable import md5 +from couchpotato.core.helpers.rss import RSS +from couchpotato.core.helpers.variable import md5, getImdb from couchpotato.core.logger import CPLog from couchpotato.core.providers.automation.base import Automation from couchpotato.environment import Env from dateutil.parser import parse -import StringIO -import csv import time import traceback +import xml.etree.ElementTree as XMLTree log = CPLog(__name__) -class IMDB(Automation): +class IMDB(Automation, RSS): interval = 1800 @@ -21,46 +21,41 @@ class IMDB(Automation): return movies = [] - headers = {} enablers = self.conf('automation_urls_use').split(',') index = -1 - for csv_url in self.conf('automation_urls').split(','): + for rss_url in self.conf('automation_urls').split(','): + index += 1 if not enablers[index]: continue - elif 'author_id=' not in csv_url: - log.error('This isn\'t the correct url.: %s' % csv_url) + elif 'rss.imdb' not in rss_url: + log.error('This isn\'t the correct url.: %s' % rss_url) continue - prop_name = 'automation.imdb.last_update.%s' % md5(csv_url) + prop_name = 'automation.imdb.last_update.%s' % md5(rss_url) last_update = float(Env.prop(prop_name, default = 0)) try: - cache_key = 'imdb_csv.%s' % md5(csv_url) - csv_data = self.getCache(cache_key, csv_url) - csv_reader = csv.reader(StringIO.StringIO(csv_data)) - if not headers: - nr = 0 - for column in csv_reader.next(): - headers[column] = nr - nr += 1 - else: - csv_reader.next() - - for row in csv_reader: - created = int(time.mktime(parse(row[headers['created']]).timetuple())) - if created < last_update: + cache_key = 'imdb.rss.%s' % md5(rss_url) + + rss_data = self.getCache(cache_key, rss_url) + data = XMLTree.fromstring(rss_data) + rss_movies = self.getElements(data, 'channel/item') + + for movie in rss_movies: + created = int(time.mktime(parse(self.getTextElement(movie, "pubDate")).timetuple())) + imdb = getImdb(self.getTextElement(movie, "link")) + + if not imdb or created < last_update: continue - imdb = row[headers['const']] - if imdb: - movies.append(imdb) + movies.append(imdb) + except: - log.error('Failed loading IMDB watchlist: %s %s' % (csv_url, traceback.format_exc())) + log.error('Failed loading IMDB watchlist: %s %s' % (rss_url, traceback.format_exc())) Env.prop(prop_name, time.time()) - return movies diff --git a/couchpotato/static/images/imdb_watchlist.png b/couchpotato/static/images/imdb_watchlist.png index b16fd09..fc4158b 100644 Binary files a/couchpotato/static/images/imdb_watchlist.png and b/couchpotato/static/images/imdb_watchlist.png differ