我开发/搭建VirMach闪购网站的那些事
前言
今天是个特殊的日子,一年一度的virmach的小鸡开始闪购了,又可以一起愉快的熬夜抢购了
起初搞这个闪购界面就是为了方便自己,并不是为了aff,但是最后还是走上affman的道路了
毕竟拿别人的aff了,别的啥也不会(总不能让我给你们磕个头吧),就会写点简单的代码。分享一下
前端界面就不多说了,我签名站的没有加密(右键->查看代码),MJJ们这肯定会的,自己看就可以了
主要讲一下主要的,你们都好奇PHP那一块后端写的什么,那么好,上代码(我代码渣渣,都是百度来的,大佬轻喷)
后端
1、数据分页查询
$pageIndex = isset($_GET["pageIndex"]) ? $_GET["pageIndex"] : 1;
$pageSize = isset($_GET["pageSize"]) ? $_GET["pageSize"] : 8;
$year = isset($_GET["year"]) ? $_GET["year"] : '2018';
$keywords = isset($_GET["keywords"]) ? $_GET["keywords"] : '';
if($year == "2018"){
$table = 'virmach_xxx';
$where = " where time > 1514736000000 AND time < 1546272000000";
}
if($year == "2019"){
$table = 'virmach_list';
$where = " where time > 1546272000000 AND time < 1577808000000";
}
if($year == "2020"){
$table = 'virmach_list';
$where = " where time > 1577808000000 AND time < 1609430400000";
}
if($year == "2021"){
$table = 'virmach_list';
$where = " where time > 1609430400000 AND time < 1640966400000";
}
if($year == "2022"){
$table = 'virmach_list';
$where = " where time > 1640966400000 AND time < 1672502400000";
}
if (!empty($keywords)) {
// $where .= " AND CONCAT(IFNULL(`json`,'')) LIKE '%{$keywords}%' ";
$where .= " AND price LIKE '%{$keywords}%' ";
}
$where .= ' order by time DESC';
$item_arr = page($pageIndex, $pageSize, $table, $where);
echo json_encode($item_arr, JSON_UNESCAPED_UNICODE);
2、英文地址改为中文
$location = str_ireplace("BUFFALO, NY", "水牛城, 纽约州", $location);
$location = str_ireplace("LOS ANGELES, CA", "洛杉矶, 加州", $location);
$location = str_ireplace("DALLAS, TX", "达拉斯, 德克萨斯州", $location);
$location = str_ireplace("FRANKFURT, DE", "法兰克福, 德国", $location);
$location = str_ireplace("SEATTLE, WA", "西雅图, 华盛顿州", $location);
$location = str_ireplace("AMSTERDAM, NL", "阿姆斯特丹", $location);
$location = str_ireplace("ATLANTA, GA", "亚特兰大, 佐治亚州", $location);
$location = str_ireplace("PISCATAWAY, NJ", "皮斯卡特维, 新泽西州", $location);
$location = str_ireplace("CHICAGO, IL", "芝加哥, 伊利诺伊州", $location);
$location = str_ireplace("SAN JOSE, CA", "圣何塞, 加州", $location);
$location = str_ireplace("PHOENIX, AZ", "凤凰城, 亚利桑那州", $location);
$location = str_ireplace("Piscataway, NY", "皮斯卡特维, 纽约州", $location);
return $location;
3、核心-价格
if (!($e && $e['virt'] && $e['cpu'] && $e['ram'] && $e['hdd'] && $e['bw'] && $e['ips'] && $e['price'] && $e['location'])) {
return [];
}
$e['price'] = str_replace('<span>\/yr<\/span>',"",$e['price']);
preg_match("/(\d+)\.?(\d+)/", $e['price'], $r);
$r = (float)$r[0];
if (!$r) {
return [];
}
$t = (5 * $e['cpu'] + (float)($e['ram']) / 1024 * 3 + $e['hdd'] * (5 - log($e['hdd']) / 2 / log(4.5)) / 10 + 4 * ($e['ips'] - 1)) / (preg_match("/KVM/i", $e['virt']) ? 1 : 2);
$t*= 1.1;
if ($e['windows'] == true) {
$t+= min(0.15 * $t, 6);
}
if ($e['ram'] < 256) {
$t*= 0.8;
}
if ($e['ram'] < 512) {
$t*= 0.85;
}
if ($e['ram'] < 1024) {
$t*= 0.9;
}
if ($e['hdd'] < 5) {
$t*= 0.25;
}
if ($e['bw'] < 200) {
$t*= 0.25;
}
$a = 100 - floor($r / $t * 100);
$html = '';
$text = '';
$color = '70c3ff';
$class = 'Discounts0';
$rank = '0';
if ($a >= 65) {
$rank = '1';
$text = '惊人折扣,快抢!';
} else if ($a >= 45) {
$rank = '2';
$text = '绝对超值!';
} else if ($a >= 35) {
$rank = '3';
$text = '超值!';
} else if ($a >= 20) {
$rank = '4';
$text = '一般。';
} else if ($r <= 7) {
$rank = '5';
$text = '便宜货。';
} else if ($e['hdd'] >= 50) {
$rank = '6';
$text = '大硬盘。';
} else if ($e['bw'] >= 2048) {
$rank = '7';
$text = '高流量。';
} else if ($e['ips'] > 1) {
$rank = '8';
$text = '多IP。';
} else if ($e['cpu'] >= 4) {
$rank = '9';
$text = '多核心。';
} else if ($e['ram'] >= 4000) {
$rank = '10';
$text = '大内存。';
}
return ['price' => $r, 'percentOff' => $a, 'value' => $t, 'text' => $text, 'rank' => $rank];
4、核心数据获取,这一块就比较有意思了,我好好说说
数据起初virmach找我,给我加白名单,我就加呗,但是给我加上之后,我可能是获取的太快了,还是怎么滴。
IP直接给屏蔽了,苦于我怎么弄数据,就是弄不到。就动起了歪脑筋,别学我哈,不是还有其他的监控站么。
直接获取他们的不就行了,反正速度够快,就不会有延迟。反正看到的站都搞了一下,代码我就不发了。别被其他大佬打。他们设置的验证很好过的。嘿嘿。
其实是自己沙雕,找个干净的IP把速度搞慢一点,10秒左右就可以。搞了一圈,又回到了原点。
请求地址 https://billing.virmach.com/modules/addons/blackfriday/new_plan.json
知识点,请求的时候加上?_=1638186706656
(时间戳)。这样可以让请求到的数据都是最新的。
$sql_str = "SELECT count(1) as count FROM `virmach_lxxx` where price ='".$temp['price']."' and planid ='".$temp['planid']."' and ram ='".$temp['ram']."' and bw ='".$temp['bw']."'";
$result = $db->getRow($sql_str);
if ($result['count'] == "0") {
$result = $db->insert("virmach_list", $temp);
$exce_length = 1;
//写入文件
file_put_contents('new.json','{"version":"' . $version . '","data":' . $temp["json"] . '}');
}else{
if($temp['ended'] == true){
//写入文件
file_put_contents('new.json','{"version":"' . $version . '","data":' . $temp["json"] . '}');
$exce_length = 2;
}
}
判断数据库,入口就行
前端方面说说功能吧。
1、中文播报
function text2audio(zhText) {
zhText = encodeURI(zhText);
var audio= new Audio("http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=5&text="+ zhText);//这里的路径写上mp3文件在项目中的绝对路径
audio.play();//播放
}
2、notify弹窗
function notifyMe(data) {
Notification.requestPermission(status=>{
if(status === 'granted'){
var text = 'IP:' + data.ips + ' 价格:$' + data.price + ' /y\r\n';
text += '核心:' + data.cpu + ' H 内存:' + data.ram + ' M\r\n';
text += '磁盘:' + data.hdd + ' G 流量:' + data.bw + ' G\r\n';
text += '位置:' + unescape(data.location);
var rank_text = '';
if(data.discount.text != ""){
rank_text = '【' + data.discount.text + '】 - ' ;
}
var notify = new Notification(rank_text + 'VirMach.Me - 闪购提醒',{
icon:'./favicon.png',
body:text
})
// 点击时桌面消息时触发
notify.onclick = ()=>{
// 跳转到当前通知的tab,如果浏览器最小化,会将浏览器显示出来
//在另外新建窗口中打开窗口
var url = 'https://billing.virmach.com/aff.php?aff=8971&pid=0179&billingcycle=annually';
window.open(url);
}
}
})
}
有什么不懂得 留言吧。
免责声明:
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
发表评论: