1. 程式人生 > >微信公眾號開發-輸入城市查詢天氣

微信公眾號開發-輸入城市查詢天氣

註冊百度天氣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; } } } ?>

測試效果

這裡寫圖片描述