Refresh Client Versions, Improve things, Apply #3

main
David 2022-09-18 19:47:44 +02:00
parent 76e3340f34
commit 6f7c6b749f
13 changed files with 705 additions and 476 deletions

194
README.md

File diff suppressed because one or more lines are too long

View File

@ -44,7 +44,6 @@ markdown += "|---------------------------|-----------------|----------|\n"
working_clients_output = "" working_clients_output = ""
working_versions = [] working_versions = []
video_id = ""
if not os.path.exists('results'): if not os.path.exists('results'):
os.makedirs('results') os.makedirs('results')
@ -64,6 +63,12 @@ for client_id in client_ids:
client_files = [file for file in files if file.startswith(str(client_id) + '_')] client_files = [file for file in files if file.startswith(str(client_id) + '_')]
client_files.sort(reverse=True) # highest version first client_files.sort(reverse=True) # highest version first
versions = []
for file_name in client_files:
version = file_name.split("_")[1]
if version not in versions:
versions.append(version)
for client_file in client_files: for client_file in client_files:
response_data_raw = open('responses/' + client_file, 'r', encoding='utf-8').read() response_data_raw = open('responses/' + client_file, 'r', encoding='utf-8').read()
response_data = json.loads(response_data_raw) response_data = json.loads(response_data_raw)
@ -80,11 +85,6 @@ for client_id in client_ids:
client_name = response_data_raw.split('&c=')[1].split('&')[0] client_name = response_data_raw.split('&c=')[1].split('&')[0]
except Exception: except Exception:
continue continue
try:
video_id = response_data_raw.split('&docid=')[1].split('&')[0]
except Exception:
print("missing doc id (video id)")
working_clients_output += str(client_id) + ";" + client_name + ";" + client_version + "\n" working_clients_output += str(client_id) + ";" + client_name + ";" + client_version + "\n"
@ -140,6 +140,9 @@ for client_id in client_ids:
if client_name == "TVHTML5_SIMPLY_EMBEDDED_PLAYER": if client_name == "TVHTML5_SIMPLY_EMBEDDED_PLAYER":
extraInfo += "&bull; No Age-restrictions<br>" extraInfo += "&bull; No Age-restrictions<br>"
if "android" in client_name.lower():
extraInfo += "&bull; Needs [`androidSdkVersion`](#params)<br>"
ignore_attributes = ["videoDetails", "playerConfig", "responseContext", "playabilityStatus", "streamingData", "playbackTracking", "trackingParams", "adPlacements", "playerAds", "adParams", "adBreakParams", "onResponseReceivedEndpoints", "playerSettingsMenuData"] ignore_attributes = ["videoDetails", "playerConfig", "responseContext", "playabilityStatus", "streamingData", "playbackTracking", "trackingParams", "adPlacements", "playerAds", "adParams", "adBreakParams", "onResponseReceivedEndpoints", "playerSettingsMenuData"]
@ -155,13 +158,17 @@ for client_id in client_ids:
extraInfo += "<details><summary>Show Response</summary>" + get_structure_tree(response_data) +"</details>" extraInfo += "<details><summary>Show Response</summary>" + get_structure_tree(response_data) +"</details>"
other_versions = ""
if len(versions) > 1:
other_versions = "<br><br><details><summary>All Versions</summary>" + "<br>".join(versions) +"</details>"
markdown += "|ID: *" + str(client_id) + "*<br>" + client_name + "<br>" + client_version + "|" + formats_summary + formatsStr + adaptiveFormatsStr + "|" + extraInfo + "|\n"
markdown += "|ID: *" + str(client_id) + "*<br><b>" + client_name + "</b><br>" + client_version + other_versions + "|" + formats_summary + formatsStr + adaptiveFormatsStr + "|" + extraInfo + "|\n"
break break
readme_header = open("templates/readme_header.md", "r").read() readme_template = open("templates/readme_template.md", "r").read()
readme_header = readme_header.replace("%videoId%", video_id) readme_template = readme_template.replace("%table%", markdown)
f = open("results/working_clients.md", "w", encoding="utf-8") f = open("results/working_clients.md", "w", encoding="utf-8")
f.write(markdown) f.write(markdown)
@ -177,5 +184,5 @@ for v in working_versions:
f.close() f.close()
f = open("readme.md", "w", encoding="utf-8") f = open("readme.md", "w", encoding="utf-8")
f.write(readme_header + markdown) f.write(readme_template)
f.close() f.close()

View File

@ -1,5 +1,6 @@
import requests import requests
import os import os
import time
client_versions = open("payloads/client_versions.txt", "r").readlines() client_versions = open("payloads/client_versions.txt", "r").readlines()
data_template = open("payloads/post_data.txt", "r").read() data_template = open("payloads/post_data.txt", "r").read()
@ -54,7 +55,9 @@ innertube_hosts = [
if not os.path.exists('responses'): if not os.path.exists('responses'):
os.makedirs('responses') os.makedirs('responses')
for client_name_id in range(1, 100): requests_failed = 0
for client_name_id in range(1, 120):
for client_version in client_versions: for client_version in client_versions:
client_version = client_version.replace("\n", "").replace("\r", "") client_version = client_version.replace("\n", "").replace("\r", "")
if client_version == "": if client_version == "":
@ -64,11 +67,13 @@ for client_name_id in range(1, 100):
try_id = str(client_name_id) + "_" + client_version + "_" + str(len(innertube_hosts) - i) + "_" + host["domain"] + "_" + host["key"] try_id = str(client_name_id) + "_" + client_version + "_" + str(len(innertube_hosts) - i) + "_" + host["domain"] + "_" + host["key"]
print("Try ClientId: " + str(client_name_id) + " ClientVersion: " + str(client_version) + " @ " + host["domain"]) print("Try ClientId: " + str(client_name_id) + " ClientVersion: " + str(client_version) + " @ " + host["domain"] + " Failed Requests: " + str(requests_failed))
data = data_template.replace("%videoId%", host["video_id"]).replace('%clientName%', str(client_name_id)).replace('%clientVersion%', client_version) data = data_template.replace("%videoId%", host["video_id"]).replace('%clientName%', str(client_name_id)).replace('%clientVersion%', client_version)
for i in range(0, 2): headers = host["headers"].copy()
for i in range(0, 4):
try: try:
response = requests.post("https://" + host["domain"] + "/youtubei/v1/player?key=" + host["key"], data=data, headers=host["headers"], timeout=5) response = requests.post("https://" + host["domain"] + "/youtubei/v1/player?key=" + host["key"], data=data, headers=host["headers"], timeout=5)
@ -81,4 +86,7 @@ for client_name_id in range(1, 100):
break break
except Exception as ex: except Exception as ex:
if i == 3:
requests_failed += 1
time.sleep(0.5)
print(ex) print(ex)

View File

@ -1,78 +1,78 @@
7.4.620913-release 8.0.623343-release
57.38.2 63.34.5
100.0.4896.79 105.0.5195.124
3.0.1 3.0.1
7.7 8.2
2.12.422490447 3.8.466520855
1.9 1.9
100.0.4896.79 105.0.5195.124
6.3 6.3
1.11.0.358 1.11.0.358
1.8 1.8
1.0.421968649 1.0.471963630
2.4.042 2.4.065-3
1.8.2.392356939 1.8.2.392356939
11.6.06.433184565-release-armeabi-v7a 12.0.06.457705062-release-armeabi-v7a
2022.03.20.437098296.Release 2022.06.26.459604605.Release
8.5.6.197464524.go 8.5.6.197464524.go
2.41.438904386 2.45.467721145
3.3 3.3
27.0.326 27.0.326
4.4.439927113 4.5.470770319
13.13.7.23.arm 13.33.12.26.arm
0.1.315561676 0.1.452181178
2.9.0.365531209.assistantlite.210329 2.13.0.439234666.armeabi-v7a.release
5.00 5.20R2
2022.14.0-439152615-release 2022.36.0-472143158-release
8.4.500.429168112.25 8.6.263.471358013.15
3.65.2.438022649 3.76.26.471848990
1.22.062.06.90 1.22.362.03.90
2.21.261.04.90 2.22.154.2.all.alldpi
122.0.353872967.DR122 172.0.466841314.duo.android
9.155.0.2 9.162.0.2
3.0.208511728 3.0.208511728
2.48.75.6 2.50.25.3
3.2.5.164561151-armeabi-v7a 3.3.2.454109171-release-armeabi-v7a
5.22.041.03.30 5.22.222.02.90
1.14.220323006 1.14.220323006
11.23.3 11.48.0801
157.0 157.0
2022.03.20.437881873.Release 2022.08.07.467804210.Release
5.49.0.430730993 5.55.0.455383490
1.4.large 1.4.large
1.141.435035767 1.158.462657757
2020062202 2022082901
2.143.434517044 2.143.460223562
52.0.323183643 84.0.463159461
5.75.0.426435368 6.6.0.472601992
5.22.1 2022.8.24.0.2
2022.01.32371 2022.08.36996
8.26.8771-1.T 8.26.8771-1.T
22.09.20 22.33.15
30.0.20-19 32.3.14-19
1.0.196287551 1.0.196287551
1.22.062.06.90 1.22.062.06.90
1.22.062.06.90 1.22.342.07.90
2.0.0.432514663 2.0.0.432514663
26.2.3.381920558 26.2.3.381920558
6.32.0.436351116.8-release 6.45.0.472354770.1-release
2022.02.07.428774713 2022.08.08.468275888
11.10.0.305602887 11.10.0.305602887
40.0.402967813 40.0.402967813
1.78.217178463.release 1.78.217178463.release
7.7.051 messages.android
10.55.0 10.55.0
1.5.2.242191532 1.5.2.242191532
12 13
1.1.413207646 1.1.458567181
6.5.1.12 6.5.1.12
2.19.1.303051424 2.19.1.303051424
2.48.0.377032688.gms 2.48.0.377032688.gms
17.11.35 17.35.36
22.09.101 22.35.100
2.10.7.6 2.10.7.6
3.25.54 3.25.54
7.12.1 7.32.1
4.71.51 5.23.51
6.12.1 6.34.1
4.0.5 4.0.25

View File

@ -1,55 +1,52 @@
1.27 1.37
2.3 2.4
206.0 228.0
1.51 1.63
1.0.150 1.0.172
1.0.42 1.0.48
2.1.65 2.1.85
1.9.40904 1.9.57601
2.0.648 2.0.648
6.13 6.36
86.0.0 96.0.0
1.8 1.9
163.0 174.1.0
2.9.1 2.10.5
2.3.18 2.3.19
1.13.7 2.220824.1
2.220308.1 1.8.0
1.7.1 2.45.468575109
2.40.433747733 9.1.39
9.0.43 5.24.3
5.01 2.2022.36201
2.2022.12201
0.0.77 0.0.77
1.16.80 1.19.1
1.1
5.5 5.5
5.84 6.7
22.11.1 22.35.1
7.12.3 7.36.1
79.0.3945.10 101.0.4951.27
2.2022.10204 2.2022.34204
3.16 3.17
4.6.1 4.7.2
1.2022.12202 1.2022.36207
4.4.4763 4.5.4945
22.12.100 22.36.102
3.42.0 1.2022.34205
1.2022.12202 1.2022.36202
1.2022.12202
3.4 3.4
2.20.31 3.2.00005
2.50.105 2.57.109
6.12 6.35
17.13.3 17.36.4
100.0.4896.77 105.0.5195.129
4.2022.12400 4.2022.36202
5.50 5.60
6.0.220320 6.0.220821
7.12.0 7.15.0
2.22.0 2.22.0
6.33.0 6.44.0
5.9.1 6.0.3
22.14 22.33
3.4.0 3.4.0
9.154 9.154

View File

@ -2,7 +2,11 @@ import requests
output = open("android_versions.txt", "w") output = open("android_versions.txt", "w")
response = requests.get("https://androidapksfree.com/devapk/google-inc/") headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33"
}
response = requests.get("https://androidapksfree.com/devapk/google-inc/", headers=headers)
#print(response.text) #print(response.text)
@ -14,7 +18,7 @@ for x in split_html:
continue continue
try: try:
response_apk = requests.get(apk_link) response_apk = requests.get(apk_link, headers=headers)
apk_version = response_apk.text.split("latest apk version ")[1].split('"')[0].split(" ")[0].split("_")[0] apk_version = response_apk.text.split("latest apk version ")[1].split('"')[0].split(" ")[0].split("_")[0]
print(apk_version) print(apk_version)

View File

@ -6,11 +6,11 @@
0.0.5 0.0.5
0.0.6 0.0.6
0.0.7 0.0.7
0.0.77
0.0.8 0.0.8
0.0.9 0.0.9
0.0.77
0.1.452181178
0.1 0.1
0.1.315561676
0.2 0.2
0.3 0.3
0.4 0.4
@ -23,243 +23,318 @@
1.0 1.0
1.0.0 1.0.0
1.0.1 1.0.1
1.0.150
1.0.196287551
1.0.42 1.0.42
1.0.421968649 1.0.48
1.1 1.0.150
1.1.413207646 1.0.172
1.1.426206631 1.0.471963630
1.1.458567181
1.4.large
1.5.2.242191532
1.7.1
1.8.0
1.8.2.392356939
1.9.40904
1.9.57601
1.11.0.358 1.11.0.358
1.13.02 1.13.02
1.13.7 1.13.7
1.14.220323006 1.14.220323006
1.141.435035767
1.15.03 1.15.03
1.16.80 1.16.80
1.19.1
1.22.362.03.90
1.28.63
1.70.50
1.78.217178463
1.141.435035767
1.158.462657757
1.2022.36207
1.1
1.2 1.2
1.20150713 1.20150713
1.20180713 1.20180713
1.20200713 1.20200713
1.20210713 1.20210713
1.2022.12202
1.20220403 1.20220403
1.22.062.06.90 1.20220918
1.27 1.27
1.28.63
1.3 1.3
1.37
1.4 1.4
1.4.large
1.5 1.5
1.5.2.242191532
1.51 1.51
1.6 1.6
1.63
1.7 1.7
1.7.1
1.70.50
1.78.217178463
1.78.217178463.release
1.8 1.8
1.8.2.392356939
1.9 1.9
1.9.40904
10.20
10.20220325
10.55.0
100.0.4896.77
100.0.4896.79
11.10.0.305602887
11.20
11.23.3
11.6.06.433184565
11.6.06.433184565-release-armeabi-v7a
12
12.20
122.0.353872967.DR122
13.13.7.23
13.13.7.23.arm
13.20
14.20
15.11.34
15.20
157.0
16.20
163.0
17.11.34
17.11.35
17.13.3
18.11.34
18.24.100
19.11.100
19.24.100
2 2
2.0 2.0
2.0.0.432514663 2.0.0.432514663
2.0.648 2.0.648
2.1.4 2.1.4
2.1.65 2.1.65
2.1.85
2.3.18
2.3.19
2.4.042
2.4.065-3
2.9.0.365531209
2.9.1
2.10.5
2.10.7.6 2.10.7.6
2.12.422490447 2.12.422490447
2.13 2.13.0.439234666
2.143.434517044
2.16.032 2.16.032
2.19.1.303051424 2.19.1.303051424
2.20.31 2.20.31
2.21.261.04.90
2.22.0
2.22.154.2
2.40.433747733
2.41.438904386
2.45.467721145
2.45.468575109
2.48.0.377032688
2.48.75.6
2.50.25.3
2.50.105
2.57.109
2.70.50
2.143.460223562
2.2022.10204
2.2022.12201
2.2022.34204
2.2022.36201
2.220308.1
2.220824.1
2.13
2.20150719 2.20150719
2.20180719 2.20180719
2.20200719 2.20200719
2.20210719 2.20210719
2.2022.10204
2.2022.12201
2.20220325 2.20220325
2.20220405 2.20220405
2.21.261.04.90 2.20220918
2.22.0
2.220308.1
2.3 2.3
2.3.18 2.4
2.4.042
2.40.433747733
2.41.438904386
2.43 2.43
2.48.0.377032688 3
2.48.0.377032688.gms 3.0
2.48.75.6 3.0.1
2.50.105 3.0.208511728
2.70.50 3.2.00005
2.9.0.365531209 3.2.5.164561151
2.9.0.365531209.assistantlite.210329 3.2.5.164561151-armeabi-v7a
2.9.1 3.3.2.454109171-release-armeabi-v7a
3.4.0
3.8.1
3.8.466520855
3.10.3
3.12.1
3.25.54
3.26.1
3.42.0
3.65.2.438022649
3.70.50
3.76.26.471848990
3.16
3.17
3.20220918
3.3
3.4
3.46
4
4.0.5
4.0.25
4.00.50
4.4.4763
4.4.439927113
4.5.4945
4.5.470770319
4.6.1
4.7.2
4.10.3
4.10.50
4.12.1
4.20.50
4.26.1
4.40.50
4.70.00
4.70.50
4.71.51
4.2022.36202
4.20220918
4.44763
4.9
5
5.00
5.9.1
5.10.3
5.12.1
5.20R2
5.22.041.03.30
5.22.1
5.22.222.02.90
5.23.51
5.24.3
5.26.1
5.49.0.430730993
5.55.0.455383490
5.70.50
5.75.0.426435368
5.01
5.20220918
5.5
5.50
5.60
5.84
6
6.0.3
6.0.220320
6.0.220821
6.5.1.12
6.6.0.472601992
6.8.1
6.10.3
6.12.1
6.22.4
6.32.0.436351116.8
6.33.0
6.34.1
6.44.0
6.45.0.472354770.1
6.70.50
6.12
6.13
6.20220918
6.3
6.35
6.36
6.7
7
7.0
7.4.620913
7.7.051
7.10.3
7.12.0
7.12.1
7.12.3
7.15.0
7.20.3
7.30.3
7.32.1
7.36.1
7.70.50
7.20220918
7.7
8
8.0
8.0.623343-release
8.4.500.429168112.25
8.5.6.197464524
8.5.6.197464524.go
8.6.263.471358013.15
8.10.3
8.26.8771
8.26.8771-1.T
8.70.50
8.2
8.20220918
9
9.0
9.0.43
9.1.39
9.8.1
9.10.3
9.70.50
9.155.0.2
9.162.0.2
9.154
9.20220918
10.55.0
10.20
10.20220918
11.6.06.433184565
11.6.06.433184565-release-armeabi-v7a
11.10.0.305602887
11.23.3
11.48.0801
11.20
12
12.0.06.457705062-release-armeabi-v7a
12.20
13
13.13.7.23
13.13.7.23.arm
13.33.12.26.arm
13.20
14.20
15.11.34
15.20
16.20
17.11.34
17.11.35
17.13.3
17.35.36
17.36.4
18.11.34
18.24.100
19.11.100
19.24.100
20.24.100 20.24.100
2020062202
2022.01.32371
2022.02.07.428774713
2022.03.20.437098296
2022.03.20.437098296.Release
2022.14.0-439152615
2022.14.0-439152615-release
206.0
21.24.100 21.24.100
22.01.100 22.01.100
22.09.101
22.09.20 22.09.20
22.09.101
22.11.1 22.11.1
22.11.100 22.11.100
22.12.100 22.12.100
22.14
22.24.100 22.24.100
22.33.15
22.35.1
22.35.100
22.36.102
22.14
22.33
23.24.100 23.24.100
24.24.100 24.24.100
25.24.100 25.24.100
26.2.3.381920558 26.2.3.381920558
27.0.326 27.0.326
3
3.0
3.0.1
3.0.208511728
3.10.3
3.12.1
3.16
3.2.5.164561151
3.2.5.164561151-armeabi-v7a
3.20220325
3.25.54
3.26.1
3.3
3.4
3.4.0
3.42.0
3.46
3.65.2.438022649
3.70.50
3.8.1
30.0.20-19 30.0.20-19
4 32.3.14-19
4.0.5
4.00.50
4.10.3
4.10.50
4.12.1
4.20.50
4.2022.12400
4.20220325
4.26.1
4.4.439927113
4.4.4763
4.40.50
4.44763
4.6.1
4.70.00
4.70.50
4.71.51
4.9
40.0.402967813 40.0.402967813
5
5.00
5.01
5.10.3
5.12.1
5.20220325
5.22.041.03.30
5.22.1
5.26.1
5.49.0.430730993
5.5
5.50
5.70.50
5.75.0.426435368
5.84
5.9.1
52.0.323183643 52.0.323183643
57.38.2 57.38.2
6 63.34.5
6.0.220320
6.10.3
6.12
6.12.1
6.13
6.20220325
6.22.4
6.3
6.32.0.436351116.8
6.32.0.436351116.8-release
6.33.0
6.5.1.12
6.70.50
6.8.1
7
7.0
7.10.3
7.12.0
7.12.1
7.12.3
7.20.3
7.20220325
7.30.3
7.4.620913
7.4.620913-release
7.7
7.7.051
7.70.50
79.0.3945.10 79.0.3945.10
8 84.0.463159461
8.0
8.10.3
8.20220325
8.26.8771
8.26.8771-1.T
8.4.500.429168112.25
8.5.6.197464524
8.5.6.197464524.go
8.70.50
86.0.0 86.0.0
9 96.0.0
9.0 100.0.4896.77
9.0.43 100.0.4896.79
9.10.3 101.0.4951.27
9.154 105.0.5195.124
9.155.0.2 105.0.5195.129
9.20220325 122.0.353872967.DR122
9.70.50 157.0
9.8.1 163.0
999999999 172.0.466841314.duo.android
174.1.0
206.0
228.0
2022.01.32371
2022.02.07.428774713
2022.03.20.437098296
2022.03.20.437098296.Release
2022.08.08.468275888
2022.08.36996
2022.8.24.0.2
2022.14.0-439152615
2022.36.0-472143158-release
999999999
2020062202
2022082901
20220918

View File

@ -5,7 +5,8 @@
"gl": "US", "gl": "US",
"clientName": %clientName%, "clientName": %clientName%,
"clientVersion": "%clientVersion%", "clientVersion": "%clientVersion%",
"clientScreen": "WATCH" "clientScreen": "WATCH",
"androidSdkVersion": 31
}, },
"thirdParty": { "thirdParty": {
"embedUrl": "https://www.youtube.com/" "embedUrl": "https://www.youtube.com/"

File diff suppressed because one or more lines are too long

View File

@ -1,58 +1,60 @@
1;WEB;2.20220405 1;WEB;2.20220918
2;MWEB;2.20220405 2;MWEB;2.20220918
3;ANDROID;17.13.3 3;ANDROID;17.36.4
5;IOS;17.13.3 5;IOS;17.36.4
7;TVHTML5;7.20220325 7;TVHTML5;7.20220918
8;TVLITE;2 8;TVLITE;2
10;TVANDROID;1.0 10;TVANDROID;1.0
13;XBOXONEGUIDE;1.0 13;XBOXONEGUIDE;1.0
14;ANDROID_CREATOR;22.14 14;ANDROID_CREATOR;22.36.102
15;IOS_CREATOR;22.14 15;IOS_CREATOR;22.36.102
16;TVAPPLE;1.0 16;TVAPPLE;1.0
18;ANDROID_KIDS;7.12.3 18;ANDROID_KIDS;7.36.1
19;IOS_KIDS;7.12.3 19;IOS_KIDS;7.36.1
21;ANDROID_MUSIC;5.01 21;ANDROID_MUSIC;5.26.1
23;ANDROID_TV;2.16.032 23;ANDROID_TV;2.19.1.303051424
26;IOS_MUSIC;5.01 26;IOS_MUSIC;5.26.1
27;MWEB_TIER_2;9.20220325 27;MWEB_TIER_2;9.20220918
28;ANDROID_VR;1.28.63 28;ANDROID_VR;1.37
29;ANDROID_UNPLUGGED;6.13 29;ANDROID_UNPLUGGED;6.36
30;ANDROID_TESTSUITE;1.9 30;ANDROID_TESTSUITE;1.9
31;WEB_MUSIC_ANALYTICS;0.2 31;WEB_MUSIC_ANALYTICS;0.2
33;IOS_UNPLUGGED;6.13 33;IOS_UNPLUGGED;6.36
38;ANDROID_LITE;3.26.1 38;ANDROID_LITE;3.26.1
39;IOS_EMBEDDED_PLAYER;2.3 39;IOS_EMBEDDED_PLAYER;2.4
41;WEB_UNPLUGGED;1.20220403 41;WEB_UNPLUGGED;1.20220918
42;WEB_EXPERIMENTS;1 42;WEB_EXPERIMENTS;1
43;TVHTML5_CAST;1.1 43;TVHTML5_CAST;1.1
55;ANDROID_EMBEDDED_PLAYER;17.13.3 55;ANDROID_EMBEDDED_PLAYER;17.36.4
56;WEB_EMBEDDED_PLAYER;9.20220325 56;WEB_EMBEDDED_PLAYER;9.20220918
57;TVHTML5_AUDIO;2.0 57;TVHTML5_AUDIO;2.0
58;TV_UNPLUGGED_CAST;0.1 58;TV_UNPLUGGED_CAST;0.1
59;TVHTML5_KIDS;3.20220325 59;TVHTML5_KIDS;3.20220918
60;WEB_HEROES;0.1 60;WEB_HEROES;0.1
61;WEB_MUSIC;1.0 61;WEB_MUSIC;1.0
62;WEB_CREATOR;1.20220403 62;WEB_CREATOR;1.20220918
63;TV_UNPLUGGED_ANDROID;1.22.062.06.90 63;TV_UNPLUGGED_ANDROID;1.37
64;IOS_LIVE_CREATION_EXTENSION;17.13.3 64;IOS_LIVE_CREATION_EXTENSION;17.36.4
65;TVHTML5_UNPLUGGED;6.13 65;TVHTML5_UNPLUGGED;6.36
66;IOS_MESSAGES_EXTENSION;17.13.3 66;IOS_MESSAGES_EXTENSION;17.36.4
67;WEB_REMIX;1.20220403 67;WEB_REMIX;1.20220918
68;IOS_UPTIME;1.0 68;IOS_UPTIME;1.0
69;WEB_UNPLUGGED_ONBOARDING;0.1 69;WEB_UNPLUGGED_ONBOARDING;0.1
70;WEB_UNPLUGGED_OPS;0.1 70;WEB_UNPLUGGED_OPS;0.1
71;WEB_UNPLUGGED_PUBLIC;0.1 71;WEB_UNPLUGGED_PUBLIC;0.1
72;TVHTML5_VR;0.1 72;TVHTML5_VR;0.1
74;ANDROID_TV_KIDS;1.16.80 74;ANDROID_TV_KIDS;1.19.1
75;TVHTML5_SIMPLY;1.0 75;TVHTML5_SIMPLY;1.0
76;WEB_KIDS;2.20220405 76;WEB_KIDS;2.20220918
77;MUSIC_INTEGRATIONS;0.1 77;MUSIC_INTEGRATIONS;0.1
80;TVHTML5_YONGLE;0.1 80;TVHTML5_YONGLE;0.1
84;GOOGLE_ASSISTANT;0.1 84;GOOGLE_ASSISTANT;0.1
85;TVHTML5_SIMPLY_EMBEDDED_PLAYER;2.0 85;TVHTML5_SIMPLY_EMBEDDED_PLAYER;2.0
87;WEB_INTERNAL_ANALYTICS;0.1 87;WEB_INTERNAL_ANALYTICS;0.1
88;WEB_PARENT_TOOLS;1.20220403 88;WEB_PARENT_TOOLS;1.20220918
89;GOOGLE_MEDIA_ACTIONS;0.1 89;GOOGLE_MEDIA_ACTIONS;0.1
90;WEB_PHONE_VERIFICATION;1.0.0 90;WEB_PHONE_VERIFICATION;1.0.0
92;IOS_PRODUCER;0.1 92;IOS_PRODUCER;0.1
93;TVHTML5_FOR_KIDS;7.20220325 93;TVHTML5_FOR_KIDS;7.20220918
94;GOOGLE_LIST_RECS;0.1
95;MEDIA_CONNECT_FRONTEND;0.1

View File

@ -1,25 +1,24 @@
2.20220405 2.20220918
17.13.3 17.36.4
7.20220325 7.20220918
2 2
1.0 1.0
22.14 22.36.102
7.12.3 7.36.1
5.01 5.26.1
2.16.032 2.19.1.303051424
9.20220325 9.20220918
1.28.63 1.37
6.13 6.36
1.9 1.9
0.2 0.2
3.26.1 3.26.1
2.3 2.4
1.20220403 1.20220918
1 1
1.1 1.1
2.0 2.0
0.1 0.1
3.20220325 3.20220918
1.22.062.06.90 1.19.1
1.16.80
1.0.0 1.0.0

View File

@ -1,13 +0,0 @@
# YouTube-Internal-Clients
A script that discovers hidden internal clients of the YouTube (Innertube) API using bruteforce methods. The script tries `clientNames` with a sequential ID enumeration and crosses them with known `clientVersions`.
The goal was to find a client that has no age restrictions implemented. With success.
## Contributors
- [@MinePlayersPE](https://github.com/MinePlayersPE) - Mapped some version numbers in a [Gist](https://gist.github.com/MinePlayersPE/9875f2051c2dfdeb090543b8c6a9f7e6), which helped a lot
- [@89z](https://github.com/89z) - Helped to find some missing clients and version numbers
## Results
The script has found the following working clients tested on [this](https://www.youtube.com/watch?v=%videoId%) video:

View File

@ -0,0 +1,79 @@
# YouTube-Internal-Clients
A script that discovers hidden internal clients of the YouTube (Innertube) API using bruteforce methods. The script tries `clientNames` with a sequential ID enumeration and crosses them with known `clientVersions`.
The goal was to find a client that has no age restrictions implemented. With success.
- [Clients](#clients)
- [Example Request](#example-request)
- [Params](#params)
- [API Keys](#api-keys)
- [Contributors](#contributors)
## Clients
The script has found the following working clients:
%table%
## Example Request
```http
POST /youtubei/v1/player?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8 HTTP/2
Host: www.youtube.com
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42
Accept: */*
Origin: https://www.youtube.com
Referer: https://www.youtube.com/
Accept-Encoding: gzip, deflate
Accept-Language: de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
{
"context": {
"client": {
"hl": "en",
"gl": "US",
"clientName": "WEB",
"clientVersion": "2.20220916.00.00",
"clientScreen": "WATCH",
"androidSdkVersion": 31
},
"thirdParty": {
"embedUrl": "https://www.youtube.com/"
}
},
"videoId": "yvyAQiiKIN8",
"playbackContext": {
"contentPlaybackContext": {
"signatureTimestamp": 19250
}
},
"racyCheckOk": true,
"contentCheckOk": true
}
```
## Params
| Param | Description |
|-------------|-------------|
| `embedUrl` | Required for some videos when using an embedded client. e.g. `WEB_EMBEDDED_PLAYER` |
| `signatureTimestamp` | Required for web-based clients for videos with copyright claims (Stream URLs must be deciphered)
| `racyCheckOk`, `contentCheckOk` | Skips content warnings.
| `androidSdkVersion` | Partially required for Android clients. A corresponding user agent must also be set. (e.g. `com.google.android.youtube/17.10.35 (Linux; U; Android 12; GB) gzip`) (see [issue](https://github.com/zerodytrash/YouTube-Internal-Clients/issues/3))
## API Keys
| Name | Key |
|---------------------------|-------------------------------------------|
| YouTube Web | `AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8` |
| YouTube Web Kids | `AIzaSyBbZV_fZ3an51sF-mvs5w37OqqbsTOzwtU` |
| YouTube Web Music | `AIzaSyC9XL3ZjWddXya6X74dJoCTL-WEYFDNX30` |
| YouTube Web Creator | `AIzaSyBUPetSUmoZL-OhlxA7wSac5XinrygCqMo` |
| YouTube Android | `AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w` |
| YouTube Android Music | `AIzaSyAOghZGza2MQSZkY_zfZ370N-PUdXEo8AI` |
| YouTube Android Embedded | `AIzaSyCjc_pVEDi4qsv5MtC2dMXzpIaDoRFLsxw` |
| YouTube Android Creator | `AIzaSyD_qjV8zaaUMehtLkrKFgVeSX_Iqbtyws8` |
| YouTube IOS | `AIzaSyB-63vPrdThhKuerbB2N_l7Kwwcxj6yUAc` |
| YouTube IOS Music | `AIzaSyBAETezhkwP0ZWA02RsqT1zu78Fpt0bC_s` |
## Contributors
- [@MinePlayersPE](https://github.com/MinePlayersPE) - Mapped some version numbers in a [Gist](https://gist.github.com/MinePlayersPE/9875f2051c2dfdeb090543b8c6a9f7e6), which helped a lot
- [@89z](https://github.com/89z) - Helped to find some missing clients and version numbers