我开发/搭建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);
                    }
                }
            })
        }

有什么不懂得帖子留言吧。