Esempio n. 1
0
 def fetch_from_imdb(self, film):
     matches = get_movies_by_title_and_directors(film["title"], film["directors"], distance=2)
     if len(matches) == 1:
         movie, status = save_movie_to_db(matches[0])
         if movie:
             logger.info("film %s imported", movie)
         else:
             logger.warning("film %r do not saved", film)
             return
         return movie
     elif not matches:
         logger.warning("no imdb movie for %r %r", film["title"], film["directors"])
     else:
         logger.warning("too many matches for %r", film["title"])
Esempio n. 2
0
 def fetch_from_imdb(self, film):
     matches = get_movies_by_title_and_directors(film['title'],
                                                 film['directors'],
                                                 distance=2)
     if len(matches) == 1:
         movie = save_movie_to_db(matches[0])
         if movie:
             logger.info("film %s imported", movie)
         else:
             logger.warning("film %r do not saved", film)
             return
         return movie
     elif not matches:
         logger.warning("no imdb movie for %r %r", film['title'],
                        film['directors'])
     else:
         logger.warning("too many matches for %r", film['title'])
Esempio n. 3
0
    def handle(self, *args, **kw):
        data = open(args[0]).read().decode('utf-8')
        films = [i.strip() for i in data.split("\r\n\r\n") if i.strip()]
       
        defaults = {
            'name':'Apollo - West End',
            'type':Cinema.TYPE_CINEMA,
            'timezone_id':'Europe/London',
            'address':'19 Regent Street, London, SW1Y 4LR, United Kingdom - 0871 220 6000',
            'latitude':'51.508971',
            'longitude':'-0.134103',
        }
        cinema, _ = Cinema.objects.get_or_create(fetcher1_id=str(0x47346eaa2f391751), defaults=defaults)
        Tag.objects.update_tags(Channel.objects.get(id=cinema.id), 'raindance2011')
        for f in films:
            lines = f.split("\r\n")
            film = {}
            film['title'] = lines[0]
            for line in lines[1:]:
                match = kv_re.match(line)
                if match:
                    k, v = match.groups()
                    k, v = k.strip().lower(), v.strip()
                    film[k] = v
            if 'director' in film and 'title' in film:
                screenings = film.get('screening') or film.get('screenings') or ''
                film['times'] = filter(bool, [parse_date(d) for d in screenings.split('|')])
                directors = film.get('director')
                if directors:
                    directors = directors.replace('&', ',').replace(' and ', ',')
                film['directors'] = directors and [d.strip() for d in directors.split(',')] or ()
                film['info'] = film.get('synopsis', '')

                logger.debug('trying to match: %r', film)
                foc = FilmOnChannel.objects.match(film, source="raindance")
                if cinema:
                    for t in film['times']:
                        Screening.objects.get_or_create(channel=cinema, utc_time=t.astimezone(pytz.utc).replace(tzinfo=None), film=foc)
                if not foc.film:
                    matches = get_movies_by_title_and_directors(film['title'], film['directors'], distance=2)
                    if len(matches) == 1:
                        movie, status = save_movie_to_db(matches[0])
                        foc.film = movie
                        foc.save()
                        if movie:
                            logger.info("film %s imported", movie)
                        else:
                            logger.warning("film %r do not saved", film)
                            assert 0
                    elif not matches:
                        logger.warning("no imdb movie for %r %r", film['title'], film['directors'])
                    else:
                        logger.warning("too many matches for %r", film['title'])
                else:
                    logger.info('film %r is already matched', film['title'])
                if foc.film:
                    localized_film = foc.film.get_localized_film('en')
                    descr = localized_film and (localized_film.description or localized_film.fetched_description)
                    synopsis = film.get('synopsis', '')
                    if not descr and synopsis:
                        foc.film.save_description(synopsis, 'en')
                    for lang in ('en', 'pl'):
                        localized_obj = foc.film.get_localized_object(lang)
                        tags = localized_obj and localized_obj.tag_list or ''
                        tags = filter(bool, (t.strip() for t in tags.split(',')))
                        logger.info(tags)
                        if not RAINDANCE_TAG in tags:
                            tags.append(RAINDANCE_TAG)
                            foc.film.save_tags(u', '.join(tags), lang)
Esempio n. 4
0
 def import_movie(self, imdb_id):
     movie = get_movie_by_id(int(imdb_id), 'http')
     save_movie_to_db(movie)
Esempio 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
Esempio 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