微信公眾平台開發(21) 天氣預報功能開發

2022-07-26 04:30:14 字數 3537 閱讀 2604

原文:

一、簡介

二、思路分析

首先要對使用者傳送過來的訊息進行判斷,判斷訊息裡是否含有「天氣」關鍵字,如果含有,則需要繼續提取地區資訊,然後再通過中國天氣網(提供的開放api進行相關地區天氣查詢。

三、關鍵字判斷與地區讀取

使用者傳送過來查詢天氣的訊息的格式是固定好的,即 「地區+天氣」,所以首先擷取後兩個字,判斷是否為 「天氣」 關鍵字。

使用php函式 mb_substr() 擷取,關於該函式的用法:

mb_substr — 獲取字串的部分

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 中指定的部分。

$str = mb_substr($keyword,-2,2,"utf-8");

從訊息的結尾數第二個字元開始擷取,擷取兩個字元,然後加以判斷是否為 「天氣」 關鍵字。

下面進行地區提取,還是使用 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 

$weather_cityid = array("北京"=>"101010100","上海"=>"101020100","蘇州"=>"101190401");

?>

根據傳入的城市名,得到城市**,如果不為空,則呼叫中國天氣網的api進行查詢,返回json格式的資料,然後進行解析並返回資料,如果為空,則返回null值。

五、組織回覆訊息形式

判斷返回資料是否為空,若為空,則 $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 

/** * 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

}}?>

關於城市對應關係檔案 weather_cityid.php,目前更新到了2564個城市,以後還會繼續增加,請到樂思樂享卓錦蘇州功能列表。

微信公眾平台開發(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 ...