本文繼續(xù)上一篇《C#開發(fā)微信入口網(wǎng)站及應(yīng)用(12)-使用語音處理》,繼續(xù)介紹微信的相關(guān)應(yīng)用。我們知道,地理位置資訊可以用來做很多相關(guān)的應(yīng)用,除了我們可以知道用戶所在的位置,還可以關(guān)聯(lián)出一些地理位置的應(yīng)用,如天氣,熱映影片,附近景點,附近影院,交通事件等等等,反正所有和地理位置相關(guān)的信息,我們都可以根據(jù)需要做一些擴展應(yīng)用。本文主要介紹利用地理位置訊息,如何建構(gòu)使用這些應(yīng)用的操作。
1、微信的地理位置資訊
在使用前,我們先來看看微信的接口,為我們定義了那些關(guān)於與地理位置的資訊。其實地理位置的訊息,微信分為了兩個方面,一個是接收用戶的地理位置請求,一個是用戶允許上報地理位置操作,定時發(fā)送的地理位置資訊。
本文主要介紹基於第一種,使用者回報地理位置後,如何處理的相關(guān)應(yīng)用。
地理位置的回報操作,就是在輸入的地方,選擇+號進行新增地理位置,然後選擇目前或指定的地理位置地圖,具體操作如下所示。
? ? ? ? ? ? ? ??
地理位置訊息
地理位置訊息
地理位置訊息 | |
---|---|
地理位置訊息 | |
開發(fā)者 | 微訊號|
FromUserName | 發(fā)送方帳號(一個OpenID) |
CreateTime | 訊息建立時間(整數(shù)) |
MsgType | location |
地理位置經(jīng)度 | |
地圖縮放小 | |
地理位置資訊 | |
訊息id,64位元整型 | MsgId |
有了上面的地理位置信息,我們在程序里面,需要在消息傳遞過來的時候,定義一個實體類信息,承載相關(guān)的地理位置信息,方便我們進一步的處理操作。
????///?<summary> ????///?接收的地理位置消息????///?</summary> ????[System.Xml.Serialization.XmlRoot(ElementName?=?"xml")]????public?class?RequestLocation?:?BaseMessage ????{???? ????????public?RequestLocation() ????????{????????????this.MsgType?=?RequestMsgType.Location.ToString().ToLower(); ????????}?? ????????///?<summary> ????????///?消息ID????????///?</summary> ????????public?Int64?MsgId?{?get;?set;?}????????///?<summary> ????????///?地理位置維度????????///?</summary> ????????public?decimal?Location_X?{?get;?set;?}????????///?<summary> ????????///?地理位置經(jīng)度????????///?</summary> ????????public?decimal?Location_Y?{?get;?set;?}????????///?<summary> ????????///?地圖縮放大小????????///?</summary> ????????public?int?Scale?{?get;?set;?}????????///?<summary> ????????///?地理位置信息????????///?</summary> ????????public?string?Label?{?get;?set;?} ????}
有了這些信息,我們在信息傳遞的時候,就能很好得到用戶的相關(guān)數(shù)據(jù)了。
如果僅僅為了返回給用戶,告訴用戶目前的地理位置信息,可以用下面的操作就可以了。
????????///?<summary> ????????///?對地理位置請求信息進行處理????????///?</summary> ????????///?<param name="info">地理位置請求信息實體</param> ????????///?<returns></returns> ????????public?string?HandleLocation(Entity.RequestLocation?info) ????????{????????????string?xml?=?""; ????????????ResponseText?txtinfo?=?new?ResponseText(info); ????????????txtinfo.Content?=?string.Format("您發(fā)送的地理位置是:{0}",?info.Label); ????????????xml?=?txtinfo.ToXml();????????????return?xml; ????????}
2、地址位置的應(yīng)用處理
不過上面的信息,顯然不符合我們擴展應(yīng)用的要求,因此我們進一步進行完善里面對地理位置信息處理的操作。我們進一步把關(guān)于地理位置的操作,放到事件處理模塊里面進行處理,處理代碼如下所示。
????????///?<summary> ????????///?對地理位置請求信息進行處理????????///?</summary> ????????///?<param name="info">地理位置請求信息實體</param> ????????///?<returns></returns> ????????public?string?HandleLocation(Entity.RequestLocation?info) ????????{????????????string?xml?=?""; ????????????EventDispatch?dispatch?=?new?EventDispatch(); ????????????xml?=?dispatch.DealLocation(info,?info.Label,?info.Location_Y,?info.Location_X);????????????return?xml; ????????}
在處理的時候,我們需要先保存用戶的地理位置信息,把它存儲到用戶的上下文記錄里面。這樣我們在處理指令的時候,把它獲取到,然后傳遞給相關(guān)的方法就可以實現(xiàn)地理位置的擴展應(yīng)用了。
????????????//保存經(jīng)緯度 ????????????string?location?=?string.Format("{0},{1}",?lat,?lon);????????????bool?result?=?BLLFactory<UserSet>.Instance.UpdateUserInput(info.FromUserName,?location);
首先對用戶地理位置的請求,我根據(jù)數(shù)據(jù)庫配置給出了一個用戶選擇的指令提示,如下所示。
為了對地理位置請求的處理,我定義了一個用于處理這個操作的指令操作
這樣整個地理位置的指令操作,就在應(yīng)答鏈里面進行很好的跳轉(zhuǎn)管理了。那么為了實現(xiàn)天氣、放映影片、附近影院、旅游線路、交通事件等方面的擴展應(yīng)用,我們應(yīng)該如何操作呢?
3、地址位置應(yīng)用擴展
我們知道,百度或者騰訊都提供了一些開放平臺,給我們進行各種方式的使用。那么我們這里以使用百度LBS平臺應(yīng)用來構(gòu)建一些模塊。
?
?
這上面都有很多相關(guān)的接口供使用,我們可以根據(jù)其提供的數(shù)據(jù)格式進行封裝,然后進行調(diào)用處理就可以了。
剛才說了,我配置了一些指令,用來構(gòu)建相關(guān)的應(yīng)用,指令的最后是一些事件代碼的定義,我們對這些末端的事件代碼進行處理,就可以給用戶返回相關(guān)的信息了,總體的操作代碼如下所示。
????????///?<summary> ????????///?其他插件操作,如天氣,景點、電影影訊、交通等????????///?</summary> ????????///?<param name="info">基礎(chǔ)消息</param> ????????///?<param name="eventKey">事件標識</param> ????????///?<returns></returns> ????????public?string?DealPlugin(BaseMessage?info,?string?eventKey) ????????{????????????//LogTextHelper.Info(eventKey); ????????????string?userInput?=?BLLFactory<UserSet>.Instance.GetUserInput(info.FromUserName);????????????string?xml?=?"";????????????switch?(eventKey) ????????????{????????????????case?"event-void-wether": ????????????????????xml?=?new?WeatherPlugin().Response(info,?userInput);????????????????????break;????????????????case?"event-void-movie": ????????????????????xml?=?new?MoviePlugin().Response(info,?userInput);????????????????????break;????????????????case?"event-void-cinema": ????????????????????xml?=?new?CinemaPlugin().Response(info,?userInput);????????????????????break;????????????????case?"event-void-travel": ????????????????????xml?=?new?TravelPlugin().Response(info,?userInput);????????????????????break;????????????????case?"event-void-traffic": ????????????????????xml?=?new?TrafficEventPlugin().Response(info,?userInput);????????????????????break;????????????????default:????????????????????break; ????????????}????????????return?xml; ????????}
這里以天氣為例,說明該如何調(diào)用百度的接口的,首先我們封裝一下相關(guān)的接口調(diào)用。
????????///?<summary> ????????///?根據(jù)參數(shù)調(diào)用百度接口,獲取相關(guān)的結(jié)果數(shù)據(jù)????????///?</summary> ????????///?<param name="location">地理位置</param> ????????///?<param name="ak">API調(diào)用鍵</param> ????????///?<returns></returns> ????????public?BaiduWeatherResult?Execute(string?location,?string?ak) ????????{ ????????????location?=?HttpUtility.UrlEncode(location);????????????var?url?=?string.Format("http://ipnx.cn/{0}&output=json&ak={1}",?location,?ak); ????????????BaiduWeatherResult?result?=?BaiduJsonHelper<BaiduWeatherResult>.ConvertJson(url);????????????return?result; ????????}
其中的BaiduWeatherResult 是我根據(jù)調(diào)用返回的Json結(jié)果,構(gòu)建的一個實體類,用來存儲返回的內(nèi)容。具體代碼如下所示。
????///?<summary> ????///?天氣請求結(jié)果Json對象????///?</summary> ????public?class?BaiduWeatherResult?:?BaiduResult ????{????????///?<summary> ????????///?天氣預(yù)報信息????????///?</summary> ????????public?List<BaiduWeatherData>?results?=?new?List<BaiduWeatherData>(); ????}????///?<summary> ????///?城市的天氣信息????///?</summary> ????public?class?BaiduWeatherData ????{????????///?<summary> ????????///?當(dāng)前城市????????///?</summary> ????????public?string?currentCity?{?get;?set;?}????????///?<summary> ????????///?天氣預(yù)報信息????????///?</summary> ????????public?List<BaiduWeatherJson>?weather_data?=?new?List<BaiduWeatherJson>(); ????}????///?<summary> ????///?天氣預(yù)報的單條記錄Json信息????///?</summary> ????public?class?BaiduWeatherJson ????{????????///?<summary> ????????///?天氣預(yù)報時間????????///?</summary> ????????public?string?date?{?get;?set;?}????????///?<summary> ????????///?白天的天氣預(yù)報圖片url????????///?</summary> ????????public?string?dayPictureUrl?{?get;?set;?}????????///?<summary> ????????///?晚上的天氣預(yù)報圖片url????????///?</summary> ????????public?string?nightPictureUrl?{?get;?set;?}????????///?<summary> ????????///?天氣狀況????????///?</summary> ????????public?string?weather?{?get;?set;?}????????///?<summary> ????????///?風(fēng)力????????///?</summary> ????????public?string?wind?{?get;?set;?}????????///?<summary> ????????///?溫度????????///?</summary> ????????public?string?temperature?{?get;?set;?} ????}
為了構(gòu)建返回給客戶的圖文數(shù)據(jù),我們需要構(gòu)建一個News對象,然后生成XML數(shù)據(jù)返回給服務(wù)器進行處理即可。
????????///?<summary> ????????///?響應(yīng)用戶請求,并返回相應(yīng)的XML數(shù)據(jù)????????///?</summary> ????????///?<param name="info">微信基礎(chǔ)信息</param> ????????///?<param name="location">地理位置:經(jīng)緯度坐標或者地名</param> ????????///?<returns></returns> ????????public?string?Response(BaseMessage?info,?string?location) ????????{????????????string?xml?=?"";????????????//"廣州"?或者?"116.305145,39.982368"???? ????????????if?(!string.IsNullOrEmpty(location)) ????????????{ ????????????????BaiduWeatherResult?result?=?Execute(location,?baiduAK);????????????????if?(result?!=?null?&&?result.results.Count?>?0) ????????????????{ ????????????????????BaiduWeatherData?data?=?result.results[0];????????????????????if?(data?!=?null) ????????????????????{ ????????????????????????ArticleEntity?first?=?new?ArticleEntity(); ????????????????????????first.Title?=?string.Format("{0}?天氣預(yù)報",?data.currentCity); ????????????????????????ResponseNews?news?=?new?ResponseNews(info); ????????????????????????news.Articles.Add(first);????????????????????????int?i?=?0;????????????????????????foreach?(BaiduWeatherJson?json?in?data.weather_data) ????????????????????????{ ????????????????????????????ArticleEntity?article?=?new?ArticleEntity(); ????????????????????????????article.Title?=?string.Format("{0}\n{1}?{2}?{3}",?json.date,?json.weather,?json.wind,?json.temperature);????????????????????????????if?(i++?==?0) ????????????????????????????{ ????????????????????????????????article.PicUrl?=?IsDayTime()???json.dayPictureUrl?:?json.nightPictureUrl; ????????????????????????????}????????????????????????????else ????????????????????????????{ ????????????????????????????????article.PicUrl?=?json.dayPictureUrl; ????????????????????????????} ????????????????????????????news.Articles.Add(article); ????????????????????????} ????????????????????????xml?=?news.ToXml(); ????????????????????} ????????????????} ????????????}????????????return?xml; ????????}
這樣就很好實現(xiàn)了整體的功能了,具體界面功能可以訪問我的微信(廣州愛奇迪)進行了解,下面是功能截圖供參考。
? ?
?
?更多C#開發(fā)微信入口網(wǎng)站及應(yīng)用-使用地理位置擴充相關(guān)應(yīng)用?相關(guān)文章請關(guān)注PHP中文網(wǎng)!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)