Commencez par une vidéo typique :
https://www.youtube.com/watch?v=XeojXq6ySs4
En utilisant le même ID, construisez une URL comme celle-ci :
https://www.youtube.com/get_video_info?eurl=https://www.youtube.com&video_id=XeojXq6ySs4
La réponse sera une chaîne de requête, comme celle-ci (modifiée pour plus de lisibilité) :
innertube_api_version=v1&
innertube_context_client_version=2.20210504.09.00&
player_response=%7B%22responseContext%22%3A%7B%22serviceTrackingParams%22%3A...
ps=desktop-polymer&
root_ve_type=27240&
Extraire le player_response
valeur. Ce sera un objet JSON, comme ceci :
{
"streamingData": {
"adaptiveFormats": [
{
"itag": 137,
"mimeType": "video/mp4; codecs=\"avc1.640020\"",
"bitrate": 570464,
"height": 1080,
"signatureCipher": "s=VZVZOq0QJ8wRgIhANWm3sPF-2hbzQQGrErjQFMNmxTfALco..."
}
]
}
}
Puis extraire le signatureCipher
il s'agit d'une chaîne de requête, comme ceci :
sp=sig&
s=VZVZOq0QJ8wRgIhANWm3sPF-2hbzQQGrErjQFMNmxTfALcoZkZ4IVR1djIpAiEA8HFKix6d4B3T...&
url=https://r3---sn-q4flrnek.googlevideo.com/videoplayback%3Fexpire%3D16201927...
El url
est l'URL vers l'audio ou la vidéo. Cependant, avant de pouvoir accéder à l URL, vous devez ajouter une entrée à la chaîne de requête. La nouvelle clé, est la valeur sous sp
ci-dessus ( sig
dans ce cas). La nouvelle valeur, est la valeur sous s
au-dessus de ( VZVZOq0QJ8wRgIhANWm3sPF-2hbzQQGrErjQFMNmxTfALcoZkZ4IVR1djIpA...
dans ce cas). Cependant, avant de pouvoir ajouter la nouvelle entrée, vous devez décoder l'adresse de l'utilisateur. s
valeur. Pour décoder la valeur, suivez les étapes suivantes. Tout d'abord, visitez la page d'origine :
https://www.youtube.com/watch?v=XeojXq6ySs4
Dans le code source, il y aura un texte comme celui-ci :
/s/player/3e7e4b43/player_ias.vflset/en_US/base.js
que vous pouvez transformer en :
https://www.youtube.com/s/player/3e7e4b43/player_ias.vflset/en_US/base.js
Dans cette nouvelle page, il y aura du code comme celui-ci :
var uy={an:function(a){a.reverse()},
gN:function(a,b){a.splice(0,b)},
J4:function(a,b){var c=a[0];a[0]=a[b%a.length];a[b%a.length]=c}};
vy=function(a){a=a.split("");uy.gN(a,2);uy.J4(a,47);uy.gN(a,1);uy.an(a,49);
uy.gN(a,2);uy.J4(a,4);uy.an(a,71);uy.J4(a,15);uy.J4(a,40);return a.join("")};
Prenez l'original s
et le faire passer par cette fonction :
vy('_l_lOq0QJ8wRAIgc-yNc9Z4lSO2CozG4B-W9uC5zeuTATDvqHlnQaHGNmkCICsZJGbEjKDmD...')
Le résultat sera à peu près le même, mais brouillé :
AOq0QJ8wRAIgc-ylc9Z4lSO2CozG4B-W9uC5zeuTNTDvqH_nQaHGNmkCICsZJGbEjKDmDSnKg_atTR...
Enfin, vous pouvez construire l'URL qui en résulte :
https://r3---sn-q4fl6nz7.googlevideo.com/videoplayback?vprv=1&
id=o-AHThxQXyxJ3jfw5EBUJeT0IJLrdQeYpMdCsCImMfbuac&
sig=AOq0QJ8wRAIgc-ylc9Z4lSO2CozG4B-W9uC5zeuTNTDvqH_nQaHGNmkCICsZJGbEjKDmDSnKg_...
J'ai une bibliothèque et un programme qui effectue ces étapes :
https://pkg.go.dev/github.com/89z/mech/youtube