示例#1
0
 def test_no_changed_signals_on_initial_created(self):
     cm1 = test_utils.mock_handler(signals.title_changed)
     cm2 = test_utils.mock_handler(signals.duration_changed)
     cm3 = test_utils.mock_handler(signals.language_changed)
     with cm1 as handler1, cm2 as handler2, cm3 as handler3:
         video = Video()
         video.primary_audio_language_code = 'en'
         video.title = 'foo'
         video.duration = 123
         video.save()
     assert_equal(handler1.call_count, 0)
     assert_equal(handler2.call_count, 0)
     assert_equal(handler3.call_count, 0)
示例#2
0
def save_obj_from_entry(response):
    """
    Takes response object and stores it into db
    """
    v = Video()
    v.title = response['snippet']['title']
    v.ytid = response['id']
    unique_slugify(v, v.title)
    v.published_on = isodate.parse_datetime(response['snippet']['publishedAt'])

    # get duration of video
    duration = response["contentDetails"]["duration"]
    v.duration = int(isodate.parse_duration(duration).total_seconds())

    # get description of video
    try:
        v.description = response['snippet']['description']
    except:
        pass

    # get category
    try:
        category_response = youtube_api.videoCategories().list(
            part="snippet", id=response['snippet']['categoryId']).execute()
        v.category = category_response.get("items", [])[0]['snippet']['title']
    except:
        pass

    # get thumbnail - "default"
    try:
        v.thumbnail = response['snippet']['thumbnails']['default']['url']
    except:
        pass

    # get view count
    try:
        v.views = int(response['statistics']['viewCount'])
    except:
        pass

    v.save()
    return v
def save_obj_from_entry(entry):
    """
    Takes entry(gdata) object and stores it into db
    """
    v = Video()
    v.title = entry.media.title.text
    v.ytid = getid(entry)
    unique_slugify(v, v.title)
    v.duration = int(entry.media.duration.seconds)
    v.description = entry.media.description.text
    v.published_on = get_date(entry.published.text)
    v.category = entry.media.category[0].text
    if entry.rating is not None:
        v.rating = float(entry.rating.average)
    if entry.media.thumbnail is not None:
        v.thumbnail = entry.media.thumbnail[0].url
    try:
        v.views = int(entry.statistics.view_count)
    except:
        v.views = 0
    v.save()
    return v
示例#4
0
    def _import_video(self, video_url, videoid, title, description, thumbnail, videosrt):
        videoid_match = VIDEOID_RE.search(videoid)
        videoid = videoid_match.group(1)
        video_type = YoutubeVideoType(
            'http://www.youtube.com/watch?v={0}'.format(videoid))
        try:
            video_url_obj = VideoUrl.objects.get(
                url=video_type.convert_to_video_url())
            video = video_url_obj.video
        except ObjectDoesNotExist:
            video_url_obj = None
            video = Video()
            video.youtube_videoid = videoid
        video.title = title
        video.description = description
        if video_type.entry.media.duration:
            video.duration = int(video_type.entry.media.duration.seconds)
        video.thumbnail = thumbnail
        video.save()
        Action.create_video_handler(video)

        if videosrt:
            self._import_srt(video, videosrt)
        else:
            SubtitleLanguage(video=video, language='en', is_original=True, is_forked=True).save()

        if not video_url_obj:
            video_url_obj = VideoUrl(
                videoid=videoid,
                url=video_type.convert_to_video_url(),
                type=video_type.abbreviation,
                original=True,
                primary=True,
                video=video)
            video_url_obj.save()

        self._save_alternate_url(video, video_url)
示例#5
0
def upload_video(request):
    if request.method == 'POST' and request.FILES['video_file']:
        video_file = request.FILES['video_file']

        user_id = request.user

        title = request.POST['title']
        desc = request.POST['description']
        tags = request.POST['tags']
        category = request.POST['category']

        cat = VideoCategory.objects.get(id=category)
        vid = Video(video_id=1,
                    uid=user_id,
                    title=title,
                    description=desc,
                    tags=tags,
                    category=cat,
                    videofile='video_file',
                    thumb='img_output_path')
        vid.save()
        video_id = vid.pk

        vid = Video.objects.get(id=video_id)
        img_output_path = '%s/thumbnails/%s' % (settings.MEDIA_ROOT, video_id)
        img_output_path_url = '%sthumbnails/%s' % (settings.MEDIA_URL,
                                                   video_id)
        vid.video_id = video_id
        vid.videofile = video_file
        vid.save()

        duration = get_video_length(vid.videofile.path)
        pertime = duration / 20
        ff = FFmpeg(inputs={vid.videofile.path: None},
                    outputs={
                        img_output_path + '_%d.jpg':
                        ['-vf', 'fps=1/' + str(pertime), '-vframes', '20']
                    })
        ff.run()

        vid.thumb = img_output_path + '_1.jpg'
        vid.thumb_url = img_output_path_url + '_1.jpg'
        vid.duration = duration
        vid.save()

        # Proses Tagging
        list_tags = tags.split(',')
        list_tags = [i.strip().lower() for i in list_tags]

        for tg in list_tags:
            if VideoTag.objects.filter(tag=tg).exists():
                current_tag = VideoTag.objects.filter(tag=tg).first()
                current_tag.videos.add(vid)
            else:
                create_tag = VideoTag(uid=user_id, tag=tg)
                create_tag.save()
                create_tag.videos.add(vid)

        vc_list = VideoCategory.objects.all()
        context = {'vc_list': vc_list}

        #return render(request, 'upload-video.html', context)
    else:
        vc_list = VideoCategory.objects.all()
        form = VideoForm()
        context = {'form': form, 'vc_list': vc_list}
        #return render(request, 'upload-video.html', context)
    return render(request, 'upload-video.html', context)