Ticket #2734: updates-07-03-09.patch
File updates-07-03-09.patch, 10.9 KB (added by , 17 years ago) |
---|
-
mythvideo/scripts/imdbpy.py
22 22 "from (http://imdbpy.sourceforge.net/?page=download)" 23 23 sys.exit(1) 24 24 25 episode_title_format = '%(series_title)s S%(season)d E%(episode)d "%(episode_title)s"'26 25 27 def detect_series_query(search_string): 26 27 def detect_series_title(search_string): 28 28 """ 29 Detects a series episode query.29 Detects a series episode title. 30 30 31 31 Currently the following formats are detected: 32 32 "Sopranos Season 1 Episode 2" … … 65 65 continue 66 66 # Found an exact episode match, return that match only. 67 67 matches = [] 68 episode_title = episode_title_format % \ 69 { 70 'series_title': ep['series title'], 71 'season': season, 72 'episode': episode, 73 'episode_title': ep['title'] 74 } 75 matches.append([imdb_access.get_imdbID(ep), episode_title ,int(ep['year'])]) 68 meta = VideoMetadata() 69 meta.series_episode = True 70 meta.series_title = ep['series title'] 71 meta.season = season 72 meta.episode = episode 73 meta.episode_title = ep['title'] 74 matches.append([imdb_access.get_imdbID(ep), meta.toMetadataString() ,int(ep['year'])]) 76 75 return matches 77 76 else: 78 77 matches.append([imdb_access.get_imdbID(serie), … … 84 83 Returns a list of 3-tuples [imdb id, title, year] for possible matches. 85 84 """ 86 85 87 (title, season, episode) = detect_series_ query(search_string)86 (title, season, episode) = detect_series_title(search_string) 88 87 89 88 #print title,"--", season,"--", episode 90 89 #return … … 159 158 if url is not None: 160 159 print url 161 160 162 def metadata_search(imdb_id): 163 metadata = unicode() 161 class VideoMetadata: 162 163 series_episode = False 164 series_title = "" 165 season = None 166 episode = None 167 168 title = "" 169 runtime = None 170 year = None 171 directors = None 172 plot = None 173 rating = None 174 mpaa_rating = None 175 genres = None 176 countries = None 177 178 episode_title_format = '%(series_title)s S%(season)d E%(episode)d %(episode_title)s' 179 180 def __init__(self): 181 pass 182 183 def toMetadataString(self): 184 185 def createMetadataLine(keyName, value): 186 if value is not None: 187 return keyName + ":" + value + "\n" 188 else: 189 return "" 190 metadata = "" 191 if self.series_episode == True and self.season is not None and \ 192 self.episode is not None: 193 metadata += 'Title:' + self.episode_title_format % \ 194 { 195 'series_title': self.series_title, 196 'season': int(self.season), 197 'episode': int(self.episode), 198 'episode_title': self.episode_title, 199 } + '\n' 200 else: 201 metadata += createMetadataLine("Title", self.title).decode("utf8") 202 metadata += createMetadataLine("Runtime", self.runtime) 203 metadata += createMetadataLine('Year', self.year) 204 if self.directors is not None and len(self.directors) > 0: 205 metadata += createMetadataLine("Director", unicode(self.directors[0])) 206 metadata += createMetadataLine("Plot", self.plot) 207 208 metadata += createMetadataLine('UserRating', self.rating) 209 metadata += createMetadataLine('MovieRating', self.mpaa_rating) 210 metadata += createMetadataLine('Runtime', self.runtime) 211 metadata += createMetadataLine('Genres', self.genres) 212 metadata += createMetadataLine('Countries', self.countries) 213 214 return metadata 215 216 def fetch_metadata(imdb_id): 217 218 metadata = VideoMetadata() 219 164 220 imdb_access = imdb.IMDb() 165 221 movie = imdb_access.get_movie(imdb_id) 166 222 imdb_access.update(movie) 167 223 168 def createMetadataFromField(key, searchKey=None, m=movie): 169 if searchKey == None: 170 searchKey = key.lower() 171 if searchKey not in m.keys(): return "" 224 def metadataFromField(key, default=None, m=movie): 225 226 searchKey = key.lower() 227 if searchKey not in m.keys(): 228 return default 172 229 value = unicode(m[searchKey]) 173 230 try: 174 231 value = value.encode("utf8") 175 232 except AttributeError: 176 233 pass 177 234 if value is not None: 178 return "%s:%s\n" % (key, value)235 return value 179 236 else: 180 return ""237 return default 181 238 182 def createMetadataFromFirst(key, searchKey=None, m=movie): 183 if searchKey == None: 184 searchKey = key.lower() 185 if searchKey not in m.keys(): return "" 239 def metadataFromFirst(key, default=None, m=movie): 240 241 searchKey = key.lower() 242 if searchKey not in m.keys(): 243 return default 244 186 245 value = m[searchKey] 187 246 if value is not None and len(value) > 0: 188 247 if len(value) > 1: 189 return "%s:%s\n" % (key, ','.join(value).encode("utf8"))248 return ','.join(value).encode("utf8") 190 249 else: 191 return "%s:%s\n" % (key, value[0].encode("utf8"))250 return value[0].encode("utf8") 192 251 else: 193 return ""252 return default 194 253 195 254 if movie['kind'] == 'episode': 196 # print "TV Series episode detected" 197 metadata += 'Title:' + episode_title_format % \ 198 { 199 'series_title': movie['series title'], 200 'season': int(movie['season']), 201 'episode': int(movie['episode']), 202 'episode_title': movie['title'], 203 } + '\n' 204 series = movie['episode of'] 205 imdb_access.update(series) 206 metadata += createMetadataFromFirst('Runtime', 'runtimes', m=series) 255 # print "TV Series episode detected" 256 metadata.series_episode = True 257 if 'series title' in movie.keys(): 258 metadata.series_title = movie['series title'] 259 if 'season' in movie.keys(): 260 metadata.season = movie['season'] 261 if 'episode' in movie.keys(): 262 metadata.episode = movie['episode'] 263 if 'title' in movie.keys(): 264 metadata.episode_title = movie['title'] 265 266 if 'episode of' in movie.keys(): 267 series = movie['episode of'] 268 imdb_access.update(series) 269 metadata.runtime = metadataFromFirst('runtimes', None) 207 270 else: 208 metadata += createMetadataFromField('Title').decode("utf8") 209 metadata += createMetadataFromField('Year') 271 metadata.title = metadataFromField('title').decode("utf8") 272 273 metadata.year = metadataFromField('year') 210 274 211 275 if 'director' in movie.keys(): 212 276 directors = movie['director'] 213 277 if directors is not None: 214 metadata += "Director:%s" % unicode(directors[0]) + "\n"278 metadata.directors = directors 215 279 280 plots = [] 216 281 if 'plot' in movie.keys(): 217 282 plots = movie['plot'] 218 if movie.has_key('plot outline') and len(movie['plot outline']): 219 plots.append("Outline::" + movie['plot outline']) 220 if plots is not None: 221 # Find the shortest plot. 222 shortest_found = None 223 #print "%d plots found" % len(plots) 224 for plot in plots: 225 text = plot.split("::")[1] 226 if shortest_found == None or len(text) < len(shortest_found): 227 shortest_found = text 228 metadata += "Plot:%s" % shortest_found + "\n" 283 if movie.has_key('plot outline') and len(movie['plot outline']): 284 plots.append("Outline::" + movie['plot outline']) 285 286 if plots is not None: 287 # Find the shortest plot. 288 shortest_found = None 289 #print "%d plots found" % len(plots) 290 for plot in plots: 291 text = plot.split("::")[1] 292 if shortest_found == None or len(text) < len(shortest_found): 293 shortest_found = text 294 metadata.plot = shortest_found 229 295 230 metadata += createMetadataFromField('UserRating', 'rating') 231 metadata += createMetadataFromField('MovieRating', 'mpaa') 232 metadata += createMetadataFromFirst('Runtime', 'runtimes') 233 metadata += createMetadataFromFirst('Genres', 'genres') 234 metadata += createMetadataFromFirst('Countries', 'countries') 296 metadata.rating = metadataFromField('rating', metadata.rating) 297 metadata.mpaa_rating = metadataFromField('mpaa', metadata.mpaa_rating) 298 metadata.runtime = metadataFromFirst('runtimes', metadata.runtime) 299 metadata.genres = metadataFromFirst('genres', metadata.genres) 300 metadata.countries = metadataFromFirst('countries', metadata.countries) 301 235 302 return metadata 303 236 304 305 def metadata_search(imdb_id): 306 meta = fetch_metadata(imdb_id) 307 if meta is not None: 308 return meta.toMetadataString() 309 310 237 311 def parse_meta(meta, key): 238 312 for line in meta.split("\n"): 239 313 beginning = key + ":" -
mythvideo/scripts/fetch_poster.py
190 190 return [self.download_image(poster_url, extension)] 191 191 return [] 192 192 193 def find_best_posters(title, count=1, accept_horizontal=False, imdb_id=None): 193 def find_best_posters(title, count=1, accept_horizontal=False, imdb_id=None): 194 194 195 fetchers = [MoviePosterPosterFetcher(), IMDbPosterFetcher()] 195 196 #fetchers = [IMDbPosterFetcher()] 196 197 posters = [] 197 198 198 199 # If it's a series title 'Sopranos, S06E14' then use just the series 199 200 # name for finding the poster. Strip the episode number. 200 (series_title, season, episode) = imdbpy.detect_series_ query(title)201 (series_title, season, episode) = imdbpy.detect_series_title(title) 201 202 if series_title is not None and season is not None and episode is not None: 202 203 title = series_title.strip() 203 204 if title.endswith(","): -
mythvideo/scripts/find_meta.py
Property changes on: mythvideo/scripts/fetch_poster.py ___________________________________________________________________ Name: svn:executable + *
579 579 source_nfo = nfo 580 580 break 581 581 582 title = unicode(cleanup_title(title), "utf8", "ignore") 582 583 if imdb_id is None: 583 # A title search 584 title = unicode(cleanup_title(title), "utf8", "ignore") 584 # A title search 585 585 586 586 print_verbose("Title search '%s'" % title) 587 587 … … 617 617 return None 618 618 619 619 print_verbose("Querying IMDb for meta data for ID %s..." % imdb_id) 620 metadata = imdbpy.metadata_search(imdb_id) 621 if metadata is not None: 620 meta = imdbpy.fetch_metadata(imdb_id) 621 if meta is not None: 622 if meta.series_episode: 623 title, season, episode = imdbpy.detect_series_title(title) 624 if meta.season is None: 625 meta.season = season 626 if meta.episode is None: 627 meta.episode = episode 628 metadata = meta.toMetadataString() 622 629 metadata += "IMDb:%s" % imdb_id + "\n" 623 630 return metadata 624 631 … … 691 698 # Detect that the file names don't look like series episodes 692 699 filename_length = len(videos[0]) 693 700 for video in videos: 694 if imdbpy.detect_series_ query(cleanup_title(video)) != (None, None, None):701 if imdbpy.detect_series_title(cleanup_title(video)) != (None, None, None): 695 702 print_verbose("'%s' looks like a TV-series episode." % video) 696 703 return False 697 704 … … 751 758 metadata = load_metadata_file(metadata_target) 752 759 753 760 if imdb_id is not None: 754 metadata = imdbpy.metadata_search(imdb_id) 761 meta = imdbpy.fetch_metadata(imdb_id) 762 if meta.series_episode: 763 fileName = os.path.basename(pathName) 764 t, season, episode = imdbpy.detect_series_title(fileName) 765 if meta.season is None: 766 meta.season = season 767 if meta.episode is None: 768 meta.episode = episode 769 metadata = meta.toMetadataString() 755 770 metadata += "IMDb:%s" % imdb_id + "\n" 756 771 757 772 if metadata is None: