微信公眾平臺(tái)接口開發(fā):(4)天氣預(yù)報(bào)
一、請(qǐng)求數(shù)據(jù)
首先需要能有取得天氣數(shù)據(jù)的接口,這樣的接口網(wǎng)上有很多。比如google, yahoo,天氣網(wǎng)都提供天氣接口
方倍工作室的API已經(jīng)能提供全國(guó)各地的天氣預(yù)報(bào),使用方倍的API無需再建立城市對(duì)應(yīng)關(guān)系表
使用方式為直接在URL中提交城市名稱即可,如果找不到城市名稱,請(qǐng)先做urlencode
調(diào)用url方法:
- http://api2.sinaapp.com/search/weather/?appkey=0020130430&appsecert=fa6095e113cd28fd&reqtype=text&keyword=上海
- //或者做一次urlencode后再提交
- http://api2.sinaapp.com/search/weather/?appkey=0020130430&appsecert=fa6095e113cd28fd&reqtype=text&keyword=%E6%B7%B1%E5%9C%B3
返回格式如下:(返回中自帶換行\(zhòng)n操作,不用自己再添加)
- {
- "errcode": "0",
- "msgtype": "text",
- "text": {
- "content": "【湘潭】天氣實(shí)況 溫度:12℃ 濕度:59% 風(fēng)速:西北風(fēng)3級(jí)\n03月10日 周日 10℃~21℃ 陰轉(zhuǎn)多云 北風(fēng)轉(zhuǎn)南風(fēng)小于3級(jí)\n03月11日 周一 13℃~28℃ 多云 南風(fēng)小于3級(jí)\n03月12日 周二 10℃~22℃ 小雨轉(zhuǎn)陰 北風(fēng)小于3級(jí)\n技術(shù)支持 方倍工作室"
- }
- }
一個(gè)完整的請(qǐng)求類似如下:
- $url = "http://api2.sinaapp.com/search/weather/?appkey=0020130430&appsecert=fa6095e113cd28fd&reqtype=text&keyword=%E6%B7%B1%E5%9C%B3";
- $weatherJson = file_get_contents($url);
- $weather = json_decode($weatherJson, true);
- $contentStr = $weather['text']['content'];
如果使用城市名+天氣方式查詢,則先進(jìn)行城市名提?。?/p>
- else if (substr($keyword, -6, strlen($keyword)) == "天氣"){
- $cityname = trim(substr($keyword, 0, strlen($keyword) - 6));
二,效果演示
使用城市名稱查詢天氣預(yù)報(bào):
原文鏈接。本文為方倍工作室原創(chuàng),51CTO授權(quán)轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)聯(lián)系xuchuan(at)51cto.com
完整源代碼見第二頁。
#p#
二、完整源代碼
- <?php
- /*
- 【版權(quán)聲明】
- 本軟件產(chǎn)品的版權(quán)歸方倍工作室所有,受《中華人民共和國(guó)計(jì)算機(jī)軟件保護(hù)條例》等知識(shí)產(chǎn)權(quán)法律及國(guó)際條約與慣例的保護(hù)。您獲得的只是本軟件的使用權(quán)。
- 您不得:
- * 在未得到授權(quán)的情況下刪除、修改本軟件及其他副本上一切關(guān)于版權(quán)的信息;
- * 銷售、出租此軟件產(chǎn)品的任何部分;
- * 從事其他侵害本軟件版權(quán)的行為。
- 如果您未遵守本條款的任一約定,方倍工作室有權(quán)立即終止本條款的執(zhí)行,且您必須立即終止使用本軟件并銷毀本軟件產(chǎn)品的任何副本。這項(xiàng)要求對(duì)各種拷貝形式有效。
- 您同意承擔(dān)使用本軟件產(chǎn)品的風(fēng)險(xiǎn),在適用法律允許的最大范圍內(nèi),方倍工作室在任何情況下不就因使用或不能使用本軟件產(chǎn)品所發(fā)生的特殊的、意外的、非直接或間接的損失承擔(dān)賠償責(zé)任。即使已事先被告知該損害發(fā)生的可能性。
- 如使用本軟件所添加的任何信息,發(fā)生版權(quán)糾紛,方倍工作室不承擔(dān)任何責(zé)任。
- 方倍工作室對(duì)本條款擁有最終解釋權(quán)。
- CopyRight 2013 www.doucube.com All Rights Reserved
- */
- date_default_timezone_set('Asia/Hong_Kong'); //set time zone
- define("TOKEN", "http://www.doucube.com");
- $wechatObj = new wechatCallbackapiTest();
- $wechatObj->responseMsg();
- class wechatCallbackapiTest
- {
- public function responseMsg()
- {
- $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
- logger("R ".$postStr);
- //extract post data
- if (!emptyempty($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;
- }
- logger("T ".$resultStr);
- echo $resultStr;
- }else {
- echo "";
- exit;
- }
- }
- private function receiveText($object)
- {
- $funcFlag = 0;
- $keyword = trim($object->Content);
- $resultStr = "";
- $contentStr = "";
- if (substr($keyword, -6, strlen($keyword)) == "天氣"){
- $keyword = trim(substr($keyword, 0, strlen($keyword) - 6));
- if ($keyword == ""){$keyword = "北京";}
- $apihost = "http://api2.sinaapp.com/";
- $apimethod = "search/weather/?";
- $apiparams = array('appkey'=>"0020120430", 'appsecert'=>"fa6095e113cd28fd", 'reqtype'=>"text");
- $apikeyword = "&keyword=".urlencode($keyword);
- $apicallurl = $apihost.$apimethod.http_build_query($apiparams).$apikeyword;
- $weatherJson = file_get_contents($apicallurl);
- $weather = json_decode($weatherJson, true);
- $contentStr = $weather['text']['content'];
- $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
- }else{
- $contentStr = "發(fā)送城市加天氣的命令查詢天氣,如“北京天氣”,“上海天氣”。";
- $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
- }
- return $resultStr;
- }
- private function receiveEvent($object)
- {
- $contentStr = "";
- switch ($object->Event)
- {
- case "subscribe":
- $contentStr = "Power By 方倍工作室!";
- break;
- }
- $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;
- }
- }
- function logger($log_content)
- {
- if (isset($_SERVER['HTTP_APPNAME'])){ //SAE
- sae_set_display_errors(false);
- sae_debug($log_content);
- sae_set_display_errors(true);
- }else {
- $max_size = 100000;
- $log_filename = date("Ymd").".xml";
- if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
- file_put_contents($log_filename, date('H:i:s')." ".$log_content."\r\n", FILE_APPEND);
- }
- }
- ?>