微信公众号最佳实践 ( 8.4)姓名测试

姓名测试

姓名测试是指根据姓名的笔画数以及一定规则数理关系,运用阴阳五行相生相克的道理,来预测姓名的吉凶好坏。

数据获取

姓名测试“打分手机版网站”提供姓名测试服务。

地址为:http://m.1518.com/

经过检验与分析,其实际查询接口地址如下:
http://m.1518.com/xingming_view.php?word=%D5%C5%C8%FD&submit1=%C8%B7%B6%A8&FrontType=1
这里写图片描述
上述接口在浏览器中打开如下图示:
这里写图片描述
查看该网页源代码,内容部分代码显示如下:

<div id="detail" style="margin-top:0px;">
<h3>张三<span style="float:right;"><a href="qiming/"><img src="images/bbqm_shouji_small.jpg" border="0"></a></span></h3>
<dl>
  <dt>得分:<u><strong>96分</strong></u></dt>
  <dd>
    <div>(评分由数理文化得出,仅供娱乐参考)</div>
  </dd>
  <dd>天格:<font color=red></font>
    人格:<font color=red>大吉</font>
    地格:<font color=red>大吉</font><br>
    外格:<font color=red>大吉</font>
    总格:<font color=red>大吉</font><br>
    五行:火  金    </dd>
</dl>
<dl>
  <dt>概述:</dt>
  <dd>
得上级提拔,享父母余德,易成功,心身健全,得长寿享荣誉。    </dd>
</dl>
<dl>
  <dt>总论:</dt>
  <dd>有良好的发展运势,得到意外之助而成功发展,身心健康,家庭幸福,但发展有限,财运不稳之兆。</dd>
</dl>
<dl>
  <dt>性格:</dt>
  <dd>
    为人谦和有礼,遵守公共道德及信用,做事稳重且踏实,对待部属宽厚大方,受到尊敬与欢迎,是一位很好的领导人才。</dd>
</dl>
<dl>
  <dt>意志:</dt>
  <dd>
    意志尚称坚定,但耐力不够,处事有喜新厌旧之象,大都有无法坚持到底。</dd>
</dl>
<dl>
  <dt>事业:</dt>
  <dd>
    任何事业对您都适合,碰到任何困难都有贵人相助,让您一展抱负。</dd>
</dl>
<dl>
  <dt>家庭:</dt>
  <dd>
    一家老幼和乐融洽,子女又孝顺,夫妻亦能和睦相处。</dd>
</dl>
<dl>
  <dt>婚姻:</dt>
  <dd>
    男娶贤淑之妻,婚后感情美满;女嫁谦恭才干之夫,婚后家庭幸福。</dd>
</dl>
<dl>
  <dt>子女:</dt>
  <dd>
    子女都谦恭有礼且有责任感,长大后事业成功并能孝顺父母。</dd>
</dl>
<dl>
  <dt>社交:</dt>
  <dd>
    人缘很好,性情明朗愉快不拘小节,受到人家的欢迎及异性的接近。适合领导及管理之工作。</dd>
</dl>
<dl>
  <dt>精神:</dt>
  <dd>
    生活很愉快,内外圆满,诸事一帆顺。</dd>
</dl>
<dl>
  <dt>财运:</dt>
  <dd>
    所做之事都有成功之象,财源可得,天运五行属水,劳多利少。</dd>
</dl>
<dl>
  <dt>健康:</dt>
  <dd>
    身心健全,少灾。注意血压即可。</dd>
</dl>
<dl>
  <dt>老运:</dt>
  <dd>
    晚景尚称如意,可享清福。</dd>
</dl>
</div>

可以看出,事件内容都放置在div区块下的dl标签中。我们可以通过循环遍历的的方式将相应数据取出来。
这里写图片描述

开发实现

我们使用simple_html_dom来抓取所需要的页面,相应代码如下

fortune.php整体代码如下:

<?php


function getFortuneInfo($keyword)
{
    if ($keyword == ""){
        return "请发送算命+人名,例如“算命张三”";
    }
    if ((strlen($keyword) < 6) || (strlen($keyword) > 12)){
        return "人名长度为2到4个汉字";
    }
    try {
        //引用HTML解析器库文件
         //定义要访问的网址URL,使用函数 mb_convert_encoding() 将“张三”从UTF-8编码转换为GB23121编码,再将字符串以URL编码
        $url = "http://m.1518.com/xingming_view.php?word=".urlencode(mb_convert_encoding($keyword, 'gb2312', 'utf-8'))."&submit1=%C8%B7%B6%A8&FrontType=1";

        //从页面地址中创建文档对象模型
        $html_fotune = file_get_html($url);

        //判断模型是否创建成功
        if (!isset($html_fotune)){
            $html_fotune->clear();
            return "程序检索出错!\n如果经常这样,百度一下。";
        }

        //定义变量,用于保存最终返回内容
        $infomation = "";
        //查找 id 为 “detail”的div元素,并在该元素下找dl元素,符合这样条件的均为解析内容,通过循环遍历的方式来获取,取其纯文本内容。使其正则表达式替换掉空格等内容。最后,判断长度是否超过2000,若超过,则直接退出。
        foreach($html_fotune->find('div[id="detail"] dl') as $item) {
            $curText = $item->plaintext;
            $curText = preg_replace('/\s{2,}/i', ' ', $curText);
            $curText = preg_replace('/\t{2,}/i', ' ', $curText);
            $curText = preg_replace('/:\s/i', ':', $curText);
            $infomation .= trim($curText)."\n";
            if (strlen($infomation) > 2000){break;}
        }

        //清理文档对象,释放资源
        $html_fotune->clear();

        //使用字符串替换等方式继续删除空格等内容
        $infomation = str_replace("\r\n", "\n", $infomation);
        $infomation = str_replace("天格", "\n天格", $infomation);

        //返回文本消息
        return trim($infomation);
    }catch (Exception $e){

    }
}
?>

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);

         if (substr($keyword, 0, 6) == "算命"){
            $keyword = trim(substr($keyword, 6, strlen($keyword)));
            include("fortune.php");
            $contentStr = getFortuneInfo($keyword);
        }

        $resultStr = $this->transmitText($object, $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;
    }

    private function transmitNews($object, $arr_item)
    {
        if(!is_array($arr_item))
            return;

        $itemTpl = "    <item>
                            <Title><![CDATA[%s]]></Title>
                            <Description><![CDATA[%s]]></Description>
                            <PicUrl><![CDATA[%s]]></PicUrl>
                            <Url><![CDATA[%s]]></Url>
                        </item>
                    ";
        $item_str = "";
        foreach ($arr_item as $item)
            $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);

        $newsTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[news]]></MsgType>
                        <Content><![CDATA[]]></Content>
                        <ArticleCount>%s</ArticleCount>
                        <Articles>
                        $item_str</Articles>
                    </xml>";

        $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item));
        return $result;
    }

}

?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值