Ticket #3123: imdbpy.diff

File imdbpy.diff, 3.6 KB (added by hads, 14 years ago)
  • mythvideo/mythvideo/scripts/imdbpy.py

     
    3131        print "You need to install the IMDbPy library from "\
    3232                        "http://imdbpy.sourceforge.net/"
    3333        sys.exit(1)
    34        
     34
     35#episode_title_format = '%(series_title)s - %(season)02dx%(episode)02d - %(episode_title)s'
     36episode_title_format = '%(series_title)s S%(season)d E%(episode)d "%(episode_title)s"'
     37
    3538def detect_series_query(search_string):
    3639        """
    3740        Detects a series episode query.
     
    4144        "Sopranos S1E2"
    4245        "Sopranos S1 E2"
    4346        "Sopranos 1x2"
     47        "Sopranos - 1x2"
    4448        """
    45         m = re.match(r"(.+)\s*(s|(season)|\s)\s*(\d+)\s*(e|(episode)|x)\s*(\d+)",
     49        m = re.match(r"((?P<title>.+?)( -)?)?(\s*)(s|(season)|\s)\s*(?P<season>\d+)\s*(e|(episode)|x)\s*(?P<episode>\d+)",
    4650                        search_string.lower())
    47         if m is None or m.group(1) is None or m.group(4) is None or \
    48                         m.group(7) is None:
     51        if m is None or m.group('title') is None or m.group('season') is None \
     52                        or m.group('episode') is None:
    4953                return (None, None, None)
    5054
    51         return (m.group(1), m.group(4), m.group(7))
     55        return (m.group('title'), m.group('season'), m.group('episode'))
    5256
    5357def episode_search(title, season, episode):
    5458        matches = []
    5559        imdb_access = imdb.IMDb()
    5660        series = imdb_access.search_movie(title.encode("ascii", 'replace'))
     61        season = int(season)
     62        episode = int(episode)
    5763
    5864        for serie in series:
    5965                if serie['kind'] == 'tv series':
     
    6167                        imdb_access.update(serie, 'episodes')
    6268                        if serie.has_key('episodes'):
    6369                                try:
    64                                         ep = serie['episodes'][int(season)][int(episode)]
     70                                        ep = serie['episodes'][season][episode]
    6571                                except:
    6672                                        # Probably indexing exception in case the episode/season
    6773                                        # is not found.
    6874                                        continue
    69                                 matches.append([imdb_access.get_imdbID(ep),
    70                                                 title.title().strip() + ", S" + season + " E" +
    71                                                 episode, int(serie['year'])])
     75                                episode_title = episode_title_format % \
     76                                                {
     77                                                        'series_title': ep['series title'],
     78                                                        'season': season,
     79                                                        'episode': episode,
     80                                                        'episode_title': ep['title']
     81                                                }
     82                                matches.append([imdb_access.get_imdbID(ep), episode_title ,int(ep['year'])])
    7283                        else:
    7384                                matches.append([imdb_access.get_imdbID(serie),
    7485                                        serie['title'], int(serie['year'])])
     
    185196
    186197        if movie['kind'] == 'episode':
    187198                # print "TV Series episode detected"
    188                 metadata += 'Title:%s, S%d E%d: \"%s\"' % \
    189                                 (movie['series title'], int(movie['season']),
    190                 int(movie['episode']), movie['title']) + "\n"
     199                metadata += 'Title:' + episode_title_format % \
     200                                                {
     201                                                        'series_title': movie['series title'],
     202                                                        'season': int(movie['season']),
     203                                                        'episode': int(movie['episode']),
     204                                                        'episode_title': movie['title'],
     205                                                } + '\n'
    191206                series = movie['episode of']
    192207                imdb_access.update(series)
    193208                metadata += createMetadataFromFirst('Runtime', 'runtimes', m=series)
     
    202217
    203218        if 'plot' in movie.keys():
    204219                plots = movie['plot']
    205                 if movie['plot outline'] is not None and len(movie['plot outline']):
     220                if 'plot outline' in movie and \
     221                                movie['plot outline'] is not None and \
     222                                len(movie['plot outline']):
    206223                        plots.append("Outline::" + movie['plot outline'])
    207224                if plots is not None:
    208225                        # Find the shortest plot.
     
    258275        elif options.poster_search is not None:
    259276                poster_search(options.poster_search)
    260277        elif options.metadata_search is not None:
    261                 print metadata_search(options.metadata_search)
     278                print metadata_search(options.metadata_search).encode('ascii', 'replace')
    262279        else:
    263280                p.print_help()
    264281        sys.exit(0)