AJAX获取百度MP3下载的例子(百度比较变态的加密方法)
时间:2009-11-19
来源:互联网
最近看到百度MP3提供链接下载,但又是比较变态的加密方法,弄了一段小程序还是来获取他
演示页:http://yuepin.com/Explore/song.php
以下是源码
[php]
<?php
($_GET['key'] == "") ? $key = "love" : $key = $_GET['key'];
$url = "http://mp3.baidu.com/m?f=ms&rf=idx&tn=baidump3&ct=134217728&lf=&rn=&word=".$key."&lm=2";
if($_GET['action'] == "getxml"){
$matchs = getContent($url);
$d = format($matchs);
$d = formatXML($d);
outXML($d);
}elseif($_GET['action'] == "geturl"){
$d = geturl($_GET['url']);
outXML("<data><![CDATA[".$d."]]></data>");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>获取百度歌曲</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" type="text/css" href="images/style.css" />
<style type="text/css">
#outdata{ width:300px; float:left; }
#outurl{ width:500px; float:right; }
li {list-style-type:decimal;}
</style>
<script type="text/javascript">
var xmlHttp = createXmlHttpRequestObject();
var ServerPage = "<?php echo $_SERVER['PHP_SELF']; ?>";
function createXmlHttpRequestObject(){ //创建 XML Http Request 对象
try{
xmlHttp = new XMLHttpRequest();
if(xmlHttp.overrideMimeType)
xmlHttp.overrideMimeType("text/xml");
}
catch(e){
var xmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP",
"Microsoft.XMLHTTP");
for(var i=0;i<xmlHttpVersions.length && !xmlHttp; i++){
try{
xmlHttp = new ActiveXObject(xmlHttpVersions);
}
catch (e) {}
}
}
if(!xmlHttp) alert("错误! 创造 XML Http 请求对象失败!");
else return xmlHttp;
}
function geturl(){ //使用 XML Http Request 对象创建异步HTTP请求
var key = getID('key').value;
var QueryStr = "?key="+key+"&action=getxml&rnd="+Math.random();
loading("正在载入数据请稍候...");
datas = "";
if(key != "" && typeof(key) !="undefined"){
if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
var url = ServerPage + QueryStr;
xmlHttp.open("GET",url,true);
// xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-Type","text/xml;charset=gb2312;");
xmlHttp.onreadystatechange = outurl;
xmlHttp.send(null);
}
else{
setTimeout('geturl()',1000);
}
}
}
function outurl(){ //获取服务器返回的消息
var outmsg = "";
if(xmlHttp.readyState == 4){
if (xmlHttp.status == 200){
var response = xmlHttp.responseText;
if(response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
throw(response.length == 0 ?"Void serer response.":response);
var responseXml = xmlHttp.responseXML;
var res = responseXml.documentElement;
try{
var music = res.getElementsByTagName("music");
var datas = "";
var url = "";
var sname = "";
datas += "<ul>\n";
for(var i=0;i<music.length;i++){
url = getTag(res,i,"urls");
sname = getTag(res,i,"names");
datas += '<li><a href="#" onClick="javascript:getSongUrl(\'' +url+ '\',\'' +sname+ '\')" >' +sname+ "</a></li>\n";
}
datas += "</ul>\n";
getID("outdata").innerHTML = datas;
}catch(e){
getID("showmsg").innerHTML = "你所请求的数据不存在";
}
}
else{
outmsg = "返回HTTP请求失败!";
}
getID("showmsg").innerHTML = "";
}
}
function getSongUrl(url,a){ //使用 XML Http Request 对象创建异步HTTP请求
loading("正在载入数据请稍候...");
if(url != "" && typeof(url) !="undefined"){
if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
var url = ServerPage + "?action=geturl&url="+encodeURIComponent(url)+"&rnd="+Math.random();
xmlHttp.open("GET",url,true);
// xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
// xmlHttp.setRequestHeader("Content-Type","text/xml;charset=gb2312");
xmlHttp.onreadystatechange = outSongUrl;
xmlHttp.send(null);
getID('songname').innerHTML = a;
}
else{
setTimeout('getSongUrl()',1000);
}
}
}
function outSongUrl(){ //获取服务器返回的消息
var outmsg = "";
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var response = xmlHttp.responseText;
if(response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
throw(response.length == 0 ?"Void serer response.":response);
var responseXml = xmlHttp.responseXML;
var res = responseXml.documentElement;
var sondata = getTag(res,0,"data");
eval(sondata);
}else{
outmsg = "返回HTTP请求失败!";
getID("showmsg").innerHTML = "";
}
}
function getTag(response,i,objTagName){
try{
if(typeof(response.getElementsByTagName(objTagName).firstChild.data) != "undefined")
var nodeValue = response.getElementsByTagName(objTagName).firstChild.data;
}catch(e){
try{
if(typeof(response.getElementsByTagName(objTagName).firstChild.nodeValue) != "undefined")
var nodeValue = response.getElementsByTagName(objTagName).firstChild.nodeValue;
}
catch(e){
var Value = "错误!XML标签["+ objTagName +"]不存在";
getID("showmsg").innerHTML = Value;
}
}
return nodeValue;
}
function loading(a){
var msg = "<img src='../images/loading.gif'>" +a;
if(typeof(a) != "undefined" && a != "") a = msg;
else a = "";
getID("showmsg").innerHTML = a;
}
function getID(a){
return window.document.getElementById(a);
}
</script>
</head>
<body>
<form id="form1" name="form1" action="" method="post">
请输入歌名或歌手名:<input type="text" id="key" name="key" value="" />
<input type="button" name="button1" value="获取" onClick="javascript:geturl();" />
</form>
<div id="showmsg" style="z-index:100;position:absolute;top:2px;right:2px;"></div>
<div id="outdata"></div>
<div id="outurl">
<a id="urln" href="" onmousedown="sd(event,-1);" target="_blank"></a>
<a id="urla" href="" onmousedown="sd(event,0)" target="_blank"><span id="songname"></span></a>
<div id="more"></div><div id="mu"></div><div id="adv"></div>
</div>
</body>
</html>
<?php
///////////// function /////////////////////////////
function geturl($url){
if($url != ""){
$url = str_replace(" ","+",$url);
$fp = file_get_contents($url);
//$fp = iconv("gb2312","utf-8",$fp);
$tag = "/<script>(.*)<\/script>/isU";
preg_match($tag,$fp,$m);
return $m[1];
}
}
function getContent($url){
$r = file_get_contents($url);
//$r = iconv("gb2312","utf-8",$r);
$tag = "/<a href=\"(.*)\" title=\"(.*)\" onclick=\"return ow.*\"+>(.*)<+\/a>/iSU";
preg_match_all($tag,$r,$matchs,PREG_PATTERN_ORDER);
return $matchs;
}
function format($array){
$d = false;
if(is_array($array)){
$url = $array[1];
$title = $array[2];
$name = $array[3];
$rows = count($url);
for($i=0;$i<$rows;$i++){
$d[] = array($url[$i],$title[$i],strip_tags($name[$i]));
}
}
return $d;
}
function formatXML($array){
$d = "";
if(is_array($array)){
foreach($array as $v){
$d .= "<music>\n";
$d .= "<urls><![CDATA[".trim($v[0])."]]></urls>\n";
$d .= "<names><![CDATA[".trim($v[2])."]]></names>\n";
$d .= "</music>\n";
}
}
return $d;
}
function outxml($data,$language = "gb2312"){
header("content-type:text/xml");
header("Expires: Wed,23 Dec 1980 00:30 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
header("Cathe-Control: no-cache,must-revalidate");
header("Pragma: no-cache");
$output = '<?xml version="1.0" encoding="'.$language.'"?>'."\n";
$output .= '<root>'."\n";
$output .= $data;
$output .= '</root>';
echo $output;
exit;
}
?>
[/php]
演示页:http://yuepin.com/Explore/song.php
以下是源码
[php]
<?php
($_GET['key'] == "") ? $key = "love" : $key = $_GET['key'];
$url = "http://mp3.baidu.com/m?f=ms&rf=idx&tn=baidump3&ct=134217728&lf=&rn=&word=".$key."&lm=2";
if($_GET['action'] == "getxml"){
$matchs = getContent($url);
$d = format($matchs);
$d = formatXML($d);
outXML($d);
}elseif($_GET['action'] == "geturl"){
$d = geturl($_GET['url']);
outXML("<data><![CDATA[".$d."]]></data>");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>获取百度歌曲</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" type="text/css" href="images/style.css" />
<style type="text/css">
#outdata{ width:300px; float:left; }
#outurl{ width:500px; float:right; }
li {list-style-type:decimal;}
</style>
<script type="text/javascript">
var xmlHttp = createXmlHttpRequestObject();
var ServerPage = "<?php echo $_SERVER['PHP_SELF']; ?>";
function createXmlHttpRequestObject(){ //创建 XML Http Request 对象
try{
xmlHttp = new XMLHttpRequest();
if(xmlHttp.overrideMimeType)
xmlHttp.overrideMimeType("text/xml");
}
catch(e){
var xmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP",
"Microsoft.XMLHTTP");
for(var i=0;i<xmlHttpVersions.length && !xmlHttp; i++){
try{
xmlHttp = new ActiveXObject(xmlHttpVersions);
}
catch (e) {}
}
}
if(!xmlHttp) alert("错误! 创造 XML Http 请求对象失败!");
else return xmlHttp;
}
function geturl(){ //使用 XML Http Request 对象创建异步HTTP请求
var key = getID('key').value;
var QueryStr = "?key="+key+"&action=getxml&rnd="+Math.random();
loading("正在载入数据请稍候...");
datas = "";
if(key != "" && typeof(key) !="undefined"){
if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
var url = ServerPage + QueryStr;
xmlHttp.open("GET",url,true);
// xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-Type","text/xml;charset=gb2312;");
xmlHttp.onreadystatechange = outurl;
xmlHttp.send(null);
}
else{
setTimeout('geturl()',1000);
}
}
}
function outurl(){ //获取服务器返回的消息
var outmsg = "";
if(xmlHttp.readyState == 4){
if (xmlHttp.status == 200){
var response = xmlHttp.responseText;
if(response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
throw(response.length == 0 ?"Void serer response.":response);
var responseXml = xmlHttp.responseXML;
var res = responseXml.documentElement;
try{
var music = res.getElementsByTagName("music");
var datas = "";
var url = "";
var sname = "";
datas += "<ul>\n";
for(var i=0;i<music.length;i++){
url = getTag(res,i,"urls");
sname = getTag(res,i,"names");
datas += '<li><a href="#" onClick="javascript:getSongUrl(\'' +url+ '\',\'' +sname+ '\')" >' +sname+ "</a></li>\n";
}
datas += "</ul>\n";
getID("outdata").innerHTML = datas;
}catch(e){
getID("showmsg").innerHTML = "你所请求的数据不存在";
}
}
else{
outmsg = "返回HTTP请求失败!";
}
getID("showmsg").innerHTML = "";
}
}
function getSongUrl(url,a){ //使用 XML Http Request 对象创建异步HTTP请求
loading("正在载入数据请稍候...");
if(url != "" && typeof(url) !="undefined"){
if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
var url = ServerPage + "?action=geturl&url="+encodeURIComponent(url)+"&rnd="+Math.random();
xmlHttp.open("GET",url,true);
// xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
// xmlHttp.setRequestHeader("Content-Type","text/xml;charset=gb2312");
xmlHttp.onreadystatechange = outSongUrl;
xmlHttp.send(null);
getID('songname').innerHTML = a;
}
else{
setTimeout('getSongUrl()',1000);
}
}
}
function outSongUrl(){ //获取服务器返回的消息
var outmsg = "";
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
var response = xmlHttp.responseText;
if(response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
throw(response.length == 0 ?"Void serer response.":response);
var responseXml = xmlHttp.responseXML;
var res = responseXml.documentElement;
var sondata = getTag(res,0,"data");
eval(sondata);
}else{
outmsg = "返回HTTP请求失败!";
getID("showmsg").innerHTML = "";
}
}
function getTag(response,i,objTagName){
try{
if(typeof(response.getElementsByTagName(objTagName).firstChild.data) != "undefined")
var nodeValue = response.getElementsByTagName(objTagName).firstChild.data;
}catch(e){
try{
if(typeof(response.getElementsByTagName(objTagName).firstChild.nodeValue) != "undefined")
var nodeValue = response.getElementsByTagName(objTagName).firstChild.nodeValue;
}
catch(e){
var Value = "错误!XML标签["+ objTagName +"]不存在";
getID("showmsg").innerHTML = Value;
}
}
return nodeValue;
}
function loading(a){
var msg = "<img src='../images/loading.gif'>" +a;
if(typeof(a) != "undefined" && a != "") a = msg;
else a = "";
getID("showmsg").innerHTML = a;
}
function getID(a){
return window.document.getElementById(a);
}
</script>
</head>
<body>
<form id="form1" name="form1" action="" method="post">
请输入歌名或歌手名:<input type="text" id="key" name="key" value="" />
<input type="button" name="button1" value="获取" onClick="javascript:geturl();" />
</form>
<div id="showmsg" style="z-index:100;position:absolute;top:2px;right:2px;"></div>
<div id="outdata"></div>
<div id="outurl">
<a id="urln" href="" onmousedown="sd(event,-1);" target="_blank"></a>
<a id="urla" href="" onmousedown="sd(event,0)" target="_blank"><span id="songname"></span></a>
<div id="more"></div><div id="mu"></div><div id="adv"></div>
</div>
</body>
</html>
<?php
///////////// function /////////////////////////////
function geturl($url){
if($url != ""){
$url = str_replace(" ","+",$url);
$fp = file_get_contents($url);
//$fp = iconv("gb2312","utf-8",$fp);
$tag = "/<script>(.*)<\/script>/isU";
preg_match($tag,$fp,$m);
return $m[1];
}
}
function getContent($url){
$r = file_get_contents($url);
//$r = iconv("gb2312","utf-8",$r);
$tag = "/<a href=\"(.*)\" title=\"(.*)\" onclick=\"return ow.*\"+>(.*)<+\/a>/iSU";
preg_match_all($tag,$r,$matchs,PREG_PATTERN_ORDER);
return $matchs;
}
function format($array){
$d = false;
if(is_array($array)){
$url = $array[1];
$title = $array[2];
$name = $array[3];
$rows = count($url);
for($i=0;$i<$rows;$i++){
$d[] = array($url[$i],$title[$i],strip_tags($name[$i]));
}
}
return $d;
}
function formatXML($array){
$d = "";
if(is_array($array)){
foreach($array as $v){
$d .= "<music>\n";
$d .= "<urls><![CDATA[".trim($v[0])."]]></urls>\n";
$d .= "<names><![CDATA[".trim($v[2])."]]></names>\n";
$d .= "</music>\n";
}
}
return $d;
}
function outxml($data,$language = "gb2312"){
header("content-type:text/xml");
header("Expires: Wed,23 Dec 1980 00:30 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
header("Cathe-Control: no-cache,must-revalidate");
header("Pragma: no-cache");
$output = '<?xml version="1.0" encoding="'.$language.'"?>'."\n";
$output .= '<root>'."\n";
$output .= $data;
$output .= '</root>';
echo $output;
exit;
}
?>
[/php]
作者: E网逍遥 发布时间: 2009-11-19
效果很好。
不过建议采集者尽量不要碰百度及GG
不过建议采集者尽量不要碰百度及GG
作者: spser 发布时间: 2009-11-19
有办法绕开百度和GG的。。。。
看分词算法怎么写
看分词算法怎么写
作者: guxiaochuan 发布时间: 2009-11-19
好 学习了 支持
作者: szrq 发布时间: 2009-11-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28