diff --git a/cms/djangoapps/contentstore/views/transcripts_ajax.py b/cms/djangoapps/contentstore/views/transcripts_ajax.py index d30e2a29c4..193e26192f 100644 --- a/cms/djangoapps/contentstore/views/transcripts_ajax.py +++ b/cms/djangoapps/contentstore/views/transcripts_ajax.py @@ -262,9 +262,9 @@ def check_transcripts(request): log.debug("Can't find transcripts in storage for youtube id: %s", youtube_id) # youtube server - youtube_api = copy.deepcopy(settings.YOUTUBE_API) - youtube_api['params']['v'] = youtube_id - youtube_response = requests.get(youtube_api['url'], params=youtube_api['params']) + youtube_text_api = copy.deepcopy(settings.YOUTUBE['TEXT_API']) + youtube_text_api['params']['v'] = youtube_id + youtube_response = requests.get('http://' + youtube_text_api['url'], params=youtube_text_api['params']) if youtube_response.status_code == 200 and youtube_response.text: transcripts_presence['youtube_server'] = True diff --git a/cms/envs/acceptance.py b/cms/envs/acceptance.py index fda0125fa1..63fa464977 100644 --- a/cms/envs/acceptance.py +++ b/cms/envs/acceptance.py @@ -119,5 +119,6 @@ except ImportError: pass # Point the URL used to test YouTube availability to our stub YouTube server -YOUTUBE_TEST_URL = "http://127.0.0.1:{0}/test_youtube/".format(YOUTUBE_PORT) -YOUTUBE_API['url'] = "http://127.0.0.1:{0}/test_transcripts_youtube/".format(YOUTUBE_PORT) +YOUTUBE['API'] = 'youtube.com/iframe_api' +YOUTUBE['TEST_URL'] = "127.0.0.1:{0}/test_youtube/".format(YOUTUBE_PORT) +YOUTUBE['TEXT_API']['url'] = "127.0.0.1:{0}/test_transcripts_youtube/".format(YOUTUBE_PORT) diff --git a/cms/envs/common.py b/cms/envs/common.py index 3b6adcb9e2..0ae3d89fa1 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -425,9 +425,23 @@ CELERY_QUEUES = { ############################## Video ########################################## -# URL to test YouTube availability -YOUTUBE_TEST_URL = 'https://gdata.youtube.com/feeds/api/videos/' +YOUTUBE = { + # YouTube JavaScript API + 'API': 'www.youtube.com/iframe_api', + # URL to test YouTube availability + 'TEST_URL': 'gdata.youtube.com/feeds/api/videos/', + + # Current youtube api for requesting transcripts. + # For example: http://video.google.com/timedtext?lang=en&v=j_jEn79vS3g. + 'TEXT_API': { + 'url': 'video.google.com/timedtext', + 'params': { + 'lang': 'en', + 'v': 'set_youtube_id_of_11_symbols_here', + }, + }, +} ############################ APPS ##################################### @@ -529,14 +543,6 @@ PASSWORD_DICTIONARY = [] TRACKING_IGNORE_URL_PATTERNS = [r'^/event', r'^/login', r'^/heartbeat'] TRACKING_ENABLED = True -# Current youtube api for requesting transcripts. -# for example: http://video.google.com/timedtext?lang=en&v=j_jEn79vS3g. -YOUTUBE_API = { - 'url': "http://video.google.com/timedtext", - 'params': {'lang': 'en', 'v': 'set_youtube_id_of_11_symbols_here'} -} - - ##### ACCOUNT LOCKOUT DEFAULT PARAMETERS ##### MAX_FAILED_LOGIN_ATTEMPTS_ALLOWED = 5 MAX_FAILED_LOGIN_ATTEMPTS_LOCKOUT_PERIOD_SECS = 15 * 60 diff --git a/common/lib/xmodule/xmodule/js/fixtures/video.html b/common/lib/xmodule/xmodule/js/fixtures/video.html index e7144dd2c0..c61e79d8c4 100644 --- a/common/lib/xmodule/xmodule/js/fixtures/video.html +++ b/common/lib/xmodule/xmodule/js/fixtures/video.html @@ -17,7 +17,8 @@ data-transcript-available-translations-url="/transcript/available_translations" data-autoplay="False" data-yt-test-timeout="1500" - data-yt-test-url="https://gdata.youtube.com/feeds/api/videos/" + data-yt-api-url="www.youtube.com/iframe_api" + data-yt-test-url="gdata.youtube.com/feeds/api/videos/" data-autohide-html5="True" >
diff --git a/common/lib/xmodule/xmodule/js/fixtures/video_all.html b/common/lib/xmodule/xmodule/js/fixtures/video_all.html index 91773bb1ec..f0228b44a2 100644 --- a/common/lib/xmodule/xmodule/js/fixtures/video_all.html +++ b/common/lib/xmodule/xmodule/js/fixtures/video_all.html @@ -20,7 +20,8 @@ data-ogg-source="xmodule/include/fixtures/test.ogv" data-autoplay="False" data-yt-test-timeout="1500" - data-yt-test-url="https://gdata.youtube.com/feeds/api/videos/" + data-yt-api-url="www.youtube.com/iframe_api" + data-yt-test-url="gdata.youtube.com/feeds/api/videos/" data-autohide-html5="True" > diff --git a/common/lib/xmodule/xmodule/js/fixtures/video_html5.html b/common/lib/xmodule/xmodule/js/fixtures/video_html5.html index c330a0fb8f..b32af79cf2 100644 --- a/common/lib/xmodule/xmodule/js/fixtures/video_html5.html +++ b/common/lib/xmodule/xmodule/js/fixtures/video_html5.html @@ -20,7 +20,8 @@ data-ogg-source="xmodule/include/fixtures/test.ogv" data-autoplay="False" data-yt-test-timeout="1500" - data-yt-test-url="https://gdata.youtube.com/feeds/api/videos/" + data-yt-api-url="www.youtube.com/iframe_api" + data-yt-test-url="gdata.youtube.com/feeds/api/videos/" data-autohide-html5="True" > diff --git a/common/lib/xmodule/xmodule/js/fixtures/video_no_captions.html b/common/lib/xmodule/xmodule/js/fixtures/video_no_captions.html index b3637f49c8..a34df976bf 100644 --- a/common/lib/xmodule/xmodule/js/fixtures/video_no_captions.html +++ b/common/lib/xmodule/xmodule/js/fixtures/video_no_captions.html @@ -17,7 +17,8 @@ data-transcript-available-translations-url="/transcript/available_translations" data-autoplay="False" data-yt-test-timeout="1500" - data-yt-test-url="https://gdata.youtube.com/feeds/api/videos/" + data-yt-api-url="www.youtube.com/iframe_api" + data-yt-test-url="gdata.youtube.com/feeds/api/videos/" data-autohide-html5="True" > diff --git a/common/lib/xmodule/xmodule/js/fixtures/video_yt_multiple.html b/common/lib/xmodule/xmodule/js/fixtures/video_yt_multiple.html index 2b76a64a5b..83dfdc9f0e 100644 --- a/common/lib/xmodule/xmodule/js/fixtures/video_yt_multiple.html +++ b/common/lib/xmodule/xmodule/js/fixtures/video_yt_multiple.html @@ -17,7 +17,8 @@ data-transcript-available-translations-url="/transcript/available_translations" data-autoplay="False" data-yt-test-timeout="1500" - data-yt-test-url="https://gdata.youtube.com/feeds/api/videos/" + data-yt-api-url="www.youtube.com/iframe_api" + data-yt-test-url="gdata.youtube.com/feeds/api/videos/" data-autohide-html5="True" > diff --git a/common/lib/xmodule/xmodule/js/src/video/01_initialize.js b/common/lib/xmodule/xmodule/js/src/video/01_initialize.js index 0659566c40..09d95e7891 100644 --- a/common/lib/xmodule/xmodule/js/src/video/01_initialize.js +++ b/common/lib/xmodule/xmodule/js/src/video/01_initialize.js @@ -156,7 +156,7 @@ function (VideoPlayer, VideoStorage) { _reportToServer(state, state.youtubeApiAvailable); }, state.config.ytTestTimeout); - $.getScript(document.location.protocol + '//www.youtube.com/iframe_api'); + $.getScript(document.location.protocol + '//' + state.config.ytApiUrl); } function _reportToServer(state, youtubeIsAvailable) { @@ -704,7 +704,7 @@ function (VideoPlayer, VideoStorage) { } successHandler = ($.isFunction(callback)) ? callback : null; xhr = $.ajax({ - url: this.config.ytTestUrl + url + '?v=2&alt=jsonc', + url: document.location.protocol + '//' + this.config.ytTestUrl + url + '?v=2&alt=jsonc', dataType: 'jsonp', timeout: this.config.ytTestTimeout, success: successHandler diff --git a/common/lib/xmodule/xmodule/video_module/transcripts_utils.py b/common/lib/xmodule/xmodule/video_module/transcripts_utils.py index e9ffa28d50..205f6134cb 100644 --- a/common/lib/xmodule/xmodule/video_module/transcripts_utils.py +++ b/common/lib/xmodule/xmodule/video_module/transcripts_utils.py @@ -97,9 +97,9 @@ def get_transcripts_from_youtube(youtube_id, settings, i18n): utf8_parser = etree.XMLParser(encoding='utf-8') - youtube_api = copy.deepcopy(settings.YOUTUBE_API) - youtube_api['params']['v'] = youtube_id - data = requests.get(youtube_api['url'], params=youtube_api['params']) + youtube_text_api = copy.deepcopy(settings.YOUTUBE['TEXT_API']) + youtube_text_api['params']['v'] = youtube_id + data = requests.get('http://' + youtube_text_api['url'], params=youtube_text_api['params']) if data.status_code != 200 or not data.text: msg = _("Can't receive transcripts from Youtube for {youtube_id}. Status code: {status_code}.").format( @@ -522,4 +522,3 @@ class Transcript(object): return StaticContent.compute_location( location.org, location.course, filename ) - diff --git a/common/lib/xmodule/xmodule/video_module/video_module.py b/common/lib/xmodule/xmodule/video_module/video_module.py index e9bbeb84d8..8a252b84bb 100644 --- a/common/lib/xmodule/xmodule/video_module/video_module.py +++ b/common/lib/xmodule/xmodule/video_module/video_module.py @@ -325,7 +325,8 @@ class VideoModule(VideoFields, XModule): # TODO: Later on the value 1500 should be taken from some global # configuration setting field. 'yt_test_timeout': 1500, - 'yt_test_url': settings.YOUTUBE_TEST_URL, + 'yt_api_url': settings.YOUTUBE['API'], + 'yt_test_url': settings.YOUTUBE['TEST_URL'], 'transcript_download_format': transcript_download_format, 'transcript_download_formats_list': self.descriptor.fields['transcript_download_format'].values, 'transcript_language': transcript_language, diff --git a/lms/djangoapps/courseware/tests/test_video_mongo.py b/lms/djangoapps/courseware/tests/test_video_mongo.py index ecd8ff84c6..7d25fdc177 100644 --- a/lms/djangoapps/courseware/tests/test_video_mongo.py +++ b/lms/djangoapps/courseware/tests/test_video_mongo.py @@ -39,7 +39,8 @@ class TestVideoYouTube(TestVideo): 'track': None, 'youtube_streams': create_youtube_string(self.item_descriptor), 'yt_test_timeout': 1500, - 'yt_test_url': 'https://gdata.youtube.com/feeds/api/videos/', + 'yt_api_url': 'www.youtube.com/iframe_api', + 'yt_test_url': 'gdata.youtube.com/feeds/api/videos/', 'transcript_download_format': 'srt', 'transcript_download_formats_list': [{'display_name': 'SubRip (.srt) file', 'value': 'srt'}, {'display_name': 'Text (.txt) file', 'value': 'txt'}], 'transcript_language': u'en', @@ -104,7 +105,8 @@ class TestVideoNonYouTube(TestVideo): 'youtube_streams': '1.00:OEoXaMPEzfM', 'autoplay': settings.FEATURES.get('AUTOPLAY_VIDEOS', True), 'yt_test_timeout': 1500, - 'yt_test_url': 'https://gdata.youtube.com/feeds/api/videos/', + 'yt_api_url': 'www.youtube.com/iframe_api', + 'yt_test_url': 'gdata.youtube.com/feeds/api/videos/', 'transcript_download_format': 'srt', 'transcript_download_formats_list': [{'display_name': 'SubRip (.srt) file', 'value': 'srt'}, {'display_name': 'Text (.txt) file', 'value': 'txt'}], 'transcript_language': u'en', @@ -206,7 +208,8 @@ class TestGetHtmlMethod(BaseTestXmodule): 'youtube_streams': '1.00:OEoXaMPEzfM', 'autoplay': settings.FEATURES.get('AUTOPLAY_VIDEOS', True), 'yt_test_timeout': 1500, - 'yt_test_url': 'https://gdata.youtube.com/feeds/api/videos/', + 'yt_api_url': 'www.youtube.com/iframe_api', + 'yt_test_url': 'gdata.youtube.com/feeds/api/videos/', 'transcript_download_formats_list': [{'display_name': 'SubRip (.srt) file', 'value': 'srt'}, {'display_name': 'Text (.txt) file', 'value': 'txt'}], } @@ -323,7 +326,8 @@ class TestGetHtmlMethod(BaseTestXmodule): 'youtube_streams': '1.00:OEoXaMPEzfM', 'autoplay': settings.FEATURES.get('AUTOPLAY_VIDEOS', True), 'yt_test_timeout': 1500, - 'yt_test_url': 'https://gdata.youtube.com/feeds/api/videos/', + 'yt_api_url': 'www.youtube.com/iframe_api', + 'yt_test_url': 'gdata.youtube.com/feeds/api/videos/', 'transcript_download_format': 'srt', 'transcript_download_formats_list': [{'display_name': 'SubRip (.srt) file', 'value': 'srt'}, {'display_name': 'Text (.txt) file', 'value': 'txt'}], 'transcript_language': u'en', diff --git a/lms/envs/acceptance.py b/lms/envs/acceptance.py index fe483836bb..8582ced3e1 100644 --- a/lms/envs/acceptance.py +++ b/lms/envs/acceptance.py @@ -176,4 +176,6 @@ XQUEUE_INTERFACE = { } # Point the URL used to test YouTube availability to our stub YouTube server -YOUTUBE_TEST_URL = "http://127.0.0.1:{0}/test_youtube/".format(YOUTUBE_PORT) +YOUTUBE['API'] = 'youtube.com/iframe_api' +YOUTUBE['TEST_URL'] = "127.0.0.1:{0}/test_youtube/".format(YOUTUBE_PORT) +YOUTUBE['TEXT_API']['url'] = "127.0.0.1:{0}/test_transcripts_youtube/".format(YOUTUBE_PORT) diff --git a/lms/envs/common.py b/lms/envs/common.py index 2472e49942..df79e012e9 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -1066,9 +1066,23 @@ BULK_EMAIL_RETRY_DELAY_BETWEEN_SENDS = 0.02 ############################## Video ########################################## -# URL to test YouTube availability -YOUTUBE_TEST_URL = 'https://gdata.youtube.com/feeds/api/videos/' +YOUTUBE = { + # YouTube JavaScript API + 'API': 'www.youtube.com/iframe_api', + # URL to test YouTube availability + 'TEST_URL': 'gdata.youtube.com/feeds/api/videos/', + + # Current youtube api for requesting transcripts. + # For example: http://video.google.com/timedtext?lang=en&v=j_jEn79vS3g. + 'TEXT_API': { + 'url': 'video.google.com/timedtext', + 'params': { + 'lang': 'en', + 'v': 'set_youtube_id_of_11_symbols_here', + }, + }, +} ################################### APPS ###################################### INSTALLED_APPS = ( diff --git a/lms/templates/video.html b/lms/templates/video.html index 1835b69eac..49cb3365ff 100644 --- a/lms/templates/video.html +++ b/lms/templates/video.html @@ -29,6 +29,7 @@ data-transcript-languages='${transcript_languages}' data-autoplay="${autoplay}" data-yt-test-timeout="${yt_test_timeout}" + data-yt-api-url="${yt_api_url}" data-yt-test-url="${yt_test_url}" data-transcript-translation-url="${transcript_translation_url}" data-transcript-available-translations-url="${transcript_available_translations_url}"