狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#開發(fā)微信門戶及應(yīng)用(13)-使用地理位置擴(kuò)展相關(guān)應(yīng)用

admin
2014年12月2日 1:3 本文熱度 4585


本文繼續(xù)上一篇《C#開發(fā)微信門戶及應(yīng)用(12)-使用語音處理》,繼續(xù)介紹微信的相關(guān)應(yīng)用。我們知道,地理位置信息可以用來做很多相關(guān)的應(yīng)用,除了我們可以知道用戶所在的位置,還可以關(guān)聯(lián)出一些地理位置的應(yīng)用,如天氣,熱映影片,附近景點(diǎn),附近影院,交通事件等等,反正所有和地理位置相關(guān)的信息,我們都可以根據(jù)需要做一些擴(kuò)展應(yīng)用。本文主要介紹利用地理位置信息,如何構(gòu)建使用這些應(yīng)用的操作。



1、微信的地理位置信息


在使用前,我們先來看看微信的接口,為我們定義了那些關(guān)于與地理位置的信息。其實(shí)地理位置的信息,微信分為了兩個方面,一個是接收用戶的地理位置請求,一個是用戶允許上報地理位置操作,定時發(fā)送的地理位置信息。


本文主要介紹基于第一種,用戶上報地理位置后,如何處理的相關(guān)應(yīng)用。


地理位置的上報操作,就是在輸入的地方,選擇+號進(jìn)行添加地理位置,然后選擇當(dāng)前或者指定的地理位置地圖,具體操作如下所示。


                


地理位置消息



復(fù)制代碼
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>23.134521</Location_X>
<Location_Y>113.358803</Location_Y>
<Scale>20</Scale>
<Label><![CDATA[位置信息]]></Label>
<MsgId>1234567890123456</MsgId>
</xml>

復(fù)制代碼
































參數(shù) 描述
ToUserName 開發(fā)者微信號
FromUserName 發(fā)送方帳號(一個OpenID)
CreateTime 消息創(chuàng)建時間 (整型)
MsgType location
Location_X 地理位置維度
Location_Y 地理位置經(jīng)度
Scale 地圖縮放大小
Label 地理位置信息
MsgId 消息id,64位整型

有了上面的地理位置信息,我們在程序里面,需要在消息傳遞過來的時候,定義一個實(shí)體類信息,承載相關(guān)的地理位置信息,方便我們進(jìn)一步的處理操作。



復(fù)制代碼
    /// <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; }
}

復(fù)制代碼

有了這些信息,我們在信息傳遞的時候,就能很好得到用戶的相關(guān)數(shù)據(jù)了。


如果僅僅為了返回給用戶,告訴用戶目前的地理位置信息,可以用下面的操作就可以了。



復(fù)制代碼
        /// <summary>
/// 對地理位置請求信息進(jìn)行處理
/// </summary>
/// <param name="info">地理位置請求信息實(shí)體</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;
}

復(fù)制代碼

2、地址位置的應(yīng)用處理


不過上面的信息,顯然不符合我們擴(kuò)展應(yīng)用的要求,因此我們進(jìn)一步進(jìn)行完善里面對地理位置信息處理的操作。我們進(jìn)一步把關(guān)于地理位置的操作,放到事件處理模塊里面進(jìn)行處理,處理代碼如下所示。



復(fù)制代碼
        /// <summary>
/// 對地理位置請求信息進(jìn)行處理
/// </summary>
/// <param name="info">地理位置請求信息實(shí)體</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;
}

復(fù)制代碼

在處理的時候,我們需要先保存用戶的地理位置信息,把它存儲到用戶的上下文記錄里面。這樣我們在處理指令的時候,把它獲取到,然后傳遞給相關(guān)的方法就可以實(shí)現(xiàn)地理位置的擴(kuò)展應(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)答鏈里面進(jìn)行很好的跳轉(zhuǎn)管理了。那么為了實(shí)現(xiàn)天氣、放映影片、附近影院、旅游線路、交通事件等方面的擴(kuò)展應(yīng)用,我們應(yīng)該如何操作呢?


3、地址位置應(yīng)用擴(kuò)展


我們知道,百度或者騰訊都提供了一些開放平臺,給我們進(jìn)行各種方式的使用。那么我們這里以使用百度LBS平臺應(yīng)用來構(gòu)建一些模塊。


 


 


這上面都有很多相關(guān)的接口供使用,我們可以根據(jù)其提供的數(shù)據(jù)格式進(jìn)行封裝,然后進(jìn)行調(diào)用處理就可以了。


剛才說了,我配置了一些指令,用來構(gòu)建相關(guān)的應(yīng)用,指令的最后是一些事件代碼的定義,我們對這些末端的事件代碼進(jìn)行處理,就可以給用戶返回相關(guān)的信息了,總體的操作代碼如下所示。



復(fù)制代碼
        /// <summary>
/// 其他插件操作,如天氣,景點(diǎn)、電影影訊、交通等
/// </summary>
/// <param name="info">基礎(chǔ)消息</param>
/// <param name="eventKey">事件標(biāo)識</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;
}

復(fù)制代碼

這里以天氣為例,說明該如何調(diào)用百度的接口的,首先我們封裝一下相關(guān)的接口調(diào)用。



復(fù)制代碼
        /// <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://api.map.baidu.com/telematics/v3/weather?location={0}&output=json&ak={1}", location, ak);
BaiduWeatherResult result
= BaiduJsonHelper<BaiduWeatherResult>.ConvertJson(url);
return result;
}

復(fù)制代碼

其中的BaiduWeatherResult 是我根據(jù)調(diào)用返回的Json結(jié)果,構(gòu)建的一個實(shí)體類,用來存儲返回的內(nèi)容。具體代碼如下所示。



復(fù)制代碼
    /// <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; }
}

復(fù)制代碼

為了構(gòu)建返回給客戶的圖文數(shù)據(jù),我們需要構(gòu)建一個News對象,然后生成XML數(shù)據(jù)返回給服務(wù)器進(jìn)行處理即可。



復(fù)制代碼
        /// <summary>
/// 響應(yīng)用戶請求,并返回相應(yīng)的XML數(shù)據(jù)
/// </summary>
/// <param name="info">微信基礎(chǔ)信息</param>
/// <param name="location">地理位置:經(jīng)緯度坐標(biāo)或者地名</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;
}

復(fù)制代碼

這樣就很好實(shí)現(xiàn)了整體的功能了,具體界面功能可以訪問我的微信(廣州愛奇迪)進(jìn)行了解,下面是功能截圖供參考。


   


 



 


如果對這個《C#開發(fā)微信門戶及應(yīng)用》系列感興趣,可以關(guān)注我的其他文章,系列隨筆如下所示:


C#開發(fā)微信門戶及應(yīng)用(20)-微信企業(yè)號的菜單管理


C#開發(fā)微信門戶及應(yīng)用(19)-微信企業(yè)號的消息發(fā)送(文本、圖片、文件、語音、視頻、圖文消息等)


C#開發(fā)微信門戶及應(yīng)用(18)-微信企業(yè)號的通訊錄管理開發(fā)之成員管理


C#開發(fā)微信門戶及應(yīng)用(17)-微信企業(yè)號的通訊錄管理開發(fā)之部門管理


C#開發(fā)微信門戶及應(yīng)用(16)-微信企業(yè)號的配置和使用


C#開發(fā)微信門戶及應(yīng)用(15)-微信菜單增加掃一掃、發(fā)圖片、發(fā)地理位置功能


 C#開發(fā)微信門戶及應(yīng)用(14)-在微信菜單中采用重定向獲取用戶數(shù)據(jù)


C#開發(fā)微信門戶及應(yīng)用(13)-使用地理位置擴(kuò)展相關(guān)應(yīng)用


C#開發(fā)微信門戶及應(yīng)用(12)-使用語音處理


C#開發(fā)微信門戶及應(yīng)用(11)--微信菜單的多種表現(xiàn)方式介紹


C#開發(fā)微信門戶及應(yīng)用(10)--在管理系統(tǒng)中同步微信用戶分組信息


C#開發(fā)微信門戶及應(yīng)用(9)-微信門戶菜單管理及提交到微信服務(wù)器


C#開發(fā)微信門戶及應(yīng)用(8)-微信門戶應(yīng)用管理系統(tǒng)功能介紹


C#開發(fā)微信門戶及應(yīng)用(7)-微信多客服功能及開發(fā)集成


C#開發(fā)微信門戶及應(yīng)用(6)--微信門戶菜單的管理操作


C#開發(fā)微信門戶及應(yīng)用(5)--用戶分組信息管理


C#開發(fā)微信門戶及應(yīng)用(4)--關(guān)注用戶列表及詳細(xì)信息管理


C#開發(fā)微信門戶及應(yīng)用(3)--文本消息和圖文消息的應(yīng)答


C#開發(fā)微信門戶及應(yīng)用(2)--微信消息的處理和應(yīng)答


C#開發(fā)微信門戶及應(yīng)用(1)--開始使用微信接口


 



主要研究技術(shù):代碼生成工具、Visio二次開發(fā)、客戶關(guān)系管理軟件、送水管理軟件等共享軟件開發(fā)
專注于Winform開發(fā)框架Web開發(fā)框架、WCF開發(fā)框架的研究及應(yīng)用。
  轉(zhuǎn)載請注明出處:
撰寫人:伍華聰  http://www.iqidi.com 
    





該文章在 2014/12/2 1:03:17 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved