diff options
author | James Taylor <user234683@users.noreply.github.com> | 2021-03-02 18:54:22 -0800 |
---|---|---|
committer | Jesús <heckyel@hyperbola.info> | 2021-03-03 10:40:02 -0500 |
commit | 2df42389246bd731e04bd2e2472a05d27917b981 (patch) | |
tree | 92c683efee4537875be547fad044eab5c8d2e1e0 | |
parent | c45f60d3f5914d7924e9940c504bd3443f2eb8de (diff) | |
download | yt-local-2df42389246bd731e04bd2e2472a05d27917b981.tar.lz yt-local-2df42389246bd731e04bd2e2472a05d27917b981.tar.xz yt-local-2df42389246bd731e04bd2e2472a05d27917b981.zip |
Use new channel api endpoint now that browse_ajax is disabled
Fixes channel pages > 1
Signed-off-by: Jesús <heckyel@hyperbola.info>
-rw-r--r-- | youtube/channel.py | 25 | ||||
-rw-r--r-- | youtube/yt_data_extract/common.py | 5 |
2 files changed, 26 insertions, 4 deletions
diff --git a/youtube/channel.py b/youtube/channel.py index 64b6612..d60f1d3 100644 --- a/youtube/channel.py +++ b/youtube/channel.py @@ -120,11 +120,28 @@ def get_channel_tab(channel_id, page="1", sort=3, tab='videos', view=1, if not ctoken: ctoken = channel_ctoken_v3(channel_id, page, sort, tab, view) ctoken = ctoken.replace('=', '%3D') - url = 'https://www.youtube.com/browse_ajax?ctoken=' + ctoken + # Not sure what the purpose of the key is or whether it will change + # For now it seems to be constant for the API endpoint, not dependent + # on the browsing session or channel + key = 'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8' + url = 'https://www.youtube.com/youtubei/v1/browse?key=' + key + + data = { + 'context': { + 'client': { + 'hl': 'en', + 'gl': 'US', + 'clientName': 'WEB', + 'clientVersion': '2.20180830', + }, + }, + 'continuation': ctoken, + } + + content_type_header = (('Content-Type', 'application/json'),) content = util.fetch_url( - url, - headers_desktop + generic_cookie, - debug_name='channel_tab', report_text=message) + url, headers_desktop + content_type_header, + data=json.dumps(data), debug_name='channel_tab', report_text=message) return content diff --git a/youtube/yt_data_extract/common.py b/youtube/yt_data_extract/common.py index 5feda87..57a84ed 100644 --- a/youtube/yt_data_extract/common.py +++ b/youtube/yt_data_extract/common.py @@ -339,6 +339,11 @@ def extract_item_info(item, additional_info={}): def extract_response(polymer_json): '''return response, error''' + # /youtubei/v1/browse endpoint returns response directly + if isinstance(polymer_json, dict) and 'responseContext' in polymer_json: + # this is the response + return polymer_json, None + response = multi_deep_get(polymer_json, [1, 'response'], ['response']) if response is None: return None, 'Failed to extract response' |