From 4cd3053c4f27223a162473bb05724b2ec7454466 Mon Sep 17 00:00:00 2001
From: Unknown <blackjack4494@web.de>
Date: Sun, 13 Sep 2020 12:31:36 +0200
Subject: [PATCH] [kakao] new apis

there are also ageLimit and GeoBlock attributes provided by api_json if needed
---
 youtube_dlc/extractor/kakao.py | 35 ++++++++++++----------------------
 1 file changed, 12 insertions(+), 23 deletions(-)

diff --git a/youtube_dlc/extractor/kakao.py b/youtube_dlc/extractor/kakao.py
index 32935bb28..fefd8a215 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<id>\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'),