原文:
一、簡介
二、思路分析
首先要對使用者傳送過來的訊息進行判斷,判斷訊息裡是否含有「天氣」關鍵字,如果含有,則需要繼續提取地區資訊,然後再通過中國天氣網(提供的開放api進行相關地區天氣查詢。
三、關鍵字判斷與地區讀取
使用者傳送過來查詢天氣的訊息的格式是固定好的,即 「地區+天氣」,所以首先擷取後兩個字,判斷是否為 「天氣」 關鍵字。
使用php函式 mb_substr() 擷取,關於該函式的用法:
mb_substr — 獲取字串的部分$str = mb_substr($keyword,-2,2,"utf-8");string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )說明:根據字元數執行乙個多位元組安全的 substr() 操作。 位置是從 str 的開始位置進行計數。 第乙個字元的位置是 0。第二個字元的位置是 1,以此類推。引數:str
從該 string 中提取子字串。
start
str 中要使用的第乙個字元的位置。
正數 -> 從字串開頭指定位置開始;
負數 -> 從字串結尾指定位置開始;
length
str 中要使用的最大字元數。
正數 -> 從 start 處開始最多包括 length 個字元;
負數 -> string
末尾處的 length 個字元將會被漏掉(若 start 是負數則從字串開頭算起)。
encoding
encoding 引數為字元編碼。如果省略,則使用內部字元編碼。返回值:mb_substr() 函式根據 start 和 length 引數返回 str 中指定的部分。
從訊息的結尾數第二個字元開始擷取,擷取兩個字元,然後加以判斷是否為 「天氣」 關鍵字。
下面進行地區提取,還是使用 mb_substr() 函式。
$str_key = mb_substr($keyword,0,-2,"utf-8");
從訊息的開頭開始,截掉末尾的兩個字元(天氣),既得地區關鍵字。
然後進行判斷,繼而呼叫函式查詢天氣資料。
if($str == '天氣' && !empty($str_key))四、呼叫 weather() 函式查詢url中的數字指代城市的編號101190401(蘇州),其他城市對應關係將在下面提供。
該介面返回資訊比較全面,也是以json格式提供,格式如下:
}我們可以通過解析json,獲取相應城市的天氣資料。
weather() 函式如下:
private function weather($n) else這裡include 了乙個城市對應關係檔案 weather_cityid.php,格式如下:}
<?php根據傳入的城市名,得到城市**,如果不為空,則呼叫中國天氣網的api進行查詢,返回json格式的資料,然後進行解析並返回資料,如果為空,則返回null值。$weather_cityid = array("北京"=>"101010100","上海"=>"101020100","蘇州"=>"101190401");
?>
五、組織回覆訊息形式
判斷返回資料是否為空,若為空,則 $contentstr = "抱歉,沒有查到\"".$str_key."\"的天氣資訊!";
若返回資料不為空,則:
說明:
$data->weatherinfo->city //獲取城市名,這裡為蘇州
$data->weatherinfo->date_y //獲取日期,這裡為2023年7月9日
$data->weatherinfo->fchh //資料發布時間
$data->weatherinfo->weather1 //實時天氣
$data->weatherinfo->temp1 //實時溫度
$data->weatherinfo->wind1 //實時風向和風速
$data->weatherinfo->index_d //穿衣指數
weather2, temp2, wind2 分別代表了明天的天氣,溫度和風向風速,其他的以此類推。
\n //表示換行
六、測試
七、完整**
<?php關於城市對應關係檔案 weather_cityid.php,目前更新到了2564個城市,以後還會繼續增加,請到樂思樂享卓錦蘇州功能列表。/** * wechat php test
*///define your token
define("token", "zhuojin");
$wechatobj = new wechatcallbackapitest();
$wechatobj->responsemsg();
//$wechatobj->valid();
class wechatcallbackapitest
}*/public function responsemsg()
echo $resultstr;
}else
}public function handletext($postobj)
else
} else
$resultstr = sprintf($texttpl, $fromusername, $tousername, $time, $msgtype, $contentstr);
echo $resultstr;
}else
}public function handleevent($object)
$resultstr = $this->responsetext($object, $contentstr);
return $resultstr;
}public function responsetext($object, $content, $flag=0)
private function weather($n) else
}private function checksignature()
else
}}?>
微信公眾平台開發(4)天氣預報
北京 output json ak yourak 引數型別 引數名稱 是否必須 具體描述 string location true 輸入城市名或經緯度,城市名稱如 北京或者131,經緯度格式為lng,lat座標如 location 116.305145,39.982368 全國值為all,返回省會城...
微信公眾平台天氣預報功能開發
本來是想自己直接從中國天氣網獲取資訊並處理,後來發現處理起來太麻煩,而且要獲取所有城市的城市編碼,再有就是!不支援國外天氣!我們學校有很多畢業生在國外上學,所以我考慮還是做出支援國外天氣的版本 因此考慮直接呼叫別人的api,一開始選用了方倍工作室已經做好的介面 無奈也沒有國外 直到有一天返回北京天氣...
天氣預報文本版微信 微信公眾平台開發(4)天氣預報
一 資料介面 介面北京 output json ak yourak 介面引數說明 引數型別引數名稱是否必須具體描述 string location true 輸入城市名或經緯度,城市名稱如 北京或者131,經緯度格式為lng,lat座標如 location 116.305145,39.982368 ...