def search(): query = request.args.get("query") limit = int(request.args.get("limit", 10)) movies = OrderedDict() if query: movies = OrderedDict( (movie.imdb_id, movie) for movie in Series.objects(title__icontains=query)) imdb = IMDb() for movie in imdb.search_movie(query, results=limit * 2): if movie.movieID in movies: continue if movie['kind'] not in [MOVIE, TV_SERIES]: continue cls = Movie if movie['kind'] == MOVIE else Series item = cls(imdb_id=movie.movieID) item.year = int(movie.get('year', 0)) or None item.title = movie['title'] movies[item.imdb_id] = item return jsonify(movies=[movie.json for movie in movies.values()[:limit]])
def episodes(): imdb_id = request.args.get('imdb_id') result = [] current = None if imdb_id: tv_series = Series.objects(imdb_id=imdb_id).first() last = None if tv_series: seasons = Season.objects(series=tv_series) if seasons: last = Episode.objects( season__in=[season.pk for season in seasons]).order_by( '-season.number', '-number').first() imdb = IMDb() series = imdb.get_movie(imdb_id) imdb.update(series, 'episodes') if last: season = last.season.number episode = last.number while True: if season not in series['episodes']: season = sorted(series['episodes'].keys())[-1] season_data = series['episodes'][season] if episode not in season_data: episode = sorted(season_data.keys())[-1] if (episode + 1) not in season_data: season += 1 episode = 1 continue episode += 1 break else: season = sorted(series['episodes'].keys())[-1] season_data = series['episodes'][season] episode = sorted(season_data.keys())[-1] current = 'S%02dE%02d' % (season, episode) if not tv_series: tv_series = Series(imdb_id=series.movieID, title=series['title']) for season, episodes in series['episodes'].items(): season = Season(number=season, series=tv_series) for episode, data in episodes.items(): episode = Episode( season=season, title=data['title'], number=episode) result.append(episode) return jsonify(episodes=[episode.json for episode in result], current=current)