周公解梦
梦是人类精神生活的一种很特殊的现象。人对梦的思考,属于人对自身的一种审视,因而也是一种自我认识。梦,是窥探内心的一面隐秘之境,是另一种虚幻却真实的人生体验。
数据提供
提供周公解梦的网站很多,可以发现能解的数据在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;
}
}
?>