diff --git a/youtube_dlc/extractor/kakao.py b/youtube_dlc/extractor/kakao.py index 32935bb283..fefd8a2155 100644 --- a/youtube_dlc/extractor/kakao.py +++ b/youtube_dlc/extractor/kakao.py @@ -8,13 +8,13 @@ from ..utils import ( int_or_none, strip_or_none, unified_timestamp, - update_url_query, ) class KakaoIE(InfoExtractor): _VALID_URL = r'https?://(?:play-)?tv\.kakao\.com/(?:channel/\d+|embed/player)/cliplink/(?P\d+|[^?#&]+@my)' - _API_BASE_TMPL = 'http://tv.kakao.com/api/v1/ft/cliplinks/%s/' + _API_BASE_TMPL = 'http://tv.kakao.com/api/v1/ft/playmeta/cliplink/%s/' + _CDN_API = 'https://tv.kakao.com/katz/v1/ft/cliplink/%s/readyNplay?' _TESTS = [{ 'url': 'http://tv.kakao.com/channel/2671005/cliplink/301965083', @@ -45,18 +45,8 @@ class KakaoIE(InfoExtractor): def _real_extract(self, url): video_id = self._match_id(url) - display_id = video_id.rstrip('@my') api_base = self._API_BASE_TMPL % video_id - - player_header = { - 'Referer': update_url_query( - 'http://tv.kakao.com/embed/player/cliplink/%s' % video_id, { - 'service': 'kakao_tv', - 'autoplay': '1', - 'profile': 'HIGH', - 'wmode': 'transparent', - }) - } + cdn_api_base = self._CDN_API % video_id query = { 'player': 'monet_html5', @@ -73,17 +63,14 @@ class KakaoIE(InfoExtractor): 'videoOutputList', 'width', 'height', 'kbps', 'profile', 'label']) } - impress = self._download_json( - api_base + 'impress', display_id, 'Downloading video info', - query=query, headers=player_header) + api_json = self._download_json( + api_base, video_id, 'Downloading video info') - clip_link = impress['clipLink'] + clip_link = api_json['clipLink'] clip = clip_link['clip'] title = clip.get('title') or clip_link.get('displayTitle') - query['tid'] = impress.get('tid', '') - formats = [] for fmt in clip.get('videoOutputList', []): try: @@ -94,15 +81,17 @@ class KakaoIE(InfoExtractor): 'profile': profile_name, 'fields': '-*,url', }) + fmt_url_json = self._download_json( - api_base + 'raw/videolocation', display_id, + cdn_api_base, video_id, 'Downloading video URL for profile %s' % profile_name, - query=query, headers=player_header, fatal=False) + query=query, fatal=False) if fmt_url_json is None: continue - fmt_url = fmt_url_json['url'] + fmt_vidLocation = fmt_url_json['videoLocation'] + fmt_url = fmt_vidLocation['url'] formats.append({ 'url': fmt_url, 'format_id': profile_name, @@ -131,7 +120,7 @@ class KakaoIE(InfoExtractor): }) return { - 'id': display_id, + 'id': video_id, 'title': title, 'description': strip_or_none(clip.get('description')), 'uploader': clip_link.get('channel', {}).get('name'),