def run(self): ''' Initialise the runner function with passed args, kwargs. ''' # Retrieve args/kwargs here; and fire processing using them try: item = Movie(id=self.id) image = None item.get_content('posters') url = item.posters[0] if len(item.posters) > 0 else None if url: req = urllib.request.urlopen(url, timeout=3) if not url[7:] in req.geturl(): image = b'' else: image = req.read() except: traceback.print_exc() exctype, value = sys.exc_info()[:2] #self.signals.error.emit((exctype, value, traceback.format_exc())) self.signals.result.emit(b'', self.id) else: self.signals.result.emit( image, self.id) # Return the result of the processing finally: self.signals.finished.emit()
def test_movie_main_page_id_1111018(self): m = Movie(id=1111018) m.get_content('main_page') self.assertEqual(m.year, 2019) self.assertEqual(m.title, 'Чудотворцы') self.assertEqual(m.genres, ['комедия', 'фэнтези', '...слова']) self.assertEqual(m.countries, ['США']) self.assertEqual(m.id, 1111018) self.assertEqual(m.title_en, 'Miracle Workers') self.assertEqual(m.plot, 'Небесная канцелярия Бога — масштабный офис с множеством отделов и сотрудников, работающих в атмосфере цейтнота и многозадачности. Есть даже HR и напоминающий службу технической поддержки отдел обработки молитв. Именно его служащие, ангелы Элиза и Крэйг, берутся за спасение Земли, когда приунывший Господь вдруг решает её погубить. Теперь у ангелов есть две недели, чтобы соединить несоединимое — двух одиноких людей в пару — и доказать, что человечество вовсе не безнадежно и достойно существования.') self.assertEqual(m.runtime, 20) self.assertEqual(m.rating, 7.6) self.assertEqual(m.imdb_rating, 7.0) self.assertGreaterEqual(m.votes, 47000) self.assertGreaterEqual(m.imdb_votes, 7000) self.assertEqual(m.tagline, "«On the Trillionth Day...God Quit»") self.assertIsNone(m.marketing) self.assertEqualPersons( m.actors, ['Дэниэл Рэдклифф', 'Джеральдин Висванатхан', 'Каран Сони', 'Стив Бушеми', 'Джон Басс', 'Лолли Адефоп', 'Саша Компере', 'Питер Серафинович', 'Джэми Деметриу', 'Майк Данстон'] ) self.assertEqualPersons(m.directors, ['Дэн Шимпф', 'Райан Кейс', 'Морис Мэрэбл']) self.assertEqualPersons(m.screenwriters, ['Саймон Рич', 'Лукас Гарднер', 'Хезер Энн Кэмпбелл']) self.assertEqualPersons(m.producers, ['Лорн Майклз', 'Стив Бушеми', 'Кэти Дженсон']) self.assertEqualPersons(m.operators, ['Блейк МакКлюр', 'Брайан Бёргойн']) self.assertEqualPersons(m.art_direction_by, ['Тодд Джеффри', 'Дэйв Эрроусмит', 'Марисса Легизамон']) self.assertEqualPersons(m.editing_by, ['Роб Барнетт', 'Райан Браун', 'Джессика Брунетто'])
def test_movie_by_id_1552(self): m = Movie(id=1552) m.get_content('main_page') # m.get_content('trailers') self.assertEqual(m.profit_russia, 41000) self.assertEqual(m.budget, 10000000)
def test_movie_main_page_id_258687(self): """ Test of movie manager, movie obtain by id (not via search) """ m = Movie(id=258687) m.get_content('main_page') m.get_content('trailers') trailers_ids = [trailer.id for trailer in m.trailers] trailers_files = [trailer.file for trailer in m.trailers] self.assertEqual(m.id, 258687) self.assertEqual(m.year, 2014) self.assertEqual(m.title, 'Интерстеллар') self.assertEqual(m.title_en, 'Interstellar') self.assertEqual(m.plot, 'Когда засуха приводит человечество к продовольственному кризису, коллектив исследователей и учёных отправляется сквозь червоточину (которая предположительно соединяет области пространства-времени через большое расстояние) в путешествие, чтобы превзойти прежние ограничения для космических путешествий человека и переселить человечество на другую планету.') self.assertEqual(m.runtime, 169) self.assertEqual(m.tagline, '«Следующий шаг человечества станет величайшим»') self.assertGreater(len(m.trailers), 70) self.assertTrue('109352' in trailers_ids) self.assertTrue('gettrailer.php?quality=hd&trailer_id=109352'in trailers_files) self.assertEqual(m.genres, ['фантастика', 'драма', 'приключения']) self.assertEqual(m.countries, ['США', 'Великобритания', 'Канада']) self.assertGreaterEqual(m.profit_usa, 158445319) self.assertGreaterEqual(m.profit_russia, 24110578) self.assertGreaterEqual(m.profit_world, 592845319) self.assertEqualPersons(m.directors, ['Кристофер Нолан']) self.assertEqualPersons(m.screenwriters, ['Джонатан Нолан', 'Кристофер Нолан']) self.assertEqualPersons(m.producers, ['Кристофер Нолан', 'Линда Обст', 'Эмма Томас']) self.assertEqualPersons(m.operators, ['Хойте Ван Хойтема']) self.assertEqualPersons(m.composers, ['Ханс Циммер'])
def test_movie_cast(self): """ Test of movie cast source page """ m = Movie(id=4220) m.get_content('cast') self.assertEqual(len(m.cast), 7) self.assertGreaterEqual(len(m.cast['director']), 1) self.assertGreaterEqual(len(m.cast['actor']), 49) self.assertGreaterEqual(len(m.cast['producer']), 4) self.assertGreaterEqual(len(m.cast['writer']), 3) self.assertGreaterEqual(len(m.cast['operator']), 2) self.assertGreaterEqual(len(m.cast['design']), 1) self.assertGreaterEqual(len(m.cast['editor']), 1) self.assertEqual(m.cast['actor'][0].person.id, 8986) self.assertEqual(m.cast['actor'][0].person.name, 'Питер Фонда') self.assertEqual(m.cast['actor'][0].person.name_en, 'Peter Fonda') self.assertEqual(m.cast['actor'][0].name, 'Wyatt') # в титрах: ... self.assertEqual(m.cast['actor'][13].person.name, 'Сэнди Браун Уайет') self.assertEqual(m.cast['actor'][13].person.name_en, 'Sandy Brown Wyeth') self.assertEqual(m.cast['actor'][13].name, 'Joanne')
def search_kp_id(kp_id): # film = Film() print('here') print(kp_id) m = Movie(id=kp_id) m.get_content('main_page') # print (m) # print (m.title) # print (m.release) # # print (m.) # print (m.series) # print (m.actors) # print (m.profit_russia) # print (m.profit_world) dir_name = m.directors[0] dir_kp_id = m.directors[0].id # l = dir(m) # print (l) # d = m.__dict__ # print (d) # print (m.directors) director, created = Director.objects.get_or_create(name=dir_name, kp_id=dir_kp_id) print(created) film = Film(director=director, **clean_kp_film(m)) # print (film, created) # video_instance, created = Video.objects.update_or_create(video_id=att['id'], # owner_id=att['owner_id'], # defaults=video_data_clean) # d = check_or_create_director(dir_name,kp_id) # f = Film (director = d, **clean_kp_film(m)) # f.save() return film
def test_movie_main_page_id_278229(self): """ Test of movie manager, movie obtain by id (not via search) """ m = Movie(id=278229) m.get_content('main_page') m.get_content('trailers') trailers_ids = [trailer.id for trailer in m.trailers] trailers_files = [trailer.file for trailer in m.trailers] self.assertEqual(m.id, 278229) self.assertEqual(m.year, 2007) self.assertEqual(m.title, 'Без цензуры') self.assertEqual(m.title_en, 'Redacted') self.assertEqual(m.plot, 'В центре картины — небольшой отряд американских солдат на контрольно-пропускном пункте в Ираке. Причём восприятие их истории постоянно меняется. Мы видим события глазами самих солдат, представителей СМИ, иракцев и понимаем, как на каждого из них влияет происходящее, их встречи и столкновения друг с другом.') self.assertEqual(m.runtime, 90) self.assertEqual(m.tagline, '«Фильм, запрещенный к прокату во многих странах»') self.assertGreater(len(m.trailers), 3) self.assertIn('gettrailer.php?quality=hd&trailer_id=4476', trailers_files) self.assertIn('4476', trailers_ids) self.assertEqualPersons(m.actors, ['Иззи Диаз', 'Роб Дивейни', 'Ти Джонс', 'Анас Веллман', 'Майк Фигуроа', 'Яналь Кассай', 'Дхиая Калиль', 'Кел О’Нил', 'Дэниэл Стюарт-Шерман', 'Патрик Кэрролл'])
def test_movie_main_page_id_746251(self): m = Movie(id=746251) m.get_content('main_page') self.assertEqual(m.year, None) self.assertEqual(m.title, 'Ловкость') self.assertEqual(m.genres, ['драма']) self.assertEqual(m.countries, ['США'])
def test_movie_main_page_id_6877(self): """ Test of movie manager, movie obtain by id (not via search) """ m = Movie(id=6877) m.get_content('main_page') m.get_content('trailers') trailers_ids = [trailer.id for trailer in m.trailers] trailers_files = [trailer.file for trailer in m.trailers] self.assertEqual(m.id, 6877) self.assertEqual(m.year, 2004) self.assertEqual(m.title, 'Терминал') self.assertEqual(m.title_en, 'The Terminal') self.assertEqual( m.plot, 'Фильм рассказывает историю Виктора Наворски, отправившегося в Нью-Йорк из Восточной Европы. Пока Виктор летел в самолете, на его родине произошел государственный переворот. Оказавшись в международном аэропорту имени Джона Кеннеди с паспортом ниоткуда, он не имеет права въехать в Соединенные Штаты и должен коротать свои дни и ночи на скамейках у выхода 67, пока война в его родной стране не закончится. Тянутся недели и месяцы, и Виктор обнаруживает, что небольшой мирок терминала может быть наполнен абсурдом, щедростью, амбициями, развлечениями, желанием сохранить свой статус, интуитивной прозорливостью и даже любовью к очаровательной стюардессе Амелии. Виктору удается завоевать симпатии всех, кроме одного человека — чиновника аэропорта Фрэнка Диксона, который считает его бюрократической ошибкой, проблемой, которую он не может контролировать, но от которой жаждет избавиться.' ) self.assertEqual(m.runtime, 124) self.assertEqual(m.rating, 8.069) self.assertEqual(m.imdb_rating, 7.30) self.assertGreaterEqual(m.votes, 214662) self.assertGreaterEqual(m.imdb_votes, 381282) self.assertEqual(m.tagline, "«Жизнь - это ожидание»") self.assertEqual(len(m.trailers), 4) self.assertIn('506', trailers_ids) self.assertIn('gettrailer.php?quality=hd&trailer_id=506', trailers_files) self.assertEqual(m.genres, ['драма', 'мелодрама', 'комедия']) self.assertEqual(m.countries, ['США']) self.assertGreaterEqual(m.budget, 60000000) self.assertGreaterEqual(m.marketing, 35000000) self.assertGreaterEqual(m.profit_usa, 77872883) self.assertGreaterEqual(m.profit_russia, 1880000) self.assertGreaterEqual(m.profit_world, 218685607) self.assertEqualPersons(m.actors, [ 'Том Хэнкс', 'Кэтрин Зета-Джонс', 'Стэнли Туччи', 'Чи МакБрайд', 'Диего Луна', 'Бэрри Шебака Хенли', 'Кумар Паллана', 'Зои Салдана', 'Эдди Джонс', 'Джуд Чикколелла' ]) self.assertEqualPersons(m.directors, ['Стивен Спилберг']) self.assertEqualPersons( m.screenwriters, ['Саша Джерваси', 'Джефф Натансон', 'Эндрю Никкол']) self.assertEqualPersons( m.producers, ['Лори МакДональд', 'Уолтер Ф. Паркс', 'Стивен Спилберг']) self.assertEqualPersons(m.operators, ['Януш Камински']) self.assertEqualPersons(m.composers, ['Джон Уильямс']) self.assertEqualPersons( m.art_direction_by, ['Алекс Макдауэлл', 'Кристофер Бериэн-Мор', 'Брэд Рикер']) self.assertEqualPersons(m.editing_by, ['Майкл Кан'])
def get_movies_desc(*films): # print(films) dict_to_return = {} for film in films: movie = Movie(id=film.id) movie.get_content("main_page") dict_to_return.update({movie.title: movie}) return dict_to_return
def search(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text = 'Ищу для вас информацию') a = ' '.join(context.args) movie_list = Movie.objects.search(a) movie = Movie(id = movie_list[0].id) movie.get_content("main_page") movie.get_content('posters') posters = movie.posters context.bot.send_photo(chat_id= update.effective_chat.id, photo=posters[0]) movie.plot b = movie.plot url = "https://kinopoisk.ru/film/" + str(movie_list[0].id) context.bot.send_message(chat_id=update.effective_chat.id, text = b) context.bot.send_message(chat_id=update.effective_chat.id, text = f'Ссылка на фильм:{url}')
def test_movie_main_page_id_1005878(self): """ Test of movie manager, movie obtain by id (not via search) """ m = Movie(id=1005878) m.get_content('main_page') self.assertEqual(m.id, 1005878) self.assertEqual(m.year, 2019) self.assertEqual(m.title, 'Король Лев') self.assertEqual(m.title_en, 'The Lion King') self.assertEqual( m.plot, 'История об отважном львенке по имени Симба. Знакомые с детства герои взрослеют, влюбляются, познают себя и окружающий мир, совершают ошибки и делают правильный выбор.' ) self.assertEqual(m.runtime, 118) self.assertEqual(m.rating, 7.158) self.assertEqual(m.imdb_rating, 6.90) self.assertGreaterEqual(m.votes, 60604) self.assertGreaterEqual(m.imdb_votes, 169531) self.assertEqual(m.tagline, "«The King Has Returned»") self.assertEqual( m.genres, ['мультфильм', 'мюзикл', 'драма', 'приключения', 'семейный']) self.assertEqual(m.countries, ['США']) self.assertGreaterEqual(m.budget, 260000000) self.assertIsNone(m.marketing) self.assertGreaterEqual(m.profit_usa, 543638043) self.assertGreaterEqual(m.profit_russia, 47106883) self.assertGreaterEqual(m.profit_world, 1656943394) self.assertEqualPersons(m.actors, [ 'Джеймс Эрл Джонс', 'Дональд Гловер', 'Чиветель Эджиофор', 'Джон Оливер', 'Джон Кани', 'Элфри Вудард', 'Джейдон Маккрэри', 'Шахади Райт Джозеф', 'Пенни Джонсон', 'Кигэн-Майкл Ки' ]) self.assertEqualPersons(m.directors, ['Джон Фавро']) self.assertEqualPersons( m.screenwriters, ['Джефф Натансон', 'Ирен Меччи', 'Джонатан Робертс']) self.assertEqualPersons(m.producers, ['Джон Бартники', 'Дэбби Босси', 'Джон Фавро']) self.assertEqualPersons(m.operators, ['Калеб Дешанель']) self.assertEqualPersons(m.composers, ['Ханс Циммер']) self.assertEqualPersons(m.art_direction_by, ['Джеймс Чинланд', 'Влад Бина']) self.assertEqualPersons(m.editing_by, ['Адам Герстл', 'Марк Ливолси'])
def add_film(): form = add_film_form.AddFilmForm() if form.validate_on_submit(): session = db_session.create_session() movie = Movie(id=form.kp_id.data) if_exist = False try: movie.get_content('main_page') except Exception: if_exist = False else: if_exist = True if if_exist and len(session.query(Film.Film).filter(Film.Film.kp_id == form.kp_id.data).all()) == 0: film = Film.Film(movie.id, movie.title, movie.title_en, movie.plot, movie.year) session.add(film) session.commit() session = db_session.create_session() actors_list = movie.actors actors_to_add = actors_list.copy() actors_list = list(map(str, actors_list)) for actor in session.query(Actor.Actor).filter(Actor.Actor.name.in_(actors_list)): actors_list.remove(str(actor.name)) if actor.films != None: actor.films = str(actor.films) + str(film.id) + '/' else: actor.films = str(film.id) + '/' for i in actors_list: actor = Actor.Actor(str(i)) actor.films = str(film.id) + '/' session.add(actor) session.commit() session = db_session.create_session() actors_str = "" for i in actors_to_add: actor_id = str(session.query(Actor.Actor).filter(Actor.Actor.name == str(i)).first().id) actors_str += "/" + actor_id film = session.query(Film.Film).filter(Film.Film.id == film.id).first() if not film.actors: film.actors = actors_str else: film.actors = str(film.actors) + actors_str session.commit() return redirect('/add_film') return render_template("add_film.html", form=form)
def test_movie_main_page_id_4374(self): """ Test of movie manager, movie obtain by id (not via search) """ m = Movie(id=4374) m.get_content('main_page') m.get_content('trailers') trailers_ids = [trailer.id for trailer in m.trailers] trailers_files = [trailer.file for trailer in m.trailers] self.assertEqual(m.id, 4374) self.assertEqual(m.year, 2003) self.assertEqual(m.title, 'Пираты Карибского моря: Проклятие Черной жемчужины') self.assertEqual(m.title_en, 'Pirates of the Caribbean: The Curse of the Black Pearl') self.assertEqual(m.plot, 'Жизнь харизматичного авантюриста, капитана Джека Воробья, полная увлекательных приключений, резко меняется, когда его заклятый враг — капитан Барбосса — похищает корабль Джека, Черную Жемчужину, а затем нападает на Порт Ройал и крадет прекрасную дочь губернатора, Элизабет Свонн. Друг детства Элизабет, Уилл Тернер, вместе с Джеком возглавляет спасательную экспедицию на самом быстром корабле Британии, в попытке вызволить девушку из плена и заодно отобрать у злодея Черную Жемчужину. Вслед за этой парочкой отправляется амбициозный коммодор Норрингтон, который к тому же числится женихом Элизабет. Однако Уилл не знает, что над Барбоссой висит вечное проклятие, при лунном свете превращающее его с командой в живых скелетов. Проклятье будет снято лишь тогда, когда украденное золото Ацтеков будет возвращено пиратами на старое место.') self.assertEqual(m.runtime, 143) self.assertEqual(m.rating, 8.335) self.assertEqual(m.imdb_rating, 8.00) self.assertGreaterEqual(m.votes, 327195) self.assertGreaterEqual(m.imdb_votes, 859395) self.assertEqual(m.tagline, "«Over 3000 Islands of Paradise -- For Some it's A Blessing -- For Others... It's A Curse»") self.assertGreater(len(m.trailers), 2) self.assertTrue('529' in trailers_ids) self.assertTrue('gettrailer.php?quality=hd&trailer_id=529' in trailers_files) self.assertEqual(m.genres, ['фэнтези', 'боевик', 'приключения']) self.assertEqual(m.countries, ['США']) self.assertGreaterEqual(m.budget, 140000000) self.assertGreaterEqual(m.marketing, 40000000) self.assertGreaterEqual(m.profit_usa, 305413918) self.assertGreaterEqual(m.profit_russia, 9060000) self.assertGreaterEqual(m.profit_world, 654264015) self.assertEqualPersons(m.actors, ['Джонни Депп', 'Джеффри Раш', 'Орландо Блум', 'Кира Найтли', 'Джек Девенпорт', 'Кевин МакНэлли', 'Джонатан Прайс', 'Ли Аренберг', 'Макензи Крук', 'Дэвид Бэйли']) self.assertEqualPersons(m.directors, ['Гор Вербински']) self.assertEqualPersons(m.screenwriters, ['Тед Эллиот', 'Терри Россио', 'Стюарт Битти']) self.assertEqualPersons(m.producers, ['Джерри Брукхаймер', 'Пол Дисон', 'Брюс Хендрикс']) self.assertEqualPersons(m.operators, ['Дариуш Вольски']) self.assertEqualPersons(m.composers, ['Клаус Бадельт']) self.assertEqualPersons(m.art_direction_by, ['Брайан Моррис', 'Дерек Р. Хилл', 'Майкл Пауэлс']) self.assertEqualPersons(m.editing_by, ['Стивен Е. Ривкин', 'Артур Шмидт', 'Крэйг Вуд'])
def test_movie_trailers(self): """ Test of movie trailers source page """ m = Movie(id=521689) m.get_content('trailers') self.assertGreaterEqual(len(m.trailers), 11) trailers_ids = [trailer.id for trailer in m.trailers] trailers_files = [trailer.file for trailer in m.trailers] self.assertTrue('76485' in trailers_ids) self.assertTrue('gettrailer.php?quality=hd&trailer_id=76485' in trailers_files) self.assertTrue('74666' in trailers_ids) self.assertTrue('gettrailer.php?quality=hd&trailer_id=74666' in trailers_files) self.assertEqual(m.youtube_ids, ['e4f5keHX_ks'])
def load_movie(movie_name): movie_id = Movie.objects.search(movie_name)[0].id movie = Movie(movie_id) movie.get_content('main_page') film_info = { "name": movie_name, "title": movie.title, "title_en": movie.title_en, "year": movie.year, "rating": movie.rating, "info": movie.plot, "country": movie.countries, "budget": movie.budget, "actors": movie.actors, "directors": movie.directors, "url": f"https://www.kinopoisk.ru/film/{movie_id}", "poster": f"https://www.kinopoisk.ru/images/film_big/{movie_id}.jpg", "genres": movie.genres, "runtime": movie.runtime, } return film_info, movie
def test_movie_cast_1(self): """ Test of movie cast source page """ m = Movie(id=63991) m.get_content('cast') self.assertEqual(len(m.cast), 11) self.assertGreaterEqual(len(m.cast['director']), 1) self.assertGreaterEqual(len(m.cast['actor']), 49) self.assertGreaterEqual(len(m.cast['producer']), 4) self.assertGreaterEqual(len(m.cast['voice_director']), 1) self.assertGreaterEqual(len(m.cast['translator']), 1) self.assertGreaterEqual(len(m.cast['voice']), 4) self.assertGreaterEqual(len(m.cast['writer']), 3) self.assertGreaterEqual(len(m.cast['operator']), 1) self.assertGreaterEqual(len(m.cast['composer']), 1) self.assertGreaterEqual(len(m.cast['design']), 1) self.assertGreaterEqual(len(m.cast['editor']), 1) # with $ self.assertEqual(m.cast['actor'][0].person.id, 6245) self.assertEqual(m.cast['actor'][0].person.name, 'Джонни Депп') self.assertEqual(m.cast['actor'][0].person.name_en, 'Johnny Depp') self.assertEqual(m.cast['actor'][0].name, 'Jack Sparrow') # no mention self.assertEqual(m.cast['actor'][16].person.id, 24683) self.assertEqual(m.cast['actor'][16].name, 'Captain Hector Barbossa') # voice self.assertEqual(m.cast['actor'][63].person.id, 288908) self.assertEqual(m.cast['actor'][63].name, 'Parrot') self.assertEqual(m.cast['actor'][63].voice, True) # with $ and no name self.assertEqual(m.cast['producer'][0].name, '')
def get_movie_data_from_kinopoisk(self, id): self.debug('get_movie_data_from_kinopoisk', id) movie = None if id in self.movie_data_cache: movie = self.movie_data_cache[id] else: item = Movie(id=id) def replace_get(self): if self.instance.id: self.content = self.request.get_content( self.instance.get_url(self.source_name)) self._content = self.content self.parse() def replace_get_content(self, name): self._instance = self.get_source_instance(name, instance=self) self._instance.get = types.MethodType(replace_get, self._instance) self._instance.get() item.get_content = types.MethodType(replace_get_content, item) item.get_content('main_page') movie = [ None, item.title, item.title_en, item.year, ','.join(item.countries), ','.join(item.genres), item.runtime if isinstance(item.runtime, int) else 0, '', ', '.join([ person.name_en if len(person.name_en) > 0 else person.name for person in item.directors ]), ', '.join([ person.name_en if len(person.name_en) > 0 else person.name for person in item.screenwriters ]), ', '.join([ person.name_en if len(person.name_en) > 0 else person.name for person in item.actors ]), item.plot, self.posters[0] if len(item.posters) > 0 else None ] content_info = BeautifulSoup(item._instance._content, 'html.parser') table_info = content_info.find('table', {'class': re.compile(r'^info')}) if table_info: for tr in table_info.findAll('tr'): tds = tr.findAll('td') name = tds[0].text if name == 'рейтинг MPAA': movie[7] = tds[1].attrs['class'][0] break self.movie_data_cache[id] = movie self.signal_send_movie_to_editdialog.emit(movie) self.signal_set_loading.emit('movie', False) if movie[12] is None: self.poster_waiting_id = id self.signal_parse_poster.emit(id) else: self.set_poster_waiting_id(-1)
def get_kp_data(kp_id): m = Movie(id=kp_id) m.get_content('main_page') return clean_kp_film(m)
def test_movie_similar_movies(self): m = Movie(id=195524) # I Am Legend / Я – легенда m.get_content('similar_movies') self.assertTrue(m.similar_movies) # Check that the list is not empty
def test_movie_series_main_page_bigband(self): m_id = 306084 m = Movie(id=m_id) # The Big Bang Theory / Теория большого взрыва m.get_content('main_page') self.assertTrue(m.series) self.assertEqual(m_id, m.id)
def test_movie_series_main_page_kickass(self): m = Movie(id=419200) # Kick-Ass / Пипец m.get_content('main_page') self.assertFalse(m.series) self.assertRaises(ValueError, m.get_content, ('series',))
def get_film_by_id(film_id): movie = Movie(id=int(film_id)) movie.get_content("main_page") return movie
def messages(update, context): global constant # Используем переменную для хранения сообщения в нижнем регистре mes = update.message.text.lower() print(mes) # Так как название фильма не постоянная команда, когда мы узнаём, # что пользователь сейчас выберет фильм, мы меняем постоянную, а затем # понимаем, что непонятное словосочетание - фильм (или актёр). # При возвращении назад мы "обнуляем" постоянную. if mes == 'найти фильм по названию' and constant is None: update.message.reply_text( 'Введите название фильма на русском или английском языке. Информация о сериалах недоступна.', reply_markup=markup_back) constant = 'film_search' elif mes == 'найти информацию о знаменитости' and constant is None: update.message.reply_text( 'Введите имя знаменитости на русском или английском языке.', reply_markup=markup_back) constant = 'actor_search' elif mes == 'вернуться к началу': # Команда, которая позволяет вернуться к основной клавиатуре в любой момент использования бота. update.message.reply_text("Хорошо, вернёмся.", reply_markup=markup_main_keyboard) constant = None elif constant == 'film_search': movie_list = Movie.objects.search(mes) length = len(movie_list) if length >= 10: movie_list = Movie.objects.search(mes)[:10] # Список из всех фильмов результатов поиска, будет иметь длину 10 или меньше length = len( movie_list) # Чтобы постоянно не пересчитывать длину функции if length == 0: update.message.reply_text( 'Извините, фильма с таким названием не найдено. Вернёмся к началу.', reply_markup=markup_main_keyboard) constant = None elif length >= 1: movie = Movie( id=movie_list[0].id ) # Чтобы вызвать команду в следующей строке, нужно найти фильм по id link = 'www.kinopoisk.ru/film/{}/'.format(movie_list[0].id) movie.get_content( 'main_page' ) # Обязательная команда, чтобы получить информацию кроме года и названия update.message.reply_text( 'Полное название - {}.\n{}\nСлоган - {}\nГод - {}\nДлительность - {}\nРейтинг фильма - {}\n{}' '\nХотите увидеть список актёров?'.format( movie.title, movie.plot, movie.tagline, movie.year, movie.runtime, movie.rating, link), reply_markup=markup_yesornot) constant = ['cast', movie.actors] # Передаём список, чтобы суметь обратить к списку актёров, если он нам понадобится elif constant[0] == 'cast': res = '' x = constant[1] for el in x[:10]: res += '\n{}'.format(el) res = 'В фильме снимались:' + res update.message.reply_text(res, reply_markup=markup_main_keyboard) constant = None elif constant == 'actor_search': actor_list = Person.objects.search(mes) length = len(actor_list) if length >= 10: actor_list = Person.objects.search(mes)[:10] length = len(actor_list) if length == 0: update.message.reply_text( 'Извините, знаменитости с таким именем найти не удалось. Вернёмся к началу.', reply_markup=markup_main_keyboard) constant = None elif length >= 1: actor = Person(id=actor_list[0].id) link = 'www.kinopoisk.ru/name/{}/'.format(actor_list[0].id) actor.get_content('main_page') update.message.reply_text(( '{}, {} год рождения\n{}\nХотите увидеть фильмографию?'.format( actor.name, actor.year_birth, link)), reply_markup=markup_yesornot) constant = ['filmography', actor.career['actor']] elif constant[0] == 'filmography': res = '' x = constant[1] # Переменные, чтобы не использовать функцию len() много раз length_x = len(x) length_con = len(constant) # Так как у актёра может быть очень много фильмов и # их построчный вывод может занять долгое время и несколько страниц, # что окажется неудобным для пользователя, мы будем выводить по 10 фильмов за раз if length_con == 2: # Если мы выводим первую страницу фильмографии, длина константы будет равна двум, # так что мы будем выводить первые 10 (или все, если length_x <= 10) if length_x > 10: for el in x[:10]: res += '\n{}'.format(el.movie) else: for el in x: res += '\n{}'.format(el.movie) elif constant[2] + 10 < length_x: # Если невыведенных элементов в списке всё ещё больше 10, мы выводим только следующие 10 for el in x[constant[2]:constant[2] + 10]: res += '\n{}'.format(el.movie) else: # Если невыведенных элементов в списке осталось 10 или меньше, мы выводим последние элементы for el in x[constant[2]:length_x]: res += '\n{}'.format(el.movie) if length_con == 2: # Длина константы равна двум, если мы выводим первую страницу фильмографии. # В таком случае мы добавим в начало фразу "Вот фильмография:" res = 'Вот фильмография:' + res if length_x > 10: update.message.reply_text(res, reply_markup=markup_pages) constant = constant + [10] # Если в списке фильмов больше 10 кинокартин, мы выводим клавиатуру с предложением продолжить вывод # и добавляем третий элемент к константе - количество уже выведенных фильмов else: update.message.reply_text(res + '\n\nФильмография кончилась.', reply_markup=markup_main_keyboard) constant = None # Если в списке меньше 10 кинокартин, мы выводим основную клавиатуру и меняем константу на None elif constant[2] + 10 < length_x: update.message.reply_text(res, reply_markup=markup_pages) constant = constant[0:2] + [constant[2] + 10] # Если невыведенные элементы в списке ещё есть, мы изменяем последний элемент константы # и показываем клавиатуру с предложением продолжить вывод else: res += '\n\nФильмография кончилась.' update.message.reply_text(res, reply_markup=markup_main_keyboard) constant = None
from kinopoisk.movie import Movie movie = Movie(id=591914) movie.get_content('main_page') print("Yee - " + str(movie.title) + str(movie.title_en))
def test_movie_posters_page_source(self): m = Movie(id=51319) m.get_content('posters') self.assertGreaterEqual(len(m.posters), 34)
def test_movie_main_page_empty_actors(self): m = Movie(id=926005) m.get_content('main_page') self.assertEqual(m.actors, [])