Exemplo n.º 1
0
    def extract(self, start_date=None, end_date=None):
        discover = tmdb.Discover()

        event_params = {
            'include_adult': False,
            'include_video': False,
            'sort_by': 'release_date.asc',
            'with_original_language': 'en',
            'vote_average.gte': 7,
            'vote_count.gte': 1000
        }

        event_params.update(
            self.parse_time_args(start_date=start_date, end_date=end_date))

        print(json.dumps(event_params, indent=4))

        sentinel = True
        while sentinel:
            raw_events = discover.movie(**event_params)

            for i, event in enumerate(raw_events['results']):
                connector_event_id = str(event['id'])

                row_connector_event = ConnectorEvent.query.filter(
                    and_(
                        ConnectorEvent.connector_event_id ==
                        connector_event_id,
                        ConnectorEvent.connector_type == self.TYPE)).first()

                if not row_connector_event:
                    row_connector_event = ConnectorEvent(
                        connector_event_id=connector_event_id,
                        connector_type=self.TYPE,
                        data=event)
                    db_session.merge(row_connector_event)
                    db_session.commit()

                event_name = row_connector_event.data['title']
                event_description = row_connector_event.data['overview']
                event_short_name = row_connector_event.data['title']
                event_img_url = 'https://image.tmdb.org/t/p/w342{}'.format(
                    row_connector_event.data['poster_path'])
                event_backdrop_url = 'https://image.tmdb.org/t/p/original{}'.format(
                    row_connector_event.data['backdrop_path'])

                event_start_time = datetime.datetime.strptime(
                    row_connector_event.data['release_date'], "%Y-%m-%d")
                event_end_time = event_start_time + datetime.timedelta(
                    days=180)

                genres = self.genres_by_ids(
                    row_connector_event.data['genre_ids'])

                if row_connector_event.event_id:
                    row_event = Event.query.filter(
                        Event.event_id ==
                        row_connector_event.event_id).first()
                    row_event.name = event_name
                    row_event.description = event_description
                    row_event.short_name = event_name
                    row_event.img_url = event_img_url
                    row_event.backdrop_url = event_backdrop_url
                    row_event.start_time = event_start_time
                    row_event.end_time = event_end_time
                    db_session.merge(row_event)
                    db_session.commit()

                    row_event.remove_all_tags()
                else:
                    row_event = Event(name=event_name,
                                      description=event_description,
                                      short_name=event_short_name,
                                      img_url=event_img_url,
                                      backdrop_url=event_backdrop_url,
                                      start_time=event_start_time,
                                      end_time=event_end_time)
                    row_event.primary_type = Tag.TVM
                    db_session.add(row_event)
                    db_session.commit()

                    row_connector_event.event_id = row_event.event_id
                    db_session.merge(row_connector_event)
                    db_session.commit()

                for genre in genres:
                    row_event.add_tag(genre, Tag.TVM)

                row_event.update_meta(self.TYPE, event)
                db_session.merge(row_event)
                db_session.commit()

                yield row_event, "{} {}".format(row_event.name, genres)

            del raw_events['results']

            sentinel = raw_events['page'] < raw_events['total_pages']
            if sentinel:
                event_params['page'] = raw_events['page'] + 1