


C# développe des portails et des applications WeChat - en utilisant la localisation géographique pour étendre les applications associées
Feb 17, 2017 pm 03:24 PMCet article poursuit l'article précédent ??Développement du portail et des applications WeChat en C# (12) - Utilisation du traitement vocal?? et continue de présenter les applications associées de WeChat. Nous savons que les informations de localisation géographique peuvent être utilisées pour de nombreuses applications connexes. En plus de conna?tre la localisation de l'utilisateur, nous pouvons également associer certaines applications de localisation géographique, telles que la météo, les films populaires, les attractions à proximité, les théatres à proximité, les événements de circulation, etc. Quoi qu'il en soit, pour toutes les informations liées à la localisation géographique, nous pouvons réaliser des applications étendues selon les besoins. Cet article explique principalement comment utiliser les informations de localisation géographique pour créer des opérations qui utilisent ces applications.
1. Informations de localisation géographique de WeChat
Avant de l'utiliser, jetons d'abord un coup d'?il à l'interface de WeChat, qui définit pour nous les informations de localisation géographique. En fait, les informations de localisation géographique de WeChat sont divisées en deux aspects. L'un consiste à recevoir la demande de localisation géographique de l'utilisateur, et l'autre est les informations de localisation géographique que l'utilisateur permet de signaler l'opération de localisation géographique et qui sont envoyées régulièrement.
Cet article présente principalement les applications associées basées sur le premier type, comment traiter la localisation géographique de l'utilisateur après l'avoir signalée.
L'opération de rapport de localisation géographique consiste à sélectionner le numéro pour ajouter la localisation géographique au lieu de saisie, puis à sélectionner la carte de localisation géographique actuelle ou spécifiée. L'opération spécifique est la suivante.
??????????????????????????????????????????????????????????????????????????????????????????????????????????>
Paramètres | Description |
---|---|
ToUserName |
![]() |
FromUserName | Compte expéditeur (un OpenID) |
CreateTime | Heure de création du message (entier) |
MsgType | emplacement |
Location_X | Dimension de localisation géographique |
Location_Y | Longitude de l'emplacement |
échelle | Taille du zoom de la carte |
étiquette | Informations de localisation géographique |
MsgId | Identifiant du message, entier 64?bits |
有了上面的地理位置信息,我們在程序里面,需要在消息傳遞過來的時候,定義一個實體類信息,承載相關的地理位置信息,方便我們進一步的處理操作。
????///?<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;?} ????}
有了這些信息,我們在信息傳遞的時候,就能很好得到用戶的相關數(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、地址位置的應用處理
不過上面的信息,顯然不符合我們擴展應用的要求,因此我們進一步進行完善里面對地理位置信息處理的操作。我們進一步把關于地理位置的操作,放到事件處理模塊里面進行處理,處理代碼如下所示。
????????///?<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; ????????}
在處理的時候,我們需要先保存用戶的地理位置信息,把它存儲到用戶的上下文記錄里面。這樣我們在處理指令的時候,把它獲取到,然后傳遞給相關的方法就可以實現(xiàn)地理位置的擴展應用了。
????????????//保存經(jīng)緯度 ????????????string?location?=?string.Format("{0},{1}",?lat,?lon);????????????bool?result?=?BLLFactory<UserSet>.Instance.UpdateUserInput(info.FromUserName,?location);
首先對用戶地理位置的請求,我根據(jù)數(shù)據(jù)庫配置給出了一個用戶選擇的指令提示,如下所示。
為了對地理位置請求的處理,我定義了一個用于處理這個操作的指令操作
這樣整個地理位置的指令操作,就在應答鏈里面進行很好的跳轉管理了。那么為了實現(xiàn)天氣、放映影片、附近影院、旅游線路、交通事件等方面的擴展應用,我們應該如何操作呢?
3、地址位置應用擴展
我們知道,百度或者騰訊都提供了一些開放平臺,給我們進行各種方式的使用。那么我們這里以使用百度LBS平臺應用來構建一些模塊。
?
?
這上面都有很多相關的接口供使用,我們可以根據(jù)其提供的數(shù)據(jù)格式進行封裝,然后進行調用處理就可以了。
剛才說了,我配置了一些指令,用來構建相關的應用,指令的最后是一些事件代碼的定義,我們對這些末端的事件代碼進行處理,就可以給用戶返回相關的信息了,總體的操作代碼如下所示。
????????///?<summary> ????????///?其他插件操作,如天氣,景點、電影影訊、交通等????????///?</summary> ????????///?<param name="info">基礎消息</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; ????????}
這里以天氣為例,說明該如何調用百度的接口的,首先我們封裝一下相關的接口調用。
????????///?<summary> ????????///?根據(jù)參數(shù)調用百度接口,獲取相關的結果數(shù)據(jù)????????///?</summary> ????????///?<param name="location">地理位置</param> ????????///?<param name="ak">API調用鍵</param> ????????///?<returns></returns> ????????public?BaiduWeatherResult?Execute(string?location,?string?ak) ????????{ ????????????location?=?HttpUtility.UrlEncode(location);????????????var?url?=?string.Format("http://www.miracleart.cn/{0}&output=json&ak={1}",?location,?ak); ????????????BaiduWeatherResult?result?=?BaiduJsonHelper<BaiduWeatherResult>.ConvertJson(url);????????????return?result; ????????}
其中的BaiduWeatherResult 是我根據(jù)調用返回的Json結果,構建的一個實體類,用來存儲返回的內容。具體代碼如下所示。
????///?<summary> ????///?天氣請求結果Json對象????///?</summary> ????public?class?BaiduWeatherResult?:?BaiduResult ????{????????///?<summary> ????????///?天氣預報信息????????///?</summary> ????????public?List<BaiduWeatherData>?results?=?new?List<BaiduWeatherData>(); ????}????///?<summary> ????///?城市的天氣信息????///?</summary> ????public?class?BaiduWeatherData ????{????????///?<summary> ????????///?當前城市????????///?</summary> ????????public?string?currentCity?{?get;?set;?}????????///?<summary> ????????///?天氣預報信息????????///?</summary> ????????public?List<BaiduWeatherJson>?weather_data?=?new?List<BaiduWeatherJson>(); ????}????///?<summary> ????///?天氣預報的單條記錄Json信息????///?</summary> ????public?class?BaiduWeatherJson ????{????????///?<summary> ????????///?天氣預報時間????????///?</summary> ????????public?string?date?{?get;?set;?}????????///?<summary> ????????///?白天的天氣預報圖片url????????///?</summary> ????????public?string?dayPictureUrl?{?get;?set;?}????????///?<summary> ????????///?晚上的天氣預報圖片url????????///?</summary> ????????public?string?nightPictureUrl?{?get;?set;?}????????///?<summary> ????????///?天氣狀況????????///?</summary> ????????public?string?weather?{?get;?set;?}????????///?<summary> ????????///?風力????????///?</summary> ????????public?string?wind?{?get;?set;?}????????///?<summary> ????????///?溫度????????///?</summary> ????????public?string?temperature?{?get;?set;?} ????}
為了構建返回給客戶的圖文數(shù)據(jù),我們需要構建一個News對象,然后生成XML數(shù)據(jù)返回給服務器進行處理即可。
????????///?<summary> ????????///?響應用戶請求,并返回相應的XML數(shù)據(jù)????????///?</summary> ????????///?<param name="info">微信基礎信息</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}?天氣預報",?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)了整體的功能了,具體界面功能可以訪問我的微信(廣州愛奇迪)進行了解,下面是功能截圖供參考。
? ?
Plus de développement C# de portails et d'applications WeChat - utiliser la localisation géographique pour étendre les applications associées Pour les articles connexes, veuillez faire attention au PHP Site chinois !

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)