def search_film(film_title=None, year=None, imdb_id=None, criticker_id=None, filmweb_id=None): """ Search for a film while importing ratings """ from film20.utils.texts import normalized_text title_normalized = normalized_text(film_title) if imdb_id: try: film = Film.objects.get(imdb_code=imdb_id) if normalized_text(film.title)==title_normalized and (not year or year==film.release_year): return film else: logger.debug("WARN: not matching film! searching for: #%s %s (%s); found %s (%s)" %(imdb_id, film_title.encode('utf-8'), year, film.title.encode('utf-8'), film.release_year)) # fix for http://jira.filmaster.org/browse/FLM-491 # fetch movie by this imdb_code and check if year is same # and title is in akas then return this film movie = imdb_fetcher.get_movie_by_id( imdb_id, "http" ) if movie: if movie.get( 'year' ) == year: akas = movie.get( 'akas' ) for aka in akas: t, c = aka.split( '::' ) if t == film_title: print " -- title is: %s" % c return film else: logger.error("ERROR: this imdb_code is probably wrong ...") except Exception, e: logger.error("ERROR: %s" % e)
def verify_imdb_codes(self): films = Film.objects.all().order_by('imdb_code') none = [] alt = [] for film in films: logger.info("Movie %s" %film) if not film.imdb_code: film.verified_imdb_code = False logger.error("Movie %s have no IMDB code" % film) movie = {"film_id":film.id, "film_title":film.title, "imdb_code":"missing_imdb_code", "imdb_akas":None} none.append(movie) else: movie = get_movie_by_id(film.imdb_code, "http") logger.info("Get movie by IMDB id %s", film.imdb_code) if movie: year = movie.get('year') title = movie.get('title') akas = movie.get('akas') if year: if title == film.title: film.verified_imdb_code = True film.release_year = year logger.info("Matched title %s" % film) else: found = False for aka in akas: title = aka.split('::')[0] logger.info("Check alternative title %s for %s" % (title, film.title)) if title == film.title: film.verified_imdb_code = False film.release_year = year film.title = title logger.info("Found movie %s by alternative title" % film) movie = {"film_id":film.id, "film_title":film.title, "imdb_code":film.imdb_code, "imdb_title":movie.get('title'), "imdb_akas":akas} alt.append(movie) found = True if not found: film.verified_imdb_code = False logger.error("Missing title for %s in IMDB" % film) movie = {"film_id":film.id, "film_title":film.title, "imdb_code":film.imdb_code, "imdb_akas":akas} none.append(movie) else: film.verified_imdb_code = False logger.error("Wrong year: %s (%s), should be %s" %(film, film.release_year, year)) movie = {"film_id":film.id, "film_title":film.title, "imdb_code":film.imdb_code, "imdb_akas":akas} none.append(movie) else: film.verified_imdb_code = False logger.error("Movie %s not found" % film) movie = {"film_id":film.id, "film_title":film.title, "imdb_code":film.imdb_code, "imdb_akas":"missing_imdb_film"} none.append(movie) film.save() return alt, none
def get_film_from_imdb(self, film): logger.info("Get movie %s by IMDB id %s" % (film, film.imdb_code)) movie = get_movie_by_id(film.imdb_code, "http") try: imdb_year = movie.get('year') except: imdb_year = None try: imdb_title = movie.get('title') except: imdb_title = None try: imdb_akas = movie.get('akas') except: imdb_akas = None movie_log = {"film":film, "film_id":film.id, "film_title":film.title, "film_year":film.release_year, "imdb_code":film.imdb_code, "imdb_title":imdb_title, "imdb_akas":imdb_akas, "imdb_year":imdb_year} return movie_log
def import_movie(self, imdb_id): movie = get_movie_by_id(int(imdb_id), 'http') save_movie_to_db(movie)
def save_ratings(user, ratings, overwrite): """ Saves a list of imported ratings for the selected user """ movies_rated_list = [] movies_already_rated_list = [] titles_rated = [] titles_already_rated = [] titles_not_rated = [] f = lambda title, year: title if not year else title+" ("+str(year)+")" f_imdb = lambda title, year, imdb_id: "#"+str(imdb_id)+":"+ (title if not year else title+" ("+str(year)+")") #import codecs #dest = codecs.open('c:/temp/import.html', 'w', 'utf-8') #dest.write('<html><body>') def rate_film(film, film_title, year, score, review, overwrite): was_rated = save_rating(film, user, score, review, overwrite) if was_rated: movies_already_rated_list.append(film) titles_already_rated.append(f(film_title, year)) if overwrite or not was_rated: movies_rated_list.append(film) titles_rated.append(f(film_title, year)) for record in ratings: film_title = record['title'] year = record['year'] if 'year' in record else None score = record['score'] imdb_id = record['imdb_id'] if 'imdb_id' in record else None criticker_id = record['criticker_id'] if 'criticker_id' in record else None review = record['review'] if 'review' in record else None aka = None if criticker_id is not None: fetch_film_info_from_criticker(record) imdb_id = record['imdb_id'] year = record['year'] film_title = record['title'] aka = record['aka'] film = None if aka is not None: for title in aka: logger.debug("try to search film %s by alternative title: %s (%s): %s" % (film_title, title, str(year), imdb_id)) film = search_film(film_title=title, year=year, imdb_id=imdb_id) if film: break else: logger.debug("try to search %s (%s): %s" % (film_title, str(year), imdb_id)) film = search_film(film_title=film_title, year=year, imdb_id=imdb_id) if film: logger.info("found movie %s: rated at %s" % (film, score)) rate_film(film, film_title, year, score, review, overwrite) else: logger.debug("film %s not found" % film_title) if imdb_id: logger.info("try to search by imdb_id: %s" % imdb_id) movie = imdb_fetcher.get_movie_by_id(imdb_id, "http") if movie: film, status = imdb_fetcher.save_movie_to_db(movie) else: logger.error("Probably given IMDB_ID: %s is not a movie" % imdb_id) if film: if status == FilmToImport.ACCEPTED: importedfilm = ImportedFilm(user=user, film=film) importedfilm.save() logger.info("imported movie %s" % film) logger.info("found movie %s: rated at %s" % (film, score)) rate_film(film, film_title, year, score, review, overwrite) else: logger.error("Failed to import movie!. Continuing import anyway...") if not film: logger.info("Film %s not rated" % film_title) titles_not_rated.append(f(film_title, year)) #dest.write("<a href='http://filmaster.pl/dodaj-film/?%s'>%s</a><br/>\n" \ # % (urllib.urlencode({'title':f(film_title, year).encode('utf-8'), 'imdb_id':str(imdb_id) if imdb_id else ''}), f(film_title, year))) movies_not_rated = "; ".join(titles_not_rated) rating_import_log = ImportRatingsLog(user=user, movies_rated="; ".join(titles_rated), movies_already_rated = "; ".join(titles_already_rated), movies_not_rated= movies_not_rated) #dest.write('</body></html>') #dest.close() rating_import_log.save() return movies_rated_list, movies_already_rated_list, movies_not_rated
def save_ratings(user, ratings, overwrite): """ Saves a list of imported ratings for the selected user """ movies_rated_list = [] movies_already_rated_list = [] titles_rated = [] titles_already_rated = [] titles_not_rated = [] f = lambda title, year: title if not year else title + " (%s)" % str(year) def rate_film(film, film_title, year, score, review, overwrite): was_rated = save_rating(film, user, score, review, overwrite) if was_rated: movies_already_rated_list.append(film) titles_already_rated.append(f(film_title, year)) if overwrite or not was_rated: movies_rated_list.append(film) titles_rated.append(f(film_title, year)) for record in ratings: film_title = record['title'] year = record['year'] if 'year' in record else None score = int(record['score']) imdb_id = record['imdb_id'] if 'imdb_id' in record else None criticker_id = record['criticker_id'] if 'criticker_id' in record else None filmweb_id = record['filmweb_id'] if 'filmweb_id' in record else None review = record['review'] if 'review' in record else None aka = None if 0 < score < 11: if criticker_id is not None: fetch_film_info_from_criticker(record) imdb_id = record['imdb_id'] year = record['year'] film_title = record['title'] aka = record['aka'] film = None if aka is not None: for title in aka: logger.debug("try to search film %s by alternative title: %s (%s): %s" % (film_title, title, str(year), imdb_id)) film = search_film(film_title=title, year=year, imdb_id=imdb_id) if film: break else: logger.debug("try to search %s (%s): %s" % (film_title, str(year), imdb_id)) film = search_film(film_title=film_title, year=year, imdb_id=imdb_id) if film: logger.info("found movie %s: rated at %s" % (film, score)) rate_film(film, film_title, year, score, review, overwrite) else: logger.debug("film %s not found" % film_title) if imdb_id: logger.info("try to search by imdb_id: %s" % imdb_id) movie = imdb_fetcher.get_movie_by_id(imdb_id, "http") if movie: film, status = imdb_fetcher.save_movie_to_db(movie) else: logger.error("Probably given IMDB_ID: %s is not a movie" % imdb_id) if film: if status == FilmToImport.ACCEPTED: importedfilm = ImportedFilm(user=user, film=film) importedfilm.save() logger.info("imported movie %s" % film) logger.info("found movie %s: rated at %s" % (film, score)) rate_film(film, film_title, year, score, review, overwrite) else: logger.error("Failed to import movie!. Continuing import anyway...") if not film: logger.info("Film %s not rated" % film_title) titles_not_rated.append(f(film_title, year)) else: titles_not_rated.append(f(film_title, year)) movies_not_rated = "; ".join(titles_not_rated) rating_import_log = ImportRatingsLog(user=user, movies_rated="; ".join(titles_rated), movies_already_rated="; ".join(titles_already_rated), movies_not_rated=movies_not_rated) rating_import_log.save() return movies_rated_list, movies_already_rated_list, movies_not_rated