微信公眾號開發-輸入城市查詢天氣
阿新 • • 發佈:2019-01-08
註冊百度天氣api
php程式
ask-weather.php,注意程式中需換上你自己的token和key
<?php
/**
* 查詢天氣 輸入城市名稱比如:北京,即可返回天氣資訊
*/
//define your token
define("TOKEN", "******");//換上你自己的token
$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {
$wechatObj->responseMsg();
}else{
$wechatObj->valid();
}
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA" ];
//extract post data
if (!empty($postStr)){
//解析資料
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
//傳送訊息方ID
$fromUsername = $postObj->FromUserName;
//接收訊息方ID
$toUsername = $postObj->ToUserName;
//訊息型別
$form_MsgType = $postObj->MsgType;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
$tqTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>5</ArticleCount>
<Articles>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
</Articles>
</xml> ";
//事件訊息
if ($form_MsgType == "text") {
//獲取使用者傳送的文字內容
$city = trim($postObj->Content);
if (!empty($city)){
$mykey = "**************************";//換上你自己的key
$url = "http://api.map.baidu.com/telematics/v3/weather?location=".$city."&output=json&ak=".$mykey;
$output = file_get_contents($url);
$contentStr = json_decode($output, true);
if($contentStr['status']=='success')
{
$T[0]['Title']=$contentStr['date']." ".$contentStr['results'][0]['currentCity']."天氣";
//$T[0]['PicUrl']="http://zhengwairen-try2.stor.sinaapp.com/xytq.jpg";
//$T[0]['Url']="http://zhengwairen-try2.stor.sinaapp.com/xytq.jpg";
//上面兩行可以設成你想要的頂部圖片
if(is_array($contentStr['results'][0]['index']))
{
$T[2]['Title']="【pm2.5】".$contentStr['results'][0]['pm25']."\n"."【".$contentStr['results'][0]['index'][0]['title']."】"."(".$contentStr['results'][0]['index'][0]['zs'].") ".$contentStr['results'][0]['index'][0]['des'];
//下一行是洗車指數,感覺不對主題還是不要的好。。
//$T[2]['Title']=$T[2]['Title']."\n"."【".$contentStr['results'][0]['index'][1]['title']."】(".$contentStr['results'][0]['index'][1]['zs'].") ".$contentStr['results'][0]['index'][1]['des'];
//下一行是感冒指數
$T[2]['Title']=$T[2]['Title']."\n"."【".$contentStr['results'][0]['index'][2]['title']."】(".$contentStr['results'][0]['index'][2]['zs'].") ".$contentStr['results'][0]['index'][2]['des'];
//下一行是運動指數
$T[2]['Title']=$T[2]['Title']."\n"."【".$contentStr['results'][0]['index'][3]['title']."】(".$contentStr['results'][0]['index'][3]['zs'].") ".$contentStr['results'][0]['index'][3]['des'];
//下一行是紫外線指數
$T[2]['Title']=$T[2]['Title']."\n"."【".$contentStr['results'][0]['index'][4]['title']."】(".$contentStr['results'][0]['index'][4]['zs'].") ".$contentStr['results'][0]['index'][4]['des'];
}
else
$guowai=1;
for($i=1,$aaa=0;$i<=5;$i++)
{
if($i==2 && $guowai!=1)
continue;
if($guowai==1 && $i==5)
continue;
$T[$i]['Title']=$contentStr['results'][0]['weather_data'][$aaa]['date']." ".$contentStr['results'][0]['weather_data'][$aaa]['temperature']." ".$contentStr['results'][0]['weather_data'][$aaa]['weather']." ".$contentStr['results'][0]['weather_data'][$aaa]['wind'];
$T[$i]['PicUrl']=$contentStr['results'][0]['weather_data'][$aaa]['dayPictureUrl'];
$T[$i]['Url']=$contentStr['results'][0]['weather_data'][$aaa]['dayPictureUrl'];
$aaa++;
}
$resultStr = sprintf($tqTpl,$fromUsername,$toUsername,time(),"news",$T[0]['Title'],$T[0]['Description'],$T[0]['PicUrl'],$T[0]['Url'], $T[1]['Title'],$T[1]['Description'],$T[1]['PicUrl'],$T[1]['Url'], $T[2]['Title'],$T[2]['Description'],$T[2]['PicUrl'],$T[2]['Url'], $T[3]['Title'],$T[3]['Description'],$T[3]['PicUrl'],$T[3]['Url'], $T[4]['Title'],$T[4]['Description'],$T[4]['PicUrl'],$T[4]['Url'],$T[5]['Title'],$T[5]['Description'],$T[5]['PicUrl'],$T[5]['Url']);
//echo $resultStr;
}
}
echo $resultStr;
exit;
//事件訊息
}elseif($form_MsgType=="event")
{
//獲取事件型別
$form_Event = $postObj->Event;
//訂閱事件
if($form_Event=="subscribe")
{
//回覆歡迎文字訊息
$msgType = "text";
$contentStr = "感謝您關注Super King的天氣查詢公眾號[玫瑰]。請輸入要查詢的城市名稱,比如:北京";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, time(), $msgType, $contentStr);
echo $resultStr;
exit;
}
}
}else {
echo "";
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;
}
}
}
?>