Exemplo n.º 1
0
def fetch_subs_youtube(video_url):
    video_id = video_url.videoid
    channel_id = video_url.owner_username
    if not channel_id:
        logger.warn("fetch_subs() no username: %s", video_url.pk)
        return
    try:
        account = YouTubeAccount.objects.get(channel_id=channel_id)
    except YouTubeAccount.DoesNotExist:
        logger.warn("fetch_subs() no youtube account for %s", channel_id)
        return

    existing_langs = set(
        l.language_code
        for l in video_url.video.newsubtitlelanguage_set.having_versions())

    access_token = google.get_new_access_token(account.oauth_refresh_token)
    captions_list = google.captions_list(access_token, video_id)
    for caption_id, youtube_language_code, caption_name in captions_list:
        language_code = (LanguageCode(youtube_language_code,
                                      'youtube').encode('unisubs'))
        if language_code not in existing_langs:
            dfxp = google.captions_download(access_token, caption_id)
            pipeline.add_subtitles(video_url.video,
                                   language_code,
                                   dfxp,
                                   note="From youtube",
                                   complete=True,
                                   origin=ORIGIN_IMPORTED)
Exemplo n.º 2
0
def fetch_subs_youtube(video_url):
    video_id = video_url.videoid
    channel_id = video_url.owner_username
    if not channel_id:
        logger.warn("fetch_subs() no username: %s", video_url.pk)
        return
    try:
        account = YouTubeAccount.objects.get(channel_id=channel_id)
    except YouTubeAccount.DoesNotExist:
        logger.warn("fetch_subs() no youtube account for %s", channel_id)
        return

    existing_langs = set(
        l.language_code for l in
        video_url.video.newsubtitlelanguage_set.having_versions()
    )

    access_token = google.get_new_access_token(account.oauth_refresh_token)
    captions_list = google.captions_list(access_token, video_id)
    versions = []
    for caption_id, language_code, caption_name in captions_list:
        language_code = convert_language_code(language_code)
        if language_code and language_code not in existing_langs:
            dfxp = google.captions_download(access_token, caption_id)
            try:
                version = pipeline.add_subtitles(video_url.video, language_code, dfxp,
                                       note="From youtube", complete=True,
                                       origin=ORIGIN_IMPORTED)
                versions.append(version)
            except Exception, e:
                logger.error("Exception while importing subtitles " + str(e))
Exemplo n.º 3
0
def fetch_subs_youtube(video_url, user, team):
    video_id = video_url.videoid
    channel_id = video_url.owner_username
    account = find_youtube_account(
        video_id, lookup_youtube_accounts(video_url, user, team))
    if account is None:
        logger.warn("fetch_subs() no available credentials.")
        return
    existing_langs = set(
        l.language_code
        for l in video_url.video.newsubtitlelanguage_set.having_versions())
    access_token = google.get_new_access_token(account.oauth_refresh_token)
    captions_list = google.captions_list(access_token, video_id)
    versions = []
    for caption_id, language_code, caption_name in captions_list:
        language_code = convert_language_code(language_code)
        if language_code and language_code not in existing_langs:
            dfxp = google.captions_download(access_token, caption_id)
            try:
                version = pipeline.add_subtitles(video_url.video,
                                                 language_code,
                                                 dfxp,
                                                 note="From youtube",
                                                 complete=True,
                                                 origin=ORIGIN_IMPORTED)
                versions.append(version)
            except Exception, e:
                logger.error("Exception while importing subtitles " + str(e))
Exemplo n.º 4
0
    def do_update_subtitles(self, video_url, language, version):
        """Do the work needed to update subtitles.

        Subclasses must implement this method.
        """
        access_token = google.get_new_access_token(self.oauth_refresh_token)
        syncing.youtube.update_subtitles(video_url.videoid, access_token,
                                         version, self.enable_language_mapping)
Exemplo n.º 5
0
def add_credit_to_video_url(video_url, account):
    """Add credit to a video on an external site

    This method checks if we have an account linked to the site and if so, we
    add credit to the description.  It will only add credit once per video
    URL.
    """
    creditedvideourl, created = models.CreditedVideoUrl.objects.get_or_create(
        video_url=video_url)
    if not created:
        return
    access_token = google.get_new_access_token(account.oauth_refresh_token)
    video_id = video_url.videoid
    credit_text = calc_credit_text(video_url.video)
    current_description = google.get_video_info(video_id).description
    if credit_text not in current_description:
        new_description = '%s\n\n%s' % (current_description, credit_text)
        google.update_video_description(video_id, access_token,
                                        new_description)
Exemplo n.º 6
0
 def test_get_new_access_token(self):
     mocker = RequestsMocker()
     mocker.expect_request(
         'post', "https://accounts.google.com/o/oauth2/token", data={
             'client_id': settings.GOOGLE_CLIENT_ID,
             'client_secret': settings.GOOGLE_CLIENT_SECRET,
             'grant_type': 'refresh_token',
             'refresh_token': 'test-refresh-token',
         }, headers={
             "Content-Type": "application/x-www-form-urlencoded"
         }, body=json.dumps({
             'access_token': 'test-access-token',
         }),
     )
     google.get_new_access_token.run_original_for_test()
     with mocker:
         access_token = google.get_new_access_token(
             'test-refresh-token')
     self.assertEqual(access_token, 'test-access-token')
Exemplo n.º 7
0
 def do_delete_subtitles(self, video_url, language):
     access_token = google.get_new_access_token(self.oauth_refresh_token)
     syncing.youtube.delete_subtitles(video_url.videoid, access_token,
                                      language.language_code,
                                      self.enable_language_mapping)