微信開發(從申請微信到註冊上線的一整套流程)第四章 實現天氣預報功能
阿新 • • 發佈:2019-02-17
這一章裡,我們來實現微信上的天氣預報功能,我們使用方倍工作室的天氣預報介面,其介面為
http://apix.sinaapp.com/weather/
這個介面的引數appkey為公眾號原始id,引數city為城市名
例如,查詢深圳的天氣預報時,將city值做urlencode,最終訪問的url為
http://apix.sinaapp.com/weather/?appkey=trialuser&city=%E6%B7%B1%E5%9C%B3
返回的內容如下
[ { "Title": "深圳天氣預報", "Description": "", "PicUrl": "", "Url": "" }, { "Title": "【實況】溫度18℃ 溼度59%% 東北風2級 釋出時間:08:55", "Description": "", "PicUrl": "", "Url": "" }, { "Title": "【舒適】建議著長袖T恤、襯衫加單褲等服裝。年老體弱者宜著針織長袖襯衫、馬甲和長褲。", "Description": "", "PicUrl": "", "Url": "" }, { "Title": "11月19日 週三 晴 23℃~17℃ 無持續風向 微風 日出日落:06:38~17:39", "Description": "", "PicUrl": "http://discuz.comli.com/weixin/weather/icon/d00.jpg", "Url": "" }, { "Title": "11月20日 週四 多雲 25℃~17℃ 無持續風向 微風 日出日落:06:39~17:38", "Description": "", "PicUrl": "http://discuz.comli.com/weixin/weather/icon/d01.jpg", "Url": "" }, { "Title": "11月21日 週五 多雲 26℃~18℃ 無持續風向 微風 日出日落:06:40~17:38", "Description": "", "PicUrl": "http://discuz.comli.com/weixin/weather/icon/d01.jpg", "Url": "" } ]
我們在微信中呼叫這一介面來獲取天氣預報資訊,實現程式碼如下
<?php /* 洋洋的部落格 CopyRight 2014 All Rights Reserved */ define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); if (!isset($_GET['echostr'])) { $wechatObj->responseMsg(); }else{ $wechatObj->valid(); } class wechatCallbackapiTest { //驗證簽名 public function valid() { $echoStr = $_GET["echostr"]; $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){ echo $echoStr; exit; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $this->logger("R ".$postStr); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); $result = ""; switch ($RX_TYPE) { case "event": $result = $this->receiveEvent($postObj); break; case "text": $result = $this->receiveText($postObj); break; } $this->logger("T ".$result); echo $result; }else { echo ""; exit; } } private function receiveEvent($object) { switch ($object->Event) { case "subscribe": $content = "歡迎關注洋洋的部落格 "; break; } $result = $this->transmitText($object, $content); return $result; } private function receiveText($object) { $keyword = trim($object->Content); $url = "http://apix.sinaapp.com/weather/?appkey=".$object->ToUserName."&city=".urlencode($keyword); $output = file_get_contents($url); $content = json_decode($output, true); $result = $this->transmitNews($object, $content); return $result; } private function transmitText($object, $content) { if (!isset($content) || empty($content)){ return ""; } $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content); return $result; } private function transmitNews($object, $newsArray) { if(!is_array($newsArray)){ return ""; } $itemTpl = " <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> "; $item_str = ""; foreach ($newsArray 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($newsArray)); return $result; } private function logger($log_content) { } } ?>
在公眾賬號中使用的命令如下:
1. 傳送城市名稱,如“深圳”,可以查詢該城市的天氣
在你的公眾賬號輸入相應的命令,實現效果類似如下所示:
總結:
總的來說,通過本教程,你得到了以下收穫:
· 1. 你通過本教程得到了一個免費的新浪雲端計算空間,雲端計算哦
· 2. 你成功啟用了開發模式,並且實現了時間的自動回覆
· 3. 你瞭解了微信公眾平臺開發的原理,並且熟悉了各種訊息及傳送是怎麼一回事
· 4. 你使用天氣預報介面,實現了一個微信公眾平臺上的天氣預報功能。
這個微信公眾號暫時就說這麼多!有什麼疑問的可以留言哦!