微信公众号最佳实践 ( 8.3)周公解梦

周公解梦

梦是人类精神生活的一种很特殊的现象。人对梦的思考,属于人对自身的一种审视,因而也是一种自我认识。梦,是窥探内心的一面隐秘之境,是另一种虚幻却真实的人生体验。

这里写图片描述

数据提供

提供周公解梦的网站很多,可以发现能解的数据在5000个左右,我们可以选择一家网站将其内容收集下来做成自己的数据库。

周公解梦数据表结构及内容如下SQL所示:


--
-- 表的结构 `dream`
--

DROP TABLE IF EXISTS `dream`;
CREATE TABLE IF NOT EXISTS `dream` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `title` varchar(20) NOT NULL,
  `content` varchar(1024) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB ;


--
-- 转存表中的数据 `dream`
--

INSERT INTO `dream` (`id`, `title`, `content`) VALUES
(1, '父母', '梦见自己成了幼儿与父母相处幸运的事情即将发生。可以尝到美昧可口的咖啡、得到电影招待券等等。你将不觉莞尔一笑。梦见和父母快乐地有说有笑家中将起波澜。对父母将感觉厌烦,会有离家出走的行为。你还未成年,不要因轻率急躁而遗恨终身,要多多自重。梦见父母离婚朋友运不如意。你无心的一句话,将引起误解。如果置之不理,朋友将离你而去,要设法解释清楚才好。梦见受母亲疼爱在爱情方面将有乐事。约会的地方最好尽量选择幽静的地方,诸如图书馆、博物馆、黄昏的公园等等。梦见被父亲大骂一顿健康方面有不良征兆。尤其要注意的是意外事故,在上下车、横穿车道时要特别小心哪。梦见离开父母而成孤苦伶仃爱情方面将有很大的幸运。如果有意中人,不必迟疑可以进攻,绝对不会被封杀出局。因为这是梦中注定的'),
(2, '护士', ' 已婚女子梦见护士不久会怀孕,得贵子。少女梦见有一群美貌的护士很快要出嫁。少女梦见和护士争吵婚事不顺利,迟迟不能出嫁。病人梦见护士痛苦很快要过去。'),
(3, '老师', ' 梦见受老师称赞在学业方面乌云密布。由于连日的熬夜,在课堂上竟开始打陀结果受到老师批评。这就是所谓反梦。梦见受老师责骂家人关系极佳。对双亲能克尽孝道,你将令人刮目相看。也许每个月的零用钱会大幅度增加呢。梦见到老师家里拜访人际关系的运势衰退的预兆。头顶上有一颗争执之星,要注意你的言行举止,防止争执,尤其脾气不可暴躁。梦见正在上课读书运渐入佳境。将有指点迷津的同学出现,以此为契机,你的读书欲将大增。也就是说,你将会有很大的干劲。要努力喔! 梦见遇见校长这是上学恐惧症。不要一天到晚抱着书本,过分拘泥于成绩,有时也要放松心情,尽量参加其他活动。否则你的神经将很快衰弱。梦见异性老师向你亲密攀谈爱情运将下降,情人之间的感情开始变得索然无味,最好改变一下约会的方式'),
...

这里写图片描述

开发实现

当公众号收到用户发送 “梦见*** ”的文本消息的时候,相应的处理代码如下:

private function receiveText($object)
    {
        $keyword = trim($object->Content);
        $resultStr = "";
        $contentStr = "";
        //先判断前两个字是否为“梦见”,如果是的话,取出后面的文字,并且传递到获取解梦结果的函数中,
        //获得内容后,在封装文本消息返回。
        if (substr($keyword, 0, 6) == "梦见"){
            $keyword = trim(substr($keyword, 6, strlen($keyword)));
            include("dream.php");
            $contentStr = getDreamInfo($keyword);
        }

        $resultStr = $this->transmitText($object, trim($contentStr));
        return $resultStr;
    }

解梦的代码实现如下:

<?php


function getDreamInfo($content)
{
    $dbname = "app_dq095";
    $host = "w.rdc.sae.sina.com.cn";
    $port = "3306";
    $user = "4k514n103z";
    $pwd = "2402314li2j1i5im1xy2xizj5y332w2x41k2z203";

    /*接着调用mysql_connect()连接服务器*/
    $db = mysql_connect($host,$user,$pwd);

    if(!$db){
        die("Connect Server Failed: " . mysql_error($db));
    }

    /*连接成功后立即调用mysql_select_db()选中需要连接的数据库*/
    if (!mysql_select_db($dbname)) {
        die("Select Database Failed: " . mysql_error($db));
    }
    mysql_query("set names utf-8",$db); 

    $mysql_table = "dream";
    $mysql_state = "SELECT * FROM `".$mysql_table."` WHERE `title` LIKE '%".$content."%'";
    mysql_select_db($mysql_database, $con);
    $result = mysql_query($mysql_state);

    $contentStr = "周公睡觉去了";
    while($row = mysql_fetch_array($result))
    {
        if (isset($row["content"]) && ($row["content"] != "")){
            $contentStr = $row["content"];
        }
        break;
    }
    mysql_close($con);
    return $contentStr;
}

?>

index.php整体代码实现如下:

<?php

define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {
    $wechatObj->responseMsg();
}else{
    $wechatObj->valid();
}
class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }

    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );

        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }

    public function responseMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)){
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);

            switch ($RX_TYPE)
            {
                case "text":
                    $resultStr = $this->receiveText($postObj);
                    break;
                case "event":
                    $resultStr = $this->receiveEvent($postObj);
                    break;
                default:
                    $resultStr = "";
                    break;
            }
            echo $resultStr;
        }else {
            echo "";
            exit;
        }
    }

    private function receiveText($object)
    {
        $keyword = trim($object->Content);
        $resultStr = "";
        $contentStr = "";

        if (substr($keyword, 0, 6) == "梦见"){
            $keyword = trim(substr($keyword, 6, strlen($keyword)));
            include("dream.php");
            $contentStr = getDreamInfo($keyword);
        }

        $resultStr = $this->transmitText($object, trim($contentStr));
        return $resultStr;
    }

    private function receiveEvent($object)
    {
        $contentStr = "";
        switch ($object->Event)
        {
            case "subscribe":
                $contentStr = "欢迎关注,发送梦见+内容,为您解梦";
        }
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }

    private function transmitText($object, $content, $flag = 0)
    {
        $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[text]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        <FuncFlag>%d</FuncFlag>
                    </xml>";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
        return $resultStr;
    }
}

?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值