微信公眾平臺(tái)天氣預(yù)報(bào)功能開(kāi)發(fā)
本來(lái)是想自己直接從中國(guó)天氣網(wǎng)獲取信息并處理,后來(lái)發(fā)現(xiàn)處理起來(lái)太麻煩,而且要獲取所有城市的城市編碼,再有就是!不支持國(guó)外天氣?。。ㄎ覀儗W(xué)校有很多畢業(yè)生在國(guó)外上學(xué),所以我考慮還是做出支持國(guó)外天氣的版本)
因此考慮直接調(diào)用別人的API,一開(kāi)始選用了方倍工作室已經(jīng)做好的接口(無(wú)奈也沒(méi)有國(guó)外)。直到有一天返回北京天氣溫度是零下的時(shí)候(當(dāng)時(shí)天熱到不敢出門)。。。換!換!換!
后來(lái)終于發(fā)現(xiàn)最靠譜的接口----百度的天氣API。
廢話少說(shuō),首先大家要上 百度地圖API申請(qǐng)一個(gè)專用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)最多只能看到五個(gè)item= =無(wú)語(yǔ)。。。
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ù),感覺(jué)不對(duì)主題還是不要的好。。 //$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就行了。另外有一點(diǎn)讓我不解的是,我微信用的圖文模板明明是6個(gè)item,為什么回復(fù)實(shí)際效果只有5個(gè)呢= = 求廣大網(wǎng)友幫忙解釋
最后附代碼說(shuō)明。用戶發(fā)送“北京天氣”和“天氣北京”都是可以的,所以首先做了字符串處理,得到正確的城市名。利用百度地圖API給的網(wǎng)址,發(fā)出GET請(qǐng)求(其實(shí)就是直接訪問(wèn)),獲取一個(gè)json類型的數(shù)據(jù)包。將數(shù)據(jù)包信息轉(zhuǎn)成數(shù)組格式,對(duì)應(yīng)的回復(fù)微信用戶即可。國(guó)外的天氣沒(méi)有當(dāng)天天氣的具體說(shuō)明,所以最后做了一點(diǎn)小修改。
- 使用ASP.NET一般處理程序或WebService返回JSON的實(shí)現(xiàn)代碼
- asp.net(c#)動(dòng)態(tài)修改webservice的地址和端口(動(dòng)態(tài)修改配置文件)
- asp.net類庫(kù)中添加WebService引用出現(xiàn)問(wèn)題解決方法
- Jquery + Ajax調(diào)用webService實(shí)例代碼(asp.net)
- jQuery Ajax方法調(diào)用 Asp.Net WebService 的詳細(xì)實(shí)例代碼
- asp.net實(shí)現(xiàn)根據(jù)城市獲取天氣預(yù)報(bào)的方法
- ASP.net(c#)打造24小時(shí)天氣預(yù)報(bào)及實(shí)時(shí)天氣
- Vista天氣預(yù)報(bào)--修正不顯示中國(guó)天氣預(yù)報(bào)的BUG
- Python天氣預(yù)報(bào)采集器實(shí)現(xiàn)代碼(網(wǎng)頁(yè)爬蟲(chóng))
- ASP.NET使用WebService實(shí)現(xiàn)天氣預(yù)報(bào)功能
相關(guān)文章
php實(shí)現(xiàn)文件下載簡(jiǎn)單示例(代碼實(shí)現(xiàn)文件下載)
這篇文章主要介紹了php實(shí)現(xiàn)文件下載簡(jiǎn)單示例,需要的朋友可以參考下2014-03-03laravel validate 設(shè)置為中文的例子(驗(yàn)證提示為中文)
今天小編就為大家分享一篇laravel validate 設(shè)置為中文的例子(驗(yàn)證提示為中文),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09PHP+Jquery與ajax相結(jié)合實(shí)現(xiàn)下拉淡出瀑布流效果【無(wú)需插件】
這篇文章主要介紹了PHP+Jquery與ajax相結(jié)合實(shí)現(xiàn)下拉淡出瀑布流效果【無(wú)需插件】的相關(guān)資料,需要的朋友可以參考下2016-05-05CodeIgniter讀寫(xiě)分離實(shí)現(xiàn)方法詳解
這篇文章主要介紹了CodeIgniter讀寫(xiě)分離實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了CodeIgniter讀寫(xiě)分離的相關(guān)配置與功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-01-01用PHP提取中英文詞語(yǔ)以及數(shù)字的首字母的方法介紹
本篇我在小編為大家介紹,用PHP提取中英文詞語(yǔ)以及數(shù)字的首字母的方法。需要的朋友參考下2013-04-04詳細(xì)解讀PHP的Yii框架中登陸功能的實(shí)現(xiàn)
這篇文章主要介紹了詳細(xì)解讀PHP的Yii框架中登陸功能的實(shí)現(xiàn),包括通過(guò)cookie實(shí)現(xiàn)自動(dòng)登錄的功能,需要的朋友可以參考下2015-08-08PHP各種異常和錯(cuò)誤的攔截方法及發(fā)生致命錯(cuò)誤時(shí)進(jìn)行報(bào)警
在日常開(kāi)發(fā)中,大多數(shù)人的做法是在開(kāi)發(fā)環(huán)境時(shí)開(kāi)啟調(diào)試模式,在產(chǎn)品環(huán)境關(guān)閉調(diào)試模式。在開(kāi)發(fā)的時(shí)候可以查看各種錯(cuò)誤、異常,但是在線上就把錯(cuò)誤顯示的關(guān)閉2016-01-01