• 基于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. }  

  • 相关阅读:
    JVM运行参数优化详细教程
    idea 代码热启动配置方法
    Spring MVC拦截器完整代码示例
    Spring MVC异常处理代码完整实例
    Python3基础语法(20190617)
    Java代码生成器Easy Code
    Mybatis @Many注解一对多关联映射
    Mybatis @One注解使用
    Mybatis @ResultMap复用@Result
    Mybatis @Result注解的使用案例
  • 原文地址:https://www.cnblogs.com/sunny3158/p/15307333.html
Copyright © 2020-2023  润新知