He estado estudiando el código JAVA de la única aplicacion que me ha funcionado con todos los videos que he probado, en cualquier idioma, que es GOOGLE2SRT. Y he visto estas dos funciones donde parece que está la miga:
Código Java:
Ver original switch (method) {
case Google:
s = "http://video.google.com/videotranscript?frame=c&type=list&docid=" + otherparams.get("docid"); //+ id;
System.
out.
println("(DEBUG) List URL: " + s
); return s;
// Subtitles only (until v0.5.6)
// s = "http://video.google.com/timedtext?type=list&v=" + id;
// System.out.println("(DEBUG) Tracks list URL: " + s);
// return s;
case YouTubeLegacy: // Subtitles and translations (from v0.6) using "legacy method"
s = "http://video.google.com/timedtext?type=list&tlangs=1&v=" + otherparams.get("v");
System.
out.
println("(DEBUG) Tracks with targets list URL (Legacy): " + s
); return s;
case YouTubeSignature:
/* ORIGINAL "Magic" URL example
* http://www.youtube.com/api/timedtext?
* key=yttt1&
* hl=en_US&
* expire=1372005633&
* sparams=asr_langs,caps,v,expire&
* signature=4FE7A8E1FAAE338EAB840B58F3E05D1963F5550D.CE40D0149565FE4035DD4E914C144E864CE28302&
* caps=asr&
* v=L1hIAF5YvN0&
* asr_langs=ko,de,ja,pt,en,it,nl,es,ru,fr
*
* REQUIRED URL result
* http://www.youtube.com/api/timedtext?
* key=yttt1&
* expire=1372005633&
* sparams=asr_langs,caps,v,expire&
* signature=4FE7A8E1FAAE338EAB840B58F3E05D1963F5550D.CE40D0149565FE4035DD4E914C144E864CE28302&
* caps=asr&
* v=L1hIAF5YvN0&
* asr_langs=ko,de,ja,pt,en,it,nl,es,ru,fr&
*
* asrs=1&
* tlangs=1&
* type=list
*
*/
s = "https://www.youtube.com/api/timedtext" +
"?key=" + otherparams.get("key") +
"&expire=" + otherparams.get("expire") +
"&sparams=" + otherparams.get("sparams") +
"&signature=" + otherparams.get("signature") +
"&caps=" + otherparams.get("caps") +
"&v=" + otherparams.get("v") +
"&asr_langs=" + otherparams.get("asr_langs") +
"&asrs=1&type=list&tlangs=1";
System.
out.
println("(DEBUG) ASR/tracks with targets list URL (Signature): " + s
); return s;
}
return null;
}
// "ttsurl": "http:\/\/www.youtube.com\/api\/timedtext?key=yttt1\u0026hl=en_US\u0026expire=1372005633\u0026sparams=asr_langs%2Ccaps%2Cv%2Cexpire\u0026signature=4FE7A8E1FAAE338EAB840B58F3E05D1963F5550D.CE40D0149565FE4035DD4E914C144E864CE28302\u0026caps=asr\u0026v=L1hIAF5YvN0\u0026asr_langs=ko%2Cde%2Cja%2Cpt%2Cen%2Cit%2Cnl%2Ces%2Cru%2Cfr",
strings = YouTubeWebSource.split("ttsurl");
s = strings[1];
strings = s.split(",");
s = strings[0];
strings = s.split("\"");
s = strings[2];
s = s.replace("\\/", "/");
s = s.replace("\\u0026", "&");
return result;
}
Al parecer prueba varias técnicas para descargar los videos, con la misma URL base pero con distintos parámetros.
No acabo de entender exactamente como funciona, pero el caso es que la aplicacion tira bien, asi que el truco va a ser ese...