C# 调用百度地图Web服务API
2014-04-09 16:11
387 查看
最近公司项目中需要根据两个地点的交通路径和距离做一些数据推荐,为了程序的稳定和用户体验所以想从百度地图 API 采集数据保存到数据库中,经过一翻研究之后选定了百度地图 Web 服务 API 中的 Direction API ,最后写了个服务去定时采集。
关于 Direction API 的相关说明这里不做详细阐述了,大家可以去百度地图 API 的页面去详细了解,地址:http://developer.baidu.com/map/direction-api.htm。
一、准备工作
1、首先要去申请一个密钥,地址:http://lbsyun.baidu.com/apiconsole/key?application=key
查看代码
通过循环调用 RequestApi 的方式就可以获取两个地点的交通数据了。
Json 转换后的实体类可以通过 json2csharp 工具直接生成,地址:http://json2csharp.com/。
二、需要注意的是:
1、这个 API 有时候请求之后响应时间较长,经常会超时,所以我在 HttpUtils 类里抛出了 WebException 异常。
2、Json 转换的方法里也要做异常处理。
关于 Direction API 的相关说明这里不做详细阐述了,大家可以去百度地图 API 的页面去详细了解,地址:http://developer.baidu.com/map/direction-api.htm。
一、准备工作
1、首先要去申请一个密钥,地址:http://lbsyun.baidu.com/apiconsole/key?application=key
/// <summary> /// 提供 Http 相关方法。 /// </summary> public class HttpUtils { /// <summary> /// 执行HTTP GET请求。 /// </summary> /// <param name="url">请求地址</param> /// <param name="parameters">请求参数</param> /// <returns>HTTP响应</returns> public static string DoGet(string url, IDictionary<string, string> parameters) { if (parameters != null && parameters.Count > 0) { if (url.Contains("?")) { url = url + "&" + BuildPostData(parameters); } else { url = url + "?" + BuildPostData(parameters); } } HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.ServicePoint.Expect100Continue = false; req.Method = "GET"; req.KeepAlive = true; req.UserAgent = "Test"; req.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; HttpWebResponse rsp = null; try { rsp = (HttpWebResponse)req.GetResponse(); } catch (WebException webEx) { if (webEx.Status == WebExceptionStatus.Timeout) { rsp = null; } } if (rsp != null) { if (rsp.CharacterSet != null) { Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet); return GetResponseAsString(rsp, encoding); } else { return string.Empty; } } else { return string.Empty; } } /// <summary> /// 把响应流转换为文本。 /// </summary> /// <param name="rsp">响应流对象</param> /// <param name="encoding">编码方式</param> /// <returns>响应文本</returns> private static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding) { StringBuilder result = new StringBuilder(); Stream stream = null; StreamReader reader = null; try { // 以字符流的方式读取HTTP响应 stream = rsp.GetResponseStream(); reader = new StreamReader(stream, encoding); // 每次读取不大于256个字符,并写入字符串 char[] buffer = new char[256]; int readBytes = 0; while ((readBytes = reader.Read(buffer, 0, buffer.Length)) > 0) { result.Append(buffer, 0, readBytes); } } catch (WebException webEx) { if (webEx.Status == WebExceptionStatus.Timeout) { result = new StringBuilder(); } } finally { // 释放资源 if (reader != null) reader.Close(); if (stream != null) stream.Close(); if (rsp != null) rsp.Close(); } return result.ToString(); } /// <summary> /// 组装普通文本请求参数。 /// </summary> /// <param name="parameters">Key-Value形式请求参数字典。</param> /// <returns>URL编码后的请求数据。</returns> private static string BuildPostData(IDictionary<string, string> parameters) { StringBuilder postData = new StringBuilder(); bool hasParam = false; IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator(); while (dem.MoveNext()) { string name = dem.Current.Key; string value = dem.Current.Value; // 忽略参数名或参数值为空的参数 if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value)) { if (hasParam) { postData.Append("&"); } postData.Append(name); postData.Append("="); postData.Append(Uri.EscapeDataString(value)); hasParam = true; } } return postData.ToString(); } }
查看代码
通过循环调用 RequestApi 的方式就可以获取两个地点的交通数据了。
Json 转换后的实体类可以通过 json2csharp 工具直接生成,地址:http://json2csharp.com/。
二、需要注意的是:
1、这个 API 有时候请求之后响应时间较长,经常会超时,所以我在 HttpUtils 类里抛出了 WebException 异常。
2、Json 转换的方法里也要做异常处理。
相关文章推荐
- C# 调用百度地图web服务API
- C# 调用百度地图Web服务API
- C#调用百度地图 api
- c#调用百度地图web服务api-----该方法可用在js跨域请求上
- c#调用百度地图web服务api-----该方法可用在js跨域请求上
- C#调用百度地图精确地址建议API
- c#调用Discuz的UCenter 1.5的API及示例。
- C#调用API的一些基础(希望有人用的上)
- 用 c 调用 win-api 实现自动点击c# winform 程序 的按钮
- C#调用API读写INI文件
- 新浪微博PC客户端(DotNet WinForm C# 版,C#调用新浪微博API代码,源码下载)—— 初探 (第二部分内置链接)
- C#中调用API
- C# 调用淘宝API 代码 C# 调用淘宝店铺API (一)
- 在C#中调用API播放windows声音
- 在C#中调用API的基本过程
- 在C#中调用API的基本过程 .
- C#调用Win32 api学习总结
- C# 调用 Google Earth Com API开发(二)
- C#中调用API
- C#中调用Outlook API 发起会议