From: Dirk M. <di...@fr...> - 2011-09-27 18:04:05
|
Author: dmeyer Date: Tue Sep 27 14:14:15 2011 New Revision: 4550 Log: small update, still needs more work Modified: trunk/WIP/webmetadata/src/__init__.py trunk/WIP/webmetadata/src/thetvdb.py trunk/WIP/webmetadata/test/automapper.py Modified: trunk/WIP/webmetadata/src/__init__.py ============================================================================== --- trunk/WIP/webmetadata/src/__init__.py (original) +++ trunk/WIP/webmetadata/src/__init__.py Tue Sep 27 14:14:15 2011 @@ -37,6 +37,8 @@ metadata is None it will be created using kaa.metadata. Each dictionary-like object is allowed. """ + if filename.startswith('thetvdb:'): + return backends['thetvdb'].parse(filename[8:], metadata) if not metadata: metadata = kaa.metadata.parse(filename) if metadata.get('series', None): Modified: trunk/WIP/webmetadata/src/thetvdb.py ============================================================================== --- trunk/WIP/webmetadata/src/thetvdb.py (original) +++ trunk/WIP/webmetadata/src/thetvdb.py Tue Sep 27 14:14:15 2011 @@ -178,11 +178,12 @@ return self._get_banner(u'series') class SearchResult(core.Series): - def __init__(self, id, title, overview, year): + def __init__(self, id, title, overview, year, imdb): self.id = id self.title = title self.overview = overview self.year = None + self.imdb = imdb if year and len(year.split('-')) == 3: self.year = year.split('-')[0] @@ -278,13 +279,13 @@ os.unlink(tmp + '/banners.xml') os.rmdir(tmp) - def parse(self, filename, metadata): + def parse(self, alias, metadata): """ Get a Series object based on the alias name """ - if not 'series' in metadata: - return None - data = self._db.query(type='alias', tvdb=metadata.get('series')) + if metadata: + alias = metadata.get('series') or alias + data = self._db.query(type='alias', tvdb=alias) if not data: return None return Series(self, self._db.query(type='series', id=data[0]['parent_id'])[0]) @@ -298,7 +299,7 @@ url = self.hostname + '/api/GetSeries.php?seriesname=%s' % urllib.quote(name) for name, data in (yield parse(url))[1]: result.append(SearchResult('thetvdb:' + data['seriesid'], data['SeriesName'], - data.get('Overview', None), data.get('FirstAired', None))) + data.get('Overview', None), data.get('FirstAired', None), data.get('IMDB_ID'))) yield result @kaa.coroutine() @@ -347,6 +348,11 @@ yield metadata = self._db.query(type='metadata')[0] series = [ record['tvdb'] for record in self._db.query(type='series') ] + for x in self._db.query(type='series'): + for b in Series(self, x).images: + print b.url + print + yield url = self.hostname + '/api/Updates.php?type=all&time=%s' % metadata['servertime'] attr, updates = (yield parse(url)) banners = [] Modified: trunk/WIP/webmetadata/test/automapper.py ============================================================================== --- trunk/WIP/webmetadata/test/automapper.py (original) +++ trunk/WIP/webmetadata/test/automapper.py Tue Sep 27 14:14:15 2011 @@ -1,41 +1,63 @@ import os +import stat import sys -import kaa.webmetadata.tvdb +import kaa.webmetadata +import kaa.webmetadata.thetvdb import kaa.beacon +from xmlrpclib import ServerProxy, Error + +server = ServerProxy("http://api.opensubtitles.org/xml-rpc") +session = server.LogIn("","","en","OS Test User Agent") +token = session["token"] + @kaa.coroutine() def main(): + kaa.webmetadata.init() print 'check for missing tvdb mapping' print '------------------------------' - tvdb = kaa.webmetadata.tvdb.TVDB(os.path.expanduser("~/.beacon/tvdb")) + tvdb = kaa.webmetadata.backends['thetvdb'] missing = [] - for alias in (yield kaa.beacon.query(type='video', attr='tvdb_alias')): - if alias in tvdb.aliases: + for alias in (yield kaa.beacon.query(type='video', attr='series')): + if alias in [ x['tvdb'] for x in tvdb._db.query(type='alias') ]: continue print 'Missing mapping for "%s"' % alias print 'Files:' - sure = False - for item in (yield kaa.beacon.query(type='video', tvdb_alias=alias)): + imdb = None + for item in (yield kaa.beacon.query(type='video', series=alias)): print ' ', item.filename - sure = sure or item.get('tvdb_sure') - if not sure: - print 'May not be a tv series' - print - continue - results = yield tvdb.search_series(alias) + if not imdb: + searchlist = [{'moviehash': item.get('hash'), 'moviebytesize': os.stat(item.filename)[stat.ST_SIZE]}] + moviesList = server.SearchSubtitles(token, searchlist) + if moviesList and moviesList.get('data'): + guesses = { None: 0 } + for x in moviesList.get('data'): + if not x.get('IDMovieImdb', None) in guesses: + guesses[x.get('IDMovieImdb', None)] = 0 + guesses[x.get('IDMovieImdb', None)] += 1 + del guesses[None] + guesses = guesses.items() + guesses.sort(lambda x,y: cmp(x[1], y[1])) + if guesses: + imdb = 'tt%07d' % int(guesses[-1][0]) + results = yield tvdb.search(alias) if len(results) == 0: print 'No query results' - elif len(results) == 1: + continue + if imdb: + for data in results: + if data.imdb == imdb: + print 'Auto-mapping to' + print ' id=%s name="%s" year="%s"' % (data.id, data.title, data.year) + yield kaa.webmetadata.match(item.filename, data.id, metadata=item) + break + else: + imdb = None + if not imdb and len(results) == 1: data = results[0] print 'Auto-mapping to' - print ' id=%s name="%s" year="%s"' % (data['id'], data['SeriesName'], data.get('FirstAired')) - yield tvdb.match_series(alias, int(data['id'])) - else: - print 'Query' - for data in results: - print ' id=%s name="%s" year="%s"' % (data['id'], data['SeriesName'], data.get('FirstAired')) - print - print + print ' id=%s name="%s" year="%s"' % (data.id, data.title, data.year) + yield kaa.webmetadata.match(item.filename, data.id, metadata=item) sys.exit(0) main() |