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"])
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'])
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)
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 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