添加SongTaste音乐外链app
作者:matrix 被围观: 2,712 次 发布时间:2013-09-24 分类:兼容并蓄 | 无评论 »
SongTaste已经不复存在~
转换地址: http://link.hhtjim.com
songtaste.com的音乐打开速度是比较快的,比起百度网盘就songtaste和xiaomi的速度很理想,外链起来比较不错。
网上找了很多SongTaste外链的方法,大多数都是pc端程序,没看到什么php源码之类的东西,很是蛋疼。
so ,也学着看看播放页面的源代码,结果找到了外链的方法。 哈哈。
打开播放页面会看到有http://image.songtaste.com/inc/main.js这样的js代码,其中的有关代码是改写mp3文件信息的:
//重新改写开始
function GetSongType(md5code)
{
switch(md5code)
{
case "7d99bb4c7bd4602c342e2bb826ee8777":
return ".wma";
break;
case "25e4f07f5123910814d9b8f3958385ba":
return ".Wma";
break;
case "51bbd020689d1ce1c845a484995c0cce":
return ".WMA";
break;
case "b3a7a4e64bcd8aabe4cabe0e55b57af5":
return ".mp3";
break;
case "d82029f73bcaf052be8930f6f4247184":
return ".MP3";
break;
case "5fd91d90d9618feca4740ac1f2e7948f":
return ".Mp3";
break;
}
}
//Media Link
function playmedia1(playIcon, strID,strURL,intWidth,intHeight,type, Head,st_songid,t) {
playIcon.replace(" ","%20");
strID.replace(" ","%20");
var objDiv=document.getElementById(strID);
document.getElementById(playIcon).style.display='none';
if (!objDiv) return false;
if (objDiv.style.display!='none') {
objDiv.innerHTML='';
objDiv.style.display='none';
} else {
if(strURL.indexOf('rayfile')>0) {
var SongUrl = Head + strURL + GetSongType(type);
objDiv.innerHTML=makemedia_html(SongUrl,intWidth,intHeight);
objDiv.style.display='block';
} else {
$.ajax({
type:'POST',
url:'/time.php',
cache:false,
data:'str='+strURL+'&sid='+st_songid+'&t='+t,
dataType:'html',
success:function(data){
//alert(data);
if(data){
objDiv.innerHTML=makemedia_html(data,intWidth,intHeight);
objDiv.style.display='block';
if(data.indexOf('duomi.com') > 0){
$("#show_logo").show();
}
}
},
error:function(data){
//alert('error');
}
});
}
}
}
//Media Build
function makemedia_html (SongUrl,intWidth,intHeight) {
var strHtml ="<object id='MediaPlayer1' width='"+ intWidth +"' height='"+ intHeight +"' classid='CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95' codebase='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715' align='baseline' border='0' standby='Loading Microsoft Windows Media Player components...' type='application/x-oleobject'>";
strHtml+="<param name='invokeURLs' value='0'>";
strHtml+="<param name='AutoRewind' value='1'>";
strHtml+="<param name='FileName' value=\""+ SongUrl +"\">";
strHtml+="<param name='ShowControls' value='1'>";
strHtml+="<param name='ShowPositionControls' value='0'>";
strHtml+="<param name='ShowAudioControls' value='1'>";
strHtml+="<param name='ShowTracker' value='1'>";
strHtml+="<param name='ShowDisplay' value='0'>";
strHtml+="<param name='ShowStatusBar' value='1'>";
strHtml+="<param name='AutoSize' value='0'>";
strHtml+="<param name='ShowGotoBar' value='0'>";
strHtml+="<param name='ShowCaptioning' value='0'>";
strHtml+="<param name='AutoStart' value='1'>";
strHtml+="<param name='PlayCount' value='100'>";
strHtml+="<param name='AnimationAtStart' value='0'>";
strHtml+="<param name='TransparentAtStart' value='0'>";
strHtml+="<param name='AllowScan' value='0'>";
strHtml+="<param name='EnableContextMenu' value='1'>";
strHtml+="<param name='ClickToPlay' value='0'>";
strHtml+="<param name='DefaultFrame' value='datawindow'>";
strHtml+="<embed src=\""+ SongUrl +"\" align='baseline' border='0' width='"+ intWidth +"' height='"+ intHeight +"' type='application/x-mplayer2'";
strHtml+=" pluginspage='http://www.microsoft.com/isapi/redir.dll?prd=windows&sbp=mediaplayer&ar=media&sba=plugin&'";
strHtml+="name='MediaPlayer' showcontrols='1' showpositioncontrols='0' showaudiocontrols='1' showtracker='1' showdisplay='0' showstatusbar='1' autosize='0' showgotobar='0' showcaptioning='0' autostart='1' autorewind='1'";
strHtml+="animationatstart='0' transparentatstart='0' allowscan='1' enablecontextmenu='1' clicktoplay='0' defaultframe='datawindow' invokeurls='0' playcount='100'> </embed></object>";
return strHtml;
}
function wrtSongLink(strURL,intWidth,intHeight,type, Head)
{
SongUrl = Head + strURL + GetSongType(type);
if(SongUrl.length > 35)
SongUrl1 = SongUrl.slice(0,24)+"......"+SongUrl.slice(-10)
else
SongUrl1 = SongUrl
document.write("下载地址 <a href='"+SongUrl +"'>"+SongUrl1+"</a>")
//document.write("<a href=\"#\" onclick=\"window.open('"+Head + strURL + GetSongType(type) +"','','width=0,height=0,top=0,left=0');\">点此下载</a>")
}
//重新改写结束
还有播放页面源代码的<script>:
<script>
var flashvars = {};
var params = {
menu: "false",
scale: "noScale",
allowFullscreen: "true",
allowScriptAccess: "always",
wmode: "transparent"
};
params.allowScriptAccess = "always";
params.hasPriority = "true";
params.swliveconnect = "true";
var attributes = {
id: "STWebPlayer"
};
swfobject.embedSWF("/stflashplayer/STPlayer_1.10.swf", "STWebPlayer", "360", "70", "10.0.0", "/stflashplayer/expressInstall.swf", flashvars, params, attributes);
function swfReady() {
var strURL = "3fa754e9c0064b06c4737445855dc9b16fd3603796f3703440677bdc89365656ecf18f4d2c63d2c42f1ced3fe51ffc51";
var Head = "http://m4.";
var type = "b3a7a4e64bcd8aabe4cabe0e55b57af5";
var iscopy = "0";
if (strURL.indexOf('rayfile') > 0 && iscopy <= 0) {
var SongUrl = Head + strURL + GetSongType(type);
var obj = {
name: "鲸鱼的童话",
url: SongUrl,
isShowLogo: "0",
isAutoReplay: 1,
isAutoPlay: 0
};
setSongInfo(obj);
}
flashplay("3fa754e9c0064b06c4737445855dc9b16fd3603796f3703440677bdc89365656ecf18f4d2c63d2c42f1ced3fe51ffc51", "1752907", "0");
ListenLog("1752907", "0");
}
function setSongInfo(obj) {
try {
var stPlayerSWFobj = swfobject.getObjectById("STWebPlayer");
stPlayerSWFobj.setSongInfo(obj);
} catch(e) {
alert(e.description);
}
}
function playAudio() {
var stPlayerSWFobj = swfobject.getObjectById("STWebPlayer");
stPlayerSWFobj.playAudio();
}
function pauseAudio() {
var stPlayerSWFobj = swfobject.getObjectById("STWebPlayer");
stPlayerSWFobj.pauseAudio();
}
function playerPlayStart() {}
function playerPaused() {}
function flashplay(strURL, st_songid, t) {
$.ajax({
type: 'POST',
url: '/time.php',
cache: false,
data: 'str=' + strURL + '&sid=' + st_songid + '&t=' + t,
dataType: 'html',
success: function(data) {
if (data) {
var obj = {
name: "鲸鱼的童话",
url: data,
isShowLogo: "0",
isAutoReplay: 1,
isAutoPlay: 0
};
setSongInfo(obj);
if (data.indexOf('duomi.com') > 0) {
$("#show_logo").show();
}
}
},
error: function(data) {}
});
}
</script>
结果没看到怎样还原加密的信息,不过发现了SongTaste音乐外链的基本方法和官方接口:/time.php
time.php的参数str值就是上面33行处的3fa754e9c0064b06c4737445855dc9b16fd3603796f3703440677bdc89365656ecf18f4d2c63d2c42f1ced3fe51ffc51这东东。
形如:/time.php?str=3fa754e9c0064b06c4737445855dc9b16fd3603796f3703440677bdc89365656ecf18f4d2c63d2c42f1ced3fe51ffc51
之后会返回随时间变化的外链地址,形如:
http//m4.songtaste.com/201309232330/57630f6a60a2534c0221a4783b5a9f4c/4/40/40e746ed9ca918b0f8a4322f5fd87c70.mp3
原理:
SongTaste音乐外链原理也就用php的preg_match_all函数正则匹配提取【var strURL = "】和【;/】之间的字符串,之后用substr(抓取其中你需要的值。这就取得了那一串串加密后的东东。然后再利用的time.php?tr=取得暂时的外链地址。
提供外链接口形如:https://www.hhtjim.com/songtaste.php?url=http://www.songtaste.com/song/2932328/
再弄个链接转换的html或者php,例如http://d.hhtjim.com/st.php,界面那就是高端大气上档次!
之后结合伪静态那就实现了完全外链,也就没有时间限制了。因为每次使用的都是静态外链地址(形如:https://www.hhtjim.com/st/516159.mp3),之后php会根据目前此时的post来获取外链地址,也就不会有过期的说法了。
伪静态:
RewriteRule ^st/([0-9]+)\.mp3?$ /songtaste.php?url=http://songtaste.com/song/$1 [L]
下面外链测试:http://www.songtaste.com/song/1999664/
外链转换地址:http://d.hhtjim.com/st.php 亲自试试~