基于C#的全国天气查询API调用代码实例

原文链接:https://www.iteye.com/blog/jammk-2347568

基于C#的全国天气查询API调用代码实例

全国天气查询API:https://www.juhe.cn/docs/api/id/39

基于C#的全国天气查询API调用代码实例

C#代码  收藏代码
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Net;  
  6. using System.IO;  
  7. using Xfrog.Net;  
  8. using System.Diagnostics;  
  9. using System.Web;  
  10.    
  11. //----------------------------------  
  12. // 全国天气预报调用示例代码 - 聚合数据  
  13. // 在线接口文档:http://www.juhe.cn/docs/39  
  14. // 代码中JsonObject类下载地址:http://download.csdn.net/download/gcm3206021155665/7458439  
  15. //----------------------------------  
  16.    
  17. namespace ConsoleAPI  
  18. {  
  19.     class Program  
  20.     {  
  21.         static void Main(string[] args)  
  22.         {  
  23.             string appkey = "*******************"//配置您申请的appkey  
  24.    
  25.                
  26.             //1.根据城市名/id查询天气  
  27.             string url1 = "http://v.juhe.cn/weather/index";  
  28.    
  29.             var parameters1 = new Dictionary<stringstring>();  
  30.    
  31.             parameters1.Add("cityname" , ""); //城市名或城市ID,如:&quot;苏州&quot;,需要utf8 urlencode  
  32.             parameters1.Add("dtype" , ""); //返回数据格式:json或xml,默认json  
  33.             parameters1.Add("format" , ""); //未来6天预报(future)两种返回格式,1或2,默认1  
  34.             parameters1.Add("key", appkey);//你申请的key  
  35.    
  36.             string result1 = sendPost(url1, parameters1, "get");  
  37.    
  38.             JsonObject newObj1 = new JsonObject(result1);  
  39.             String errorCode1 = newObj1["error_code"].Value;  
  40.    
  41.             if (errorCode1 == "0")  
  42.             {  
  43.                 Debug.WriteLine("成功");  
  44.                 Debug.WriteLine(newObj1);  
  45.             }  
  46.             else  
  47.             {  
  48.                 //Debug.WriteLine("失败");  
  49.                 Debug.WriteLine(newObj1["error_code"].Value+":"+newObj1["reason"].Value);  
  50.             }  
  51.    
  52.    
  53.             //2.天气种类及标识列表  
  54.             string url2 = "http://v.juhe.cn/weather/uni";  
  55.    
  56.             var parameters2 = new Dictionary<stringstring>();  
  57.    
  58.             parameters2.Add("key", appkey);//你申请的key  
  59.             parameters2.Add("dtype" , ""); //返回数据的格式,xml或json,默认json  
  60.    
  61.             string result2 = sendPost(url2, parameters2, "get");  
  62.    
  63.             JsonObject newObj2 = new JsonObject(result2);  
  64.             String errorCode2 = newObj2["error_code"].Value;  
  65.    
  66.             if (errorCode2 == "0")  
  67.             {  
  68.                 Debug.WriteLine("成功");  
  69.                 Debug.WriteLine(newObj2);  
  70.             }  
  71.             else  
  72.             {  
  73.                 //Debug.WriteLine("失败");  
  74.                 Debug.WriteLine(newObj2["error_code"].Value+":"+newObj2["reason"].Value);  
  75.             }  
  76.    
  77.    
  78.             //3.根据IP查询天气  
  79.             string url3 = "http://v.juhe.cn/weather/ip";  
  80.    
  81.             var parameters3 = new Dictionary<stringstring>();  
  82.    
  83.             parameters3.Add("ip" , ""); //ip地址,如:58.215.185.154  
  84.             parameters3.Add("dtype" , ""); //返回数据格式:json或xml,默认json  
  85.             parameters3.Add("format" , ""); //未来6天预报(future)两种返回格式,1或2,默认1  
  86.             parameters3.Add("key", appkey);//你申请的key  
  87.    
  88.             string result3 = sendPost(url3, parameters3, "get");  
  89.    
  90.             JsonObject newObj3 = new JsonObject(result3);  
  91.             String errorCode3 = newObj3["error_code"].Value;  
  92.    
  93.             if (errorCode3 == "0")  
  94.             {  
  95.                 Debug.WriteLine("成功");  
  96.                 Debug.WriteLine(newObj3);  
  97.             }  
  98.             else  
  99.             {  
  100.                 //Debug.WriteLine("失败");  
  101.                 Debug.WriteLine(newObj3["error_code"].Value+":"+newObj3["reason"].Value);  
  102.             }  
  103.    
  104.    
  105.             //4.根据GPS坐标查询天气  
  106.             string url4 = "http://v.juhe.cn/weather/geo";  
  107.    
  108.             var parameters4 = new Dictionary<stringstring>();  
  109.    
  110.             parameters4.Add("lon" , ""); //经度,如:116.39277  
  111.             parameters4.Add("lat" , ""); //纬度,如:39.933748  
  112.             parameters4.Add("format" , ""); //未来6天预报(future)两种返回格式,1或2,默认1  
  113.             parameters4.Add("dtype" , ""); //返回数据格式:json或xml,默认json  
  114.             parameters4.Add("key", appkey);//你申请的key  
  115.    
  116.             string result4 = sendPost(url4, parameters4, "get");  
  117.    
  118.             JsonObject newObj4 = new JsonObject(result4);  
  119.             String errorCode4 = newObj4["error_code"].Value;  
  120.    
  121.             if (errorCode4 == "0")  
  122.             {  
  123.                 Debug.WriteLine("成功");  
  124.                 Debug.WriteLine(newObj4);  
  125.             }  
  126.             else  
  127.             {  
  128.                 //Debug.WriteLine("失败");  
  129.                 Debug.WriteLine(newObj4["error_code"].Value+":"+newObj4["reason"].Value);  
  130.             }  
  131.    
  132.    
  133.             //5.城市天气三小时预报  
  134.             string url5 = "http://v.juhe.cn/weather/forecast3h";  
  135.    
  136.             var parameters5 = new Dictionary<stringstring>();  
  137.    
  138.             parameters5.Add("cityname" , ""); //城市名,如:&quot;苏州&quot;  
  139.             parameters5.Add("dtype" , ""); //返回数据格式:json或xml,默认json  
  140.             parameters5.Add("key", appkey);//你申请的key  
  141.    
  142.             string result5 = sendPost(url5, parameters5, "get");  
  143.    
  144.             JsonObject newObj5 = new JsonObject(result5);  
  145.             String errorCode5 = newObj5["error_code"].Value;  
  146.    
  147.             if (errorCode5 == "0")  
  148.             {  
  149.                 Debug.WriteLine("成功");  
  150.                 Debug.WriteLine(newObj5);  
  151.             }  
  152.             else  
  153.             {  
  154.                 //Debug.WriteLine("失败");  
  155.                 Debug.WriteLine(newObj5["error_code"].Value+":"+newObj5["reason"].Value);  
  156.             }  
  157.    
  158.    
  159.             //6.支持城市列表  
  160.             string url6 = "http://v.juhe.cn/weather/citys";  
  161.    
  162.             var parameters6 = new Dictionary<stringstring>();  
  163.    
  164.             parameters6.Add("dtype" , ""); //返回数据格式:json或xml,默认json  
  165.             parameters6.Add("key", appkey);//你申请的key  
  166.    
  167.             string result6 = sendPost(url6, parameters6, "get");  
  168.    
  169.             JsonObject newObj6 = new JsonObject(result6);  
  170.             String errorCode6 = newObj6["error_code"].Value;  
  171.    
  172.             if (errorCode6 == "0")  
  173.             {  
  174.                 Debug.WriteLine("成功");  
  175.                 Debug.WriteLine(newObj6);  
  176.             }  
  177.             else  
  178.             {  
  179.                 //Debug.WriteLine("失败");  
  180.                 Debug.WriteLine(newObj6["error_code"].Value+":"+newObj6["reason"].Value);  
  181.             }  
  182.    
  183.    
  184.         }  
  185.    
  186.         /// <summary>  
  187.         /// Http (GET/POST)  
  188.         /// </summary>  
  189.         /// <param name="url">请求URL</param>  
  190.         /// <param name="parameters">请求参数</param>  
  191.         /// <param name="method">请求方法</param>  
  192.         /// <returns>响应内容</returns>  
  193.         static string sendPost(string url, IDictionary<stringstring> parameters, string method)  
  194.         {  
  195.             if (method.ToLower() == "post")  
  196.             {  
  197.                 HttpWebRequest req = null;  
  198.                 HttpWebResponse rsp = null;  
  199.                 System.IO.Stream reqStream = null;  
  200.                 try  
  201.                 {  
  202.                     req = (HttpWebRequest)WebRequest.Create(url);  
  203.                     req.Method = method;  
  204.                     req.KeepAlive = false;  
  205.                     req.ProtocolVersion = HttpVersion.Version10;  
  206.                     req.Timeout = 5000;  
  207.                     req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";  
  208.                     byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters, "utf8"));  
  209.                     reqStream = req.GetRequestStream();  
  210.                     reqStream.Write(postData, 0, postData.Length);  
  211.                     rsp = (HttpWebResponse)req.GetResponse();  
  212.                     Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);  
  213.                     return GetResponseAsString(rsp, encoding);  
  214.                 }  
  215.                 catch (Exception ex)  
  216.                 {  
  217.                     return ex.Message;  
  218.                 }  
  219.                 finally  
  220.                 {  
  221.                     if (reqStream != null) reqStream.Close();  
  222.                     if (rsp != null) rsp.Close();  
  223.                 }  
  224.             }  
  225.             else  
  226.             {  
  227.                 //创建请求  
  228.                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "?" + BuildQuery(parameters, "utf8"));  
  229.    
  230.                 //GET请求  
  231.                 request.Method = "GET";  
  232.                 request.ReadWriteTimeout = 5000;  
  233.                 request.ContentType = "text/html;charset=UTF-8";  
  234.                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
  235.                 Stream myResponseStream = response.GetResponseStream();  
  236.                 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));  
  237.    
  238.                 //返回内容  
  239.                 string retString = myStreamReader.ReadToEnd();  
  240.                 return retString;  
  241.             }  
  242.         }  
  243.    
  244.         /// <summary>  
  245.         /// 组装普通文本请求参数。  
  246.         /// </summary>  
  247.         /// <param name="parameters">Key-Value形式请求参数字典</param>  
  248.         /// <returns>URL编码后的请求数据</returns>  
  249.         static string BuildQuery(IDictionary<stringstring> parameters, string encode)  
  250.         {  
  251.             StringBuilder postData = new StringBuilder();  
  252.             bool hasParam = false;  
  253.             IEnumerator<KeyValuePair<stringstring>> dem = parameters.GetEnumerator();  
  254.             while (dem.MoveNext())  
  255.             {  
  256.                 string name = dem.Current.Key;  
  257.                 string value = dem.Current.Value;  
  258.                 // 忽略参数名或参数值为空的参数  
  259.                 if (!string.IsNullOrEmpty(name))//&& !string.IsNullOrEmpty(value)  
  260.                 {  
  261.                     if (hasParam)  
  262.                     {  
  263.                         postData.Append("&");  
  264.                     }  
  265.                     postData.Append(name);  
  266.                     postData.Append("=");  
  267.                     if (encode == "gb2312")  
  268.                     {  
  269.                         postData.Append(HttpUtility.UrlEncode(value, Encoding.GetEncoding("gb2312")));  
  270.                     }  
  271.                     else if (encode == "utf8")  
  272.                     {  
  273.                         postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8));  
  274.                     }  
  275.                     else  
  276.                     {  
  277.                         postData.Append(value);  
  278.                     }  
  279.                     hasParam = true;  
  280.                 }  
  281.             }  
  282.             return postData.ToString();  
  283.         }  
  284.    
  285.         /// <summary>  
  286.         /// 把响应流转换为文本。  
  287.         /// </summary>  
  288.         /// <param name="rsp">响应流对象</param>  
  289.         /// <param name="encoding">编码方式</param>  
  290.         /// <returns>响应文本</returns>  
  291.         static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)  
  292.         {  
  293.             System.IO.Stream stream = null;  
  294.             StreamReader reader = null;  
  295.             try  
  296.             {  
  297.                 // 以字符流的方式读取HTTP响应  
  298.                 stream = rsp.GetResponseStream();  
  299.                 reader = new StreamReader(stream, encoding);  
  300.                 return reader.ReadToEnd();  
  301.             }  
  302.             finally  
  303.             {  
  304.                 // 释放资源  
  305.                 if (reader != null) reader.Close();  
  306.                 if (stream != null) stream.Close();  
  307.                 if (rsp != null) rsp.Close();  
  308.             }  
  309.         }  
  310.     }  
  311. }  

原文地址:https://www.cnblogs.com/sunny3158/p/15307333.html