微信公眾平臺天氣預(yù)報功能開發(fā)
本來是想自己直接從中國天氣網(wǎng)獲取信息并處理,后來發(fā)現(xiàn)處理起來太麻煩,而且要獲取所有城市的城市編碼,再有就是!不支持國外天氣!?。ㄎ覀儗W(xué)校有很多畢業(yè)生在國外上學(xué),所以我考慮還是做出支持國外天氣的版本)
因此考慮直接調(diào)用別人的API,一開始選用了方倍工作室已經(jīng)做好的接口(無奈也沒有國外)。直到有一天返回北京天氣溫度是零下的時候(當(dāng)時天熱到不敢出門)。。。換!換!換!
后來終于發(fā)現(xiàn)最靠譜的接口----百度的天氣API。
廢話少說,首先大家要上 百度地圖API申請一個專用key(大概一分鐘就搞定了,很方便)
代碼如下:
//圖文信息2 for 天氣【這是微信的圖文信息模板】 $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> <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> </Articles> </xml> ";//最后發(fā)現(xiàn)最多只能看到五個item= =無語。。。
PHP代碼
if(substr_count($keyword,'天氣')!=0 && $keyword!='天氣')
{
$geshu = substr_count($keyword,'天氣');
$t = explode("天氣",$keyword);
for($i=0;$i<=$geshu;$i++)
{
if($t[$i]!='')
{
$city = $t[$i];
break;
}
}
$mykey = "【這里換成你的API 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";
//上面兩行可以設(shè)成你想要的頂部圖片
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'];
//下一行是洗車指數(shù),感覺不對主題還是不要的好。。
//$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'];
}
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++;
}
$tianqi = 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 $tianqi;
}
}
效果圖如下:

將其中的$mykey變量改成自己的APIkey就行了。另外有一點讓我不解的是,我微信用的圖文模板明明是6個item,為什么回復(fù)實際效果只有5個呢= = 求廣大網(wǎng)友幫忙解釋
最后附代碼說明。用戶發(fā)送“北京天氣”和“天氣北京”都是可以的,所以首先做了字符串處理,得到正確的城市名。利用百度地圖API給的網(wǎng)址,發(fā)出GET請求(其實就是直接訪問),獲取一個json類型的數(shù)據(jù)包。將數(shù)據(jù)包信息轉(zhuǎn)成數(shù)組格式,對應(yīng)的回復(fù)微信用戶即可。國外的天氣沒有當(dāng)天天氣的具體說明,所以最后做了一點小修改。
- 使用ASP.NET一般處理程序或WebService返回JSON的實現(xiàn)代碼
- asp.net(c#)動態(tài)修改webservice的地址和端口(動態(tài)修改配置文件)
- asp.net類庫中添加WebService引用出現(xiàn)問題解決方法
- Jquery + Ajax調(diào)用webService實例代碼(asp.net)
- jQuery Ajax方法調(diào)用 Asp.Net WebService 的詳細實例代碼
- asp.net實現(xiàn)根據(jù)城市獲取天氣預(yù)報的方法
- ASP.net(c#)打造24小時天氣預(yù)報及實時天氣
- Vista天氣預(yù)報--修正不顯示中國天氣預(yù)報的BUG
- Python天氣預(yù)報采集器實現(xiàn)代碼(網(wǎng)頁爬蟲)
- ASP.NET使用WebService實現(xiàn)天氣預(yù)報功能
相關(guān)文章
Codeigniter中禁止A Database Error Occurred錯誤提示的方法
在默認的情況下,CodeIgniter會顯示所有的PHP錯誤。但是當(dāng)你開發(fā)程序結(jié)束時,你可能想要改變這個情況。這篇文章主要介紹了Codeigniter中禁止A Database Error Occurred錯誤提示的方法,需要的朋友可以參考下2014-06-06
Phpstorm+Xdebug斷點調(diào)試PHP的方法
這篇文章主要介紹了Phpstorm+Xdebug斷點調(diào)試PHP的方法,本教程將通過配置Xdebug擴展進行斷點調(diào)試,目的在于提高大家的開發(fā)效率,感興趣的小伙伴們可以參考一下2018-05-05
教你如何用php實現(xiàn)LOL數(shù)據(jù)遠程獲取
LOL(英雄聯(lián)盟)最近非常的火爆,哥自然也在玩了,最近遇到個問題,就是每次想看看自己的戰(zhàn)斗力啥的,還得先開盒子等等,麻煩,最近有一個想法,打算把它實現(xiàn)出來。2014-06-06

