Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 def import_movie(self, imdb_id):
     movie = get_movie_by_id(int(imdb_id), 'http')
     save_movie_to_db(movie)
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
 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 + " (%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