微信公众号最佳实践 ( 8.2)星座运势

星座运势

星座运势根据一个人出生日期(阳历)所属的星座,来判定该星座在每一个时间段(一般为日,周,月,年等)发生事情的吉凶。

星座运势–手机新浪网

手机新浪网提供星座运势查询服务,地址如下:http://astro.sina.cn/fortune/starent


实际查询页面的一个地址如下:http://astro.sina.cn/fortune/starent?type=day&ast=1&vt=4

这里写图片描述

这里写图片描述
这里写图片描述这里写图片描述

开发实现

根据上述接口,开发一个根据星座名查询运势的功能,相应代码如下:

astrology.php函数方法代码如下:

<?php

//var_dump(getAstrologyInfo("巨蟹座"));


function getAstrologyInfo($entity)
{
    $capitals = array(
        '白羊座' => '1',
        '金牛座' => '2',
        '双子座' => '3',
        '巨蟹座' => '4',
        '狮子座' => '5',
        '处女座' => '6',
        '天秤座' => '7',
        '天蝎座' => '8',
        '射手座' => '9',
        '摩羯座' => '10',
        '水瓶座' => '11',
        '双鱼座' => '12'
    );
    if (!array_key_exists($entity, $capitals))
    {
        return "星座名只有以下这些:\n白羊座 金牛座 双子座 巨蟹座 狮子座 处女座 天秤座 天蝎座 射手座 摩羯座 水瓶座 双鱼座";
    }
    $astrologyArray[] = array(
    "Title" =>$entity."运势", 
    "Description" =>"", 
    "PicUrl" =>"http://pic14.nipic.com/20110519/2457331_223610757000_2.jpg", 
    "Url" =>"http://astro.sina.cn/fortune/starent?type=day&ast=".$capitals[$entity]."&vt=4");

    return $astrologyArray;
}

?>

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 = "";

        include("astrology.php");
        $contentStr = getAstrologyInfo($keyword);
        $resultStr = $this->transmitNews($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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值