Пример #1
0
    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()
Пример #2
0
    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, ['Роб Барнетт', 'Райан Браун', 'Джессика Брунетто'])
Пример #3
0
    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)
Пример #4
0
    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, ['Ханс Циммер'])
Пример #5
0
    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')
Пример #6
0
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
Пример #7
0
    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, ['Иззи Диаз', 'Роб Дивейни', 'Ти Джонс', 'Анас Веллман', 'Майк Фигуроа',
                                           'Яналь Кассай', 'Дхиая Калиль', 'Кел О’Нил', 'Дэниэл Стюарт-Шерман',
                                           'Патрик Кэрролл'])
Пример #8
0
    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, ['США'])
Пример #9
0
    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, ['Майкл Кан'])
Пример #10
0
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
Пример #11
0
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}')
Пример #12
0
    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, ['Адам Герстл', 'Марк Ливолси'])
Пример #13
0
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)
Пример #14
0
    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, ['Стивен Е. Ривкин', 'Артур Шмидт', 'Крэйг Вуд'])
Пример #15
0
    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'])
Пример #16
0
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
Пример #17
0
    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, '')
Пример #18
0
    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)
Пример #19
0
def get_kp_data(kp_id):
    m = Movie(id=kp_id)
    m.get_content('main_page')
    return clean_kp_film(m)
Пример #20
0
    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
Пример #21
0
 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)
Пример #22
0
 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',))
Пример #23
0
def get_film_by_id(film_id):
    movie = Movie(id=int(film_id))
    movie.get_content("main_page")
    return movie
Пример #24
0
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
Пример #25
0
from kinopoisk.movie import Movie

movie = Movie(id=591914)
movie.get_content('main_page')

print("Yee - " + str(movie.title) + str(movie.title_en))
Пример #26
0
 def test_movie_posters_page_source(self):
     m = Movie(id=51319)
     m.get_content('posters')
     self.assertGreaterEqual(len(m.posters), 34)
Пример #27
0
 def test_movie_main_page_empty_actors(self):
     m = Movie(id=926005)
     m.get_content('main_page')
     self.assertEqual(m.actors, [])