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)
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))
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))
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)
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)
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')
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)