星座运势
星座运势根据一个人出生日期(阳历)所属的星座,来判定该星座在每一个时间段(一般为日,周,月,年等)发生事情的吉凶。
星座运势–手机新浪网
手机新浪网提供星座运势查询服务,地址如下:
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;
}
}
?>