56听书网音频地址获取

  • 发表于
  • Crack , 日志

有人要用来下载56听书网音频,因为有时候网络用不了,所以分析了一下,在爬虫下也有同样的需求场景。另外推荐一款免费听书APP

56听书网音频地址获取
56听书网音频地址获取

地址分析

首先查看播放页,音频src放在了一对动态生成audio标签里:

<audio id="jp_audio_0" preload="metadata" src="地址"></audio>

在audio地址用了一个简单的加密解密处理,播放页datas变量中调用:

var datas = (FonHen_JieMa('*121*111*117*115*104*101*110*103*47*50*55*57*55*51*47*48*38*50*48*50*57*38*116*99').split('&'));

解密函数在main.js里:

function FonHen_JieMa(u){
	var tArr = u.split("*");
	var str = '';
	for(var i=1,n=tArr.length;i<n;i++){
		str += String.fromCharCode(tArr[i]);
	}
	return str;
}

针对它写个还原就行,例如PHP还原

$str = "*104*116*116*112*115*58*47*47*111*100*46*113*105*110*103*116*105*110*103*46*102*109*47*109*52*97*47*53*97*100*56*51*100*51*54*55*99*98*56*57*49*52*101*49*51*49*51*53*99*50*50*95*49*48*49*48*48*52*50*57*95*54*52*46*109*52*97*38*51*52*50*38*109*52*97";
$audio = '';

$code = explode("*", $str);

$re = '';
foreach (array_filter($code) as $v) {
$re.= chr($v);
}

$re = explode('&', $re);

# $re[0]就是音频地址了。
$audio = $re[0];

其它语言类似,比较简单不一一写了。

其实他就是把这个这个字符串(46*120*109*99*100*110*46*99*111*109*47*103)这样的,用(*)号分割之后,再将每个数字转成了字符再拼接起来的.fromCharCode() 将 Unicode 编码转为一个字符:比如65-->A,解密出来的真实地址主要有.m4a 和 .mp3两种格式。

AJAX音频地址

这里需要注意的是,音频地址有两种,第一种是直接返回音频地址(解密看上面),另一种是ajax获取返回真实地址,当数组三(格式)等于tc时:

if(datas[2]==='tc'){
	url = url.split('/');
	url = url[0]+'/'+url[1]+'/play_'+url[1]+'_'+url[2]+'.htm';
	console.log('tc',url);
	ajaxLoadData('/player/tingchina.php',{url:url});
}else{
	url=url.replace(':82','');
	console.log('else',url);
	$("#fonhen-player").jPlayer("setMedia",{mp3:url,m4a:url}).jPlayer('play');
}

那么操作的时候你只需要curl一下得到返回串就行:

if ($re[2]==='tc') {
$res = explode("/", $re[0]);
$url = '/fonhen_player/tingchina.php?url='.$res[0].'/'.$res[1].'/play_'.$res[1].'_'.$res[2].'.htm';
$result = curl_file_get_contents($url);
$audio = $result['url'];
} else {
$audio = $re[0];
}

提取还原真实地址步骤

  1. 抓取或指定url
  2. 获得datas
  3. 还原真实地址
  4. 下载