帝国CMS DJ音乐网站解密
帝国CMS DJ音乐网站解密。爱站网查询下这些DJ网站权重还是不错的。貌似看到帝国做的音乐网站很少很少的啊!其实这样的DJ网站对帝国是没有任何难度的。单模型就可以做到的,不需要双模型关联的。其实细心的都会发现就舞曲连播与加入播放器播放才是稍微难点问题,其他跟那文章与下载模型差不多的。至于像程式CMS那样无刷新只需要改为AJAX请求API接口即可!比如我们要勾选连播那就写个JS得了。
//勾选连续播放开始function getdjbyId(elementId) { if (document.getElementById) { return document.getElementById(elementId); } else if (document.all) { return document.all; } else if (document.layers) { return document.layers; } else { return null; }}function get_tags(parentObj, tag) { if (typeof parentObj.getElementsByTagName != 'undefined') { return parentObj.getElementsByTagName(tag); } else if (parentObj.all && parentObj.all.tags) { return parentObj.all.tags(tag); } else { return new Array(); }}function clk(_act, _id) { var v = []; var a = get_tags(getdjbyId(_id), 'input'); var totalItems = a.length; if (_act == 'all') { for (var i = 0; i < a.length; i++) { a.checked = true; } } else if (_act == 'un') { for (var i = 0; i < a.length; i++) { a.checked = !a.checked; } } else if (_act == 'random') { var count = Math.min(Math.floor(totalItems / 3), totalItems); if (count > 0) { var selected = new Set(); while (selected.size < count) { var index = Math.floor(Math.random() * totalItems); selected.add(index); } for (var i = 0; i < totalItems; i++) { a.checked = selected.has(i); } } } else { for (var i = 0; i < a.length; i++) { if (a.value && a.checked) { v.push(a.value); } } } if (_act == 'play') { if (v.length < 3) { layer.msg('至少选择三首歌曲以上吧!', {icon: 5, offset: '300px'}); return; } localStorage.setItem('selecteddjIDs', v.join('_'));// 保存 mid 到 localStorage window.open('/e/MusicSys/play/indexdj.html', 'lplay'); }}小编把勾选的id保存到localStorage,目测大部分网站还是保存到cookie的。(一个 cookie 中的数据不能超过 4KB,而localStorage至少保存5m)
那接下来怎么搞呢?那继续构造一个AJAX发起请求请求后端。
var mid= localStorage.getItem('selectedmusicIDs');const ap = new APlayer({container: document.getElementById('aplayer'),mutex: true,autoplay:true,theme: '#078106',preload:'auto',});$.ajax({url: '/ecmsapi/index.php?mod=duomeiti&act=music',type:"POST",dataType: "json",data:{'mid':mid},success: function (result) {ap.list.add(result.data);}});这样就把AJAX请求成功的勾选的播放列表添加到APlayer音乐播放器了哦 厉害,值得学习 版权允许嘛 那后端接口怎么写呢?细心的老坛们都知道AJAX请求的参数是mid,那后端接收就是$_POST['mid'],这里也是重点记得用帝国过滤下变量,也就是RepPostVar($_POST['mid']),既然都得到所有勾选ID的集合了,那我们就按照SQL in查询ID方便快捷,按照小编的写法如下$path1=RepPostVar($_POST['mid']);$path= str_replace("_",",","$path1");select * from {$dbtbpre}ecms_表名 where id in ($path) order by id desc那要想在加个时间与密钥的防盗链呢?其实也会简单的 。比如我的音乐地址字段是musicurl,上面SQL查询后遍历出他们的结果的时候就加个帝国自带的防盗链函数即可,代码如下
$musicurl=ReturnDSofturl($r['musicurl'],$r['userfen'],'../../',0);
这也是重点,ReturnDSofturl这个帝国的防盗链函数细心的都会发现是是引用另外一个防盗链文件的而默认的DoEnDownpath是没有写的,需要我们自己加个时间密钥的防盗链。此方法防盗链比判断来路更可靠更有效
function DoEnDownpath($url){$secret = 'yuxunyuqi520';//密钥$expire = time()+300*120;//time是当前时间,300表示300秒,也就是说从现在到300秒之内文件不过期 $md5 =base64_encode(md5($secret . $expire, true));//用文件路径、密钥、过期时间生成加密串 $md5 =strtr($md5, '+/', '-_'); $md5 =str_replace('=', '', $md5); $uri =$url.'?st='.$md5.'&e='.$expire; return $uri;} 至于怎么采集那就更简单了,虽然DJ音乐模型增加了下载的多值字段,其他的就是跟采集文章没有任何区别了。火车头发布模块里面新增表单名downpathf,防止与帝国默认的下载字段冲突。那火车头发布接口就新增代码入库多值字段$vid_name = explode('|||',$_POST['downpathf']); //发布模块里面表单名是downpathfforeach ($vid_name as $shuzu=>$str){ $v = explode("@@@",$str); $_POST['downname'][] = $v; $_POST['downpath'][] = $v; $_POST['downuser'][] = $v; $_POST['fen'][] = '0'; } 可以的,搞搞明年年底再卖他个几个w 厉害了。。。。。 代码牛逼 这几天发了不少东西。 很不错的分享
页:
[1]