Eu tenho usado o http://www.youtube-mp3.org/ para obter links de download de músicas mp3 para um projeto de "rádio na Internet" (baixar o fluxo de arquivo e gerá-lo). Ultimamente o http://www.youtube-mp3.org/ parecia ter mudado o fluxo de trabalho. Até agora, consegui obter o formato adequado do url:
Considerando que r = timestamp Eu mesmo fiz o timestamp comoépoca. Isso funcionou bem sem o sufixo .1527580295. Infelizmente, isso parece ser necessário, pois o link sem o sufixo redireciona de volta para o site de conversão.
Até agora, o algoritmo era como mencionado:
Explicação da aquisição do Youtube mp3 org linq
http://www.youtube-mp3.org/api/itemInfo/?video_id=#{video_id}&ac=www&r=#{Time.now.to_i}
Alguém sabe como obter a parte do sufixo?
//Ei, Não sou muito de programação web ... mas isso é algo que certamente esqueci. Obrigado!
Adicionei isso à minha pequena API C #.
<!-- language: c# -->
const int AM = 65521;
int GetCCSufix(string a)
{
int c = 1, b = 0, d, e;
var chars = a.ToCharArray();
for(e =0; e< chars.Length; e ++)
{
d = chars[e];
c = (c + d) % AM;
b = (b + c) % AM;
}
return b << 16 | c;
}
Funciona bem ;)
Respostas:
5 para resposta № 1Não sei o que esse sufixo significa, mas lendo o arquivo javascript do cliente em youtube-mp3.org, você pode aprender como gerá-lo.
var __AM=65521; // the largest prime less than 2^16...
function cc(a){
var c = 1, b = 0, d, e;
for(e = 0; e < a.length; e++){
d = a.charCodeAt(e);
c = (c+d)%__AM;
b = (b+c)%__AM;
}
return b<<16|c;
}
O URL de mídia gerado é:
"http://www.youtube-mp3.org/get?ab=128&video_id="+video_id+"&h="+info.h+"&r="+timeNow+"."+cc(video_id+timeNow)
com
var timeNow = Date.now().toString();