一个“周公解梦”小程序的实现,前端和后台源码分析-附完整项目

本文介绍了一款基于PHP的周公解梦小程序接口设计,通过爬虫技术从周公解梦网获取数据,实现了搜索和词条详情功能。小程序与后端接口采用时效性签名验证,提高安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前写的一个小东西,虽然开发出来,但是由于涉及到封建迷信并不能上架。对于这个问题,我也很是不解,现在各个平台星座类的小程序大行其道,弄点传统文化娱乐项目就成了封建迷行了。

首先需要声明,本项目的小程序源码参考了此项目。另,本项目仅提供用于学习目的,若不遵守,后果自负。

1.项目效果

搜索页面
搜索结果页面
词条解释页面

2.数据来源

前端项目仅提供页面程序,数据来源于周公解梦网
需要使用php提供搜索和详情两个接口。

2.1搜索接口源码

<?php
/**
 * Created by PhpStorm.
 * User: ucsheep
 */

require 'vendor/autoload.php';
use QL\QueryList;

$timestamp = intval($_GET['timestamp']);
$keyword = $_GET['keyword'];
$sign = $_GET['sign'];

//第一道屏障,发起请求时间戳与请求到达服务端时间戳之差不得超过8s,否则视为非法请求
$xtime = time()-$timestamp;
if($xtime >= 8||$xtime<-5){
    echo json_encode(array('mstate' => -1,'msg' => '非法请求'));
    return;
}
//第二道屏障,请求参数合并后md5加密,服务端做校验,若校验失败视为非法请求
$real_sign = md5('da_'.$timestamp.'_'.$keyword.'_cn');
if($sign != $real_sign){
    echo json_encode(array('mstate' => -2,'msg' => '非法请求'));
    return;
}
//正式处理请求
$data = QueryList::get('https://m.zgjm.org/search/?wd='.$keyword)
    // 设置采集规则
    ->rules([ 
        'itemText'=>array('#main > div.libox.ibox.box > ul > li:nth-child(n) > a','text'),
        'itemPath'=>array('#main > div.libox.ibox.box > ul > li:nth-child(n) > a','href')
    ])
    ->queryData();

for($i = 0;$i<sizeof($data);$i++){
  $tmp_itemPath = $data[$i]['itemPath'];
  $data[$i]['itemPath'] = base64_encode($tmp_itemPath);
}

echo json_encode(array('data' => $data,'mstate' => 0,'msg' => 'success'));

如上,提供了一个具有时效性签名验证的搜索接口。

2.2详情接口

<?php
/**
 * Created by PhpStorm.
 * User: ucsheep
 */

require 'vendor/autoload.php';
use QL\QueryList;

$timestamp = intval($_GET['timestamp']);
$item_path = $_GET['itempath'];
$sign = $_GET['sign'];

//第一道屏障,发起请求时间戳与请求到达服务端时间戳之差不得超过8s,否则视为非法请求
$xtime = time()-$timestamp;
if($xtime >= 8||$xtime<-5){
    echo json_encode(array('mstate' => -1,'msg' => '非法请求'));
    return;
}
//第二道屏障,请求参数合并后md5加密,服务端做校验,若校验失败视为非法请求
$real_sign = md5('da_'.$timestamp.'_'.$item_path.'_cn');
if($sign != $real_sign){
    echo json_encode(array('mstate' => -2,'msg' => '非法请求'));
    return;
}

$item_path = base64_decode($item_path);
//正式处理请求
$ql = QueryList::get('https://m.zgjm.org'.$item_path);
$data = $ql->find('#read-content > p:nth-child(n)')->texts();

for($i = 0;$i<sizeof($data);$i++){
  $data[$i] = str_replace("(周公解梦官网m.zgjm.org)","",$data[$i]);
  $data[$i] = str_replace("解梦","心理分析",$data[$i]);
  //这里有人看懂了没?对抗平台审核,把敏感词替换
}

echo json_encode(array('data' => $data,'mstate' => 0,'msg' => 'success'));

上述代码,提供了一个时效性签名验证词条详情接口。
就喜欢PHP,写点小东西方便又快捷。

3.小程序源码

3.1搜索核心代码

 var mTimestamp = Math.round(new Date().getTime() / 1000);
        var mSign = md5("da_" + mTimestamp + "_" + key + "_cn");

        wx.request({
            url: 'https://your-server/api/search.php',
            data: {
                timestamp: mTimestamp,
                keyword: key,
                sign: mSign
            },
            method: 'GET',
            header: {
                'content-type': 'application/json'
            },
            success(res) {
                console.log(res)
                for (let i in res.data.data) {
                    let item = res.data.data[i]
                    arr.push(item)
                }
                that.setData({
                    isLoading: false,
                    results: arr
                })
             }
        })

3.2 词条详情核心代码

var mTimestamp = Math.round(new Date().getTime() / 1000);
        var mSign = md5("da_" + mTimestamp + "_" + itempath + "_cn");

        wx.request({
            url: 'https://your-server/api/details.php',
            data: {
                timestamp: mTimestamp,
                itempath: itempath,
                sign: mSign
            },
            success(res) {
                for (let i in res.data.data) {
                    let item = res.data.data[i]
                    arr.push(item)
                }
                that.setData({
                    isLoading: false,
                    results: arr
                })
             }
        })

4.总结

本项目使用php实现了一个简易的爬虫,可以向数据源网页发起请求并提取关键数据,并进行包装返回给小程序客户端。小程序客户端和后台接口之间借助hash形式实现具有实效性的签名验证,可以加大被别人抓包和恶意调用(PS:只是可以提高破解成本而已,类似我写的解析系列,逆向js其实也没有什么难度)。

5.完整项目源码下载

下载地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ucsheep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值