Beispiel #1
0
def _create_videos(video_data, users):
    videos = []

    for x in video_data:
        shuffle(users)
        video = Video(title=x['title'])
        video.save()
        if len(users) > 0:
            video.user = users[0]
        url = x['url'] + "&blah=%s" % time.time()
        vt = video_type_registrar.video_type_for_url(url)
        if vt is None:
            continue
        video_url, created = VideoUrl.objects.get_or_create(
            video=video, type=vt.abbreviation, url=url)
        video_url.original = True
        video_url.primary = True
        video_url.video = video
        video_url.save()
        # now we loop over languages:
        _add_langs_to_video(video, x['langs'])
        if len(x['langs']) > 0:
            video.is_subtitled = True
        video.save()
        videos.append(video)

    return videos
Beispiel #2
0
    def run(self):
        try:
            api_key = self.get_working_api_key()
            if not api_key:
                raise Exception('Usable Api Key currently unavailable!')

            response = self.get_response(api_key)
            status_code = response.status_code
            if status_code == 200:
                data = response.json()
                videos_map = {}
                for item in data.get('items', []):
                    try:
                        snippet = item['snippet']
                        video_id = item['id']['videoId']
                        published_at = parse(snippet['publishedAt'])
                        obj = Video(**{
                            'video_id': video_id,
                            'channel_id': snippet['channelId'],
                            'title': snippet['title'],
                            'description': snippet['description'],
                            'published_at': published_at,
                            'thumbnail_default': snippet['thumbnails']['default']['url'],
                            'thumbnail_medium': snippet['thumbnails']['medium']['url'],
                            'thumbnail_high': snippet['thumbnails']['high']['url'],
                        })
                        videos_map[video_id] = obj
                    except KeyError as e:
                        logger.info('Skipping an item due to KeyError({})'.format(e))

                video_ids = list(videos_map.keys())
                existing_videos = list(Video.objects.filter(video_id__in=video_ids).values_list('video_id', flat=True))
                if existing_videos:
                    logger.error('Found {} existing videos.'.format(len(existing_videos)))
                for video_id in existing_videos:
                    del videos_map[video_id]

                if videos_map:
                    videos = list(videos_map.values())
                    logger.info('Inserting {} new videos.'.format(len(videos)))
                    Video.objects.bulk_create(videos)
            elif status_code == 403:
                logger.error('[Response StatusCode: {}] {}'.format(status_code, response.json()))
                error_data = response.json()
                for error in error_data['error']['errors']:
                    if error['reason'] == 'quotaExceeded':
                        self.get_working_api_key(api_key)
            else:
                logger.error('[Response StatusCode: {}] {}'.format(status_code, response.json()))
        except Exception as e:
            logger.error('[Unhandled Exception] {}'.format(e))