From fbceb38d7df1e2a7ae5005c3397872acd084e8fe Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 25 Aug 2015 14:29:06 +0200 Subject: [PATCH] Userscript fixes and tests --- .../media/movie/providers/userscript/filmweb.py | 20 ++++----- .../media/movie/providers/userscript/flickchart.py | 6 ++- .../media/movie/providers/userscript/moviemeter.py | 14 +++++++ .../movie/providers/userscript/rottentomatoes.py | 6 ++- .../media/movie/providers/userscript/sharethe.py | 8 ---- .../core/media/movie/providers/userscript/tmdb.py | 4 +- .../core/media/movie/providers/userscript/whiwa.py | 8 ---- couchpotato/core/plugins/userscript/main.py | 49 +++++++++++++++++++++- 8 files changed, 81 insertions(+), 34 deletions(-) delete mode 100644 couchpotato/core/media/movie/providers/userscript/sharethe.py delete mode 100644 couchpotato/core/media/movie/providers/userscript/whiwa.py diff --git a/couchpotato/core/media/movie/providers/userscript/filmweb.py b/couchpotato/core/media/movie/providers/userscript/filmweb.py index a4a51a0..1f7b371 100644 --- a/couchpotato/core/media/movie/providers/userscript/filmweb.py +++ b/couchpotato/core/media/movie/providers/userscript/filmweb.py @@ -1,14 +1,14 @@ -import re +from bs4 import BeautifulSoup +from couchpotato import fireEvent from couchpotato.core.media._base.providers.userscript.base import UserscriptBase - autoload = 'Filmweb' class Filmweb(UserscriptBase): - version = 2 + version = 3 includes = ['http://www.filmweb.pl/film/*'] @@ -21,14 +21,10 @@ class Filmweb(UserscriptBase): except: return - name = re.search("(?P[^<]+)", data) - - if name is None: - name = re.search("(?P[^<]+)", data) - - name = name.group('name').decode('string_escape') - - year = re.search("\((?P[^\)]+)\).*?", data) - year = year.group('year') + html = BeautifulSoup(data) + name = html.find('meta', {'name': 'title'})['content'][:-9].strip() + name_year = fireEvent('scanner.name_year', name, single = True) + name = name_year.get('name') + year = name_year.get('year') return self.search(name, year) diff --git a/couchpotato/core/media/movie/providers/userscript/flickchart.py b/couchpotato/core/media/movie/providers/userscript/flickchart.py index c54a8ca..8b48ad7 100644 --- a/couchpotato/core/media/movie/providers/userscript/flickchart.py +++ b/couchpotato/core/media/movie/providers/userscript/flickchart.py @@ -12,6 +12,8 @@ autoload = 'Flickchart' class Flickchart(UserscriptBase): + version = 2 + includes = ['http://www.flickchart.com/movie/*'] def getMovie(self, url): @@ -24,11 +26,11 @@ class Flickchart(UserscriptBase): try: start = data.find('') end = data.find('', start) - page_title = data[start + len(''):end].strip().split('-') + page_title = data[start + len('<title>'):end].strip().split('- Flick') year_name = fireEvent('scanner.name_year', page_title[0], single = True) - return self.search(**year_name) + return self.search(year_name.get('name'), year_name.get('year')) except: log.error('Failed parsing page for title and year: %s', traceback.format_exc()) diff --git a/couchpotato/core/media/movie/providers/userscript/moviemeter.py b/couchpotato/core/media/movie/providers/userscript/moviemeter.py index 4c9bb22..ee8d931 100644 --- a/couchpotato/core/media/movie/providers/userscript/moviemeter.py +++ b/couchpotato/core/media/movie/providers/userscript/moviemeter.py @@ -1,3 +1,4 @@ +from couchpotato.core.helpers.variable import getImdb from couchpotato.core.media._base.providers.userscript.base import UserscriptBase autoload = 'MovieMeter' @@ -6,3 +7,16 @@ autoload = 'MovieMeter' class MovieMeter(UserscriptBase): includes = ['http://*.moviemeter.nl/film/*', 'http://moviemeter.nl/film/*'] + + version = 2 + + def getMovie(self, url): + + cookie = {'Cookie': 'cok=1'} + + try: + data = self.urlopen(url, headers = cookie) + except: + return + + return self.getInfo(getImdb(data)) diff --git a/couchpotato/core/media/movie/providers/userscript/rottentomatoes.py b/couchpotato/core/media/movie/providers/userscript/rottentomatoes.py index c1ad4e3..e6ff262 100644 --- a/couchpotato/core/media/movie/providers/userscript/rottentomatoes.py +++ b/couchpotato/core/media/movie/providers/userscript/rottentomatoes.py @@ -16,7 +16,7 @@ class RottenTomatoes(UserscriptBase): includes = ['*://www.rottentomatoes.com/m/*'] excludes = ['*://www.rottentomatoes.com/m/*/*/'] - version = 3 + version = 4 def getMovie(self, url): @@ -27,7 +27,9 @@ class RottenTomatoes(UserscriptBase): try: title = re.findall("<title>(.*)", data) - name_year = fireEvent('scanner.name_year', title[0].split(' - Rotten')[0].decode('unicode_escape'), single = True) + title = title[0].split(' - Rotten')[0].replace(' ', ' ').decode('unicode_escape') + name_year = fireEvent('scanner.name_year', title, single = True) + name = name_year.get('name') year = name_year.get('year') diff --git a/couchpotato/core/media/movie/providers/userscript/sharethe.py b/couchpotato/core/media/movie/providers/userscript/sharethe.py deleted file mode 100644 index ef2f537..0000000 --- a/couchpotato/core/media/movie/providers/userscript/sharethe.py +++ /dev/null @@ -1,8 +0,0 @@ -from couchpotato.core.media._base.providers.userscript.base import UserscriptBase - -autoload = 'ShareThe' - - -class ShareThe(UserscriptBase): - - includes = ['http://*.sharethe.tv/movies/*', 'http://sharethe.tv/movies/*'] diff --git a/couchpotato/core/media/movie/providers/userscript/tmdb.py b/couchpotato/core/media/movie/providers/userscript/tmdb.py index f11dba2..fe7b139 100644 --- a/couchpotato/core/media/movie/providers/userscript/tmdb.py +++ b/couchpotato/core/media/movie/providers/userscript/tmdb.py @@ -9,7 +9,9 @@ autoload = 'TMDB' class TMDB(UserscriptBase): - includes = ['http://www.themoviedb.org/movie/*'] + version = 2 + + includes = ['*://www.themoviedb.org/movie/*'] def getMovie(self, url): match = re.search('(?P\d+)', url) diff --git a/couchpotato/core/media/movie/providers/userscript/whiwa.py b/couchpotato/core/media/movie/providers/userscript/whiwa.py deleted file mode 100644 index bd602d2..0000000 --- a/couchpotato/core/media/movie/providers/userscript/whiwa.py +++ /dev/null @@ -1,8 +0,0 @@ -from couchpotato.core.media._base.providers.userscript.base import UserscriptBase - -autoload = 'WHiWA' - - -class WHiWA(UserscriptBase): - - includes = ['http://whiwa.net/stats/movie/*'] diff --git a/couchpotato/core/plugins/userscript/main.py b/couchpotato/core/plugins/userscript/main.py index 4ca8ed3..0499526 100644 --- a/couchpotato/core/plugins/userscript/main.py +++ b/couchpotato/core/plugins/userscript/main.py @@ -1,4 +1,7 @@ import os +import traceback +import time +from base64 import b64encode, b64decode from couchpotato import index from couchpotato.api import addApiView @@ -15,7 +18,7 @@ log = CPLog(__name__) class Userscript(Plugin): - version = 5 + version = 8 def __init__(self): addApiView('userscript.get/(.*)/(.*)', self.getUserScript, static = True) @@ -26,6 +29,7 @@ class Userscript(Plugin): addApiView('userscript.bookmark', self.bookmark) addEvent('userscript.get_version', self.getVersion) + addEvent('app.test', self.doTest) def bookmark(self, host = None, **kwargs): @@ -91,3 +95,46 @@ class Userscript(Plugin): params['error'] = params['movie'] if params['movie'] else 'Failed getting movie info' return params + + def doTest(self): + time.sleep(1) + + tests = [ + 'aHR0cDovL3d3dy5hbGxvY2luZS5mci9maWxtL2ZpY2hlZmlsbV9nZW5fY2ZpbG09MjAxMTA1Lmh0bWw=', + 'aHR0cDovL3RyYWlsZXJzLmFwcGxlLmNvbS90cmFpbGVycy9wYXJhbW91bnQvbWlzc2lvbmltcG9zc2libGVyb2d1ZW5hdGlvbi8=', + 'aHR0cDovL3d3dy55b3V0aGVhdGVyLmNvbS92aWV3LnBocD9pZD0xMTI2Mjk5', + 'aHR0cDovL3RyYWt0LnR2L21vdmllcy9taXNzaW9uLWltcG9zc2libGUtcm9ndWUtbmF0aW9uLTIwMTU=', + 'aHR0cHM6Ly93d3cucmVkZGl0LmNvbS9yL0lqdXN0d2F0Y2hlZC9jb21tZW50cy8zZjk3bzYvaWp3X21pc3Npb25faW1wb3NzaWJsZV9yb2d1ZV9uYXRpb25fMjAxNS8=', + 'aHR0cDovL3d3dy5yb3R0ZW50b21hdG9lcy5jb20vbS9taXNzaW9uX2ltcG9zc2libGVfcm9ndWVfbmF0aW9uLw==', + 'aHR0cHM6Ly93d3cudGhlbW92aWVkYi5vcmcvbW92aWUvMTc3Njc3LW1pc3Npb24taW1wb3NzaWJsZS01', + 'aHR0cDovL3d3dy5jcml0aWNrZXIuY29tL2ZpbG0vTWlzc2lvbl9JbXBvc3NpYmxlX1JvZ3VlLw==', + 'aHR0cDovL2ZpbG1jZW50cnVtLm5sL2ZpbG1zLzE4MzIzL21pc3Npb24taW1wb3NzaWJsZS1yb2d1ZS1uYXRpb24v', + 'aHR0cDovL3d3dy5maWxtc3RhcnRzLmRlL2tyaXRpa2VuLzIwMTEwNS5odG1s', + 'aHR0cDovL3d3dy5maWxtd2ViLnBsL2ZpbG0vTWlzc2lvbiUzQStJbXBvc3NpYmxlKy0rUm9ndWUrTmF0aW9uLTIwMTUtNjU1MDQ4', + 'aHR0cDovL3d3dy5mbGlja2NoYXJ0LmNvbS9tb3ZpZS8zM0NFMzEyNUJB', + 'aHR0cDovL3d3dy5pbWRiLmNvbS90aXRsZS90dDIzODEyNDkv', + 'aHR0cDovL2xldHRlcmJveGQuY29tL2ZpbG0vbWlzc2lvbi1pbXBvc3NpYmxlLXJvZ3VlLW5hdGlvbi8=', + 'aHR0cDovL3d3dy5tb3ZpZW1ldGVyLm5sL2ZpbG0vMTA0MTcw', + 'aHR0cDovL21vdmllcy5pby9tLzMxL2Vu', + ] + + success = 0 + for x in tests: + x = b64decode(x) + try: + movie = self.getViaUrl(x) + movie = movie.get('movie', {}) or {} + imdb = movie.get('imdb') + + if imdb and b64encode(imdb) in ['dHQxMjI5MjM4', 'dHQyMzgxMjQ5']: + success += 1 + continue + except: + log.error('Failed userscript test "%s": %s', (x, traceback.format_exc())) + + log.error('Failed userscript test "%s"', x) + + if success == len(tests): + log.debug('All userscript tests successful') + else: + log.error('Failed userscript tests, %s out of %s', (success, len(tests)))