一、获取中国免费的天气信息有两种方式

注意:本篇文章的项目工程下载连接为:TestWeather

1.1、获取中国免费的天气信息方式1

1.1.1、方式1获取中国免费的天气信息流程为:

①获取省级直辖市列表-->选择对应省级直辖市列表中的一个获取到对应的编号;

②根据选择的该省级直辖市名称获取的编号获取对应的城市列表-->选择该省级直辖市下城市列表中的一个获取对应的编号;

③根据选择的该省级直辖市下的城市名称获取的编号获取对应的地州列表-->选择该省级直辖市下城市列表中的一个获取对应的编号

1.1.2、中国气象局开放的获取天气数据的webApi接口如下

①获取中国省级直辖市列表的接口:http://www.weather.com.cn/data/city3jdata/china.html

②获取中国省级直辖市下城市列表的接口:http://www.weather.com.cn/data/city3jdata/provshi/10129.html【该加粗的10129就是需要查询的省级直辖市名称的编号,10129是云南的编号】

③获取中国省级直辖市下城市下地州列表的接口:http://www.weather.com.cn/data/city3jdata/station/1012901.html 【该加粗的1012901就是需要查询的省级直辖市下城市名称的编号,1012901是云南昆明的编号;而101290108是云南昆明呈贡的编号】

④根据获取的中国省级直辖市下城市下地州的编号得到天气数据接口:接口1:http://www.weather.com.cn/data/cityinfo/101290108.html 接口2:http://www.weather.com.cn/data/sk/101290108.html 接口3:https://api.help.bj.cn/apis/weather/?id=101290108【该加粗的101290108就是目前需要查询的地州的天气情况所需的编号】

【注意接口3不是中国天气接口,是一个第三方免费接口,该接口的网址为:第三方免费天气接口】

1.1.3、获取天气的项目程序如下:

    using Newtonsoft.Json;using Newtonsoft.Json.Linq;using System;using System.Collections;using System.IO;using System.Net;using System.Text;using System.Text.RegularExpressions;class Program{static void Main(string[] args){//获取天气信息GetWeatherInfos();}//获取天气信息private static void GetWeatherInfos(){try{//1-获取到当前中国的所有省份直辖市信息列表Console.WriteLine("省及直辖市:");Hashtable HTProvice = GetInfoAndPrint("http://www.weather.com.cn/data/city3jdata/china.html");//2-输入当前需要查询的省份直辖市名称string Provice =null;while (true){Console.Write("请输入需要查询的省或直辖市:");Provice = Console.ReadLine();Provice = IsSameInfo(Provice, HTProvice);if (!string.IsNullOrEmpty(Provice)) break;}//3-根据当前输入需要查询的省份直辖市名称获取到该省份直辖市包含的城市Hashtable HTCity = GetInfoAndPrint($"http://www.weather.com.cn/data/city3jdata/provshi/{Provice}.html");Console.WriteLine("城市:");//4-输入当前需要查询的城市名称string City =null;while (true){Console.Write("请输入需要查询的城市:");City = Console.ReadLine();City = IsSameInfo(City, HTCity);if (!string.IsNullOrEmpty(City)) break;}//5-根据当前输入当前需要查询的城市名称获取到该城市包含的地州信息Hashtable HTArea = GetInfoAndPrint($"http://www.weather.com.cn/data/city3jdata/station/{Provice}{City}.html");Console.WriteLine("地州:");//6-输入当前需要查询的地州名称string Area=null;string strAreaName = null;while (true){Console.Write("请输入需要查询的地州:");Area = Console.ReadLine();strAreaName = Area;Area = IsSameInfo(Area, HTArea);if (!string.IsNullOrEmpty(Area)) break;}//7-获取到当前需要查询的地州对应的总编号string StrAreaNumber = string.Format("{0}{1}{2}",Provice, City, Area);Console.WriteLine("当前查询的省市地州为:"+ StrAreaNumber);//免费的天气信息获取APIstring WeatherInfos = HttpGet($"https://api.help.bj.cn/apis/weather/?id={StrAreaNumber}");Console.WriteLine("天气信息:");JObject jot = AnalayJson.AnalayJsonStringToJObject(WeatherInfos);Console.WriteLine("1-反馈代码:"+jot["status"].ToString());Console.WriteLine("2-实时温度:" + jot["temp"].ToString() + "℃");Console.WriteLine("3-风    向:" + jot["wd"].ToString());Console.WriteLine("4-风    力:" + jot["wdforce"].ToString());Console.WriteLine("5-风    速:" + jot["wdspd"].ToString());Console.WriteLine("6-更新时间:" + jot["uptime"].ToString());Console.WriteLine("7-天气状况:" + jot["weather"].ToString());Console.WriteLine("8-天气图标:" + jot["weatherimg"].ToString());Console.WriteLine("9-气    压:" + jot["stp"].ToString() + "pa");Console.WriteLine("10- 能见度:" + jot["wisib"].ToString());Console.WriteLine("11-湿   度:" + jot["humidity"].ToString());Console.WriteLine("12-24小时降雨量:" + jot["prcp24h"].ToString());Console.WriteLine("13-PM2.5  :" + jot["pm25"].ToString());Console.WriteLine("14-今日日期:" + jot["today"].ToString());Console.WriteLine("-----------免费的天气信息获取完成----------------");Console.WriteLine("按任何键退出...");Console.ReadKey();}/// <summary>/// 发送GET请求/// </summary>/// <param name="url">请求URL,如果需要传参,在URL末尾加上“?+参数名=参数值”即可</param>/// <returns>返回对应的相应信息</returns>private static string HttpGet(string url){if (!string.IsNullOrEmpty(url)){try{//创建HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);//设置请求方法httpWebRequest.Method = "GET";//请求超时时间httpWebRequest.Timeout = 20000;//发送请求HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();//利用Stream流读取返回数据StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);//获得最终数据,一般是jsonstring responseContent = streamReader.ReadToEnd();streamReader.Close();httpWebResponse.Close();return responseContent;}catch (Exception ex){throw new Exception("获取当前 "+url+" 信息出错,请检查!!!"+ex.Message);}}else{return null;}}/// <summary>/// 当前输入的内容是否存在省份直辖市列表中/// </summary>/// <param name="curInfo">当前需要查询的省份直辖市或城市</param>/// <param name="ht">当前需要查询省份直辖市或城市的Hashtable表</param>/// <returns>返回当前查询省份直辖市或城市对应的编码</returns>private static string IsSameInfo(string curInfo, Hashtable ht){string strTmp = string.Empty;if (!string.IsNullOrEmpty(curInfo) && ht!=null && ht.Count>0){foreach (DictionaryEntry item in ht){if (item.Value.ToString().Contains(curInfo)){strTmp= item.Key.ToString();}}}return strTmp;}/// <summary>/// 获取信息并打印/// </summary>/// <param name="url">请求URL</param>/// <returns></returns>private static Hashtable GetInfoAndPrint(string url){Hashtable HTTmp = null;if (!string.IsNullOrEmpty(url)){string content = HttpGet(url);HTTmp = AnalayJson.AnalayJsonString(content);foreach (DictionaryEntry item in HTTmp){Console.WriteLine(item.Key + " " + item.Value);}Console.WriteLine("---------解析完成-------------");}return HTTmp;}}//Class_endclass AnalayJson{#region   解析Json字符串(首尾没有中括号)/// <summary>/// 解析Json字符串(首尾没有中括号)【线程安全】/// </summary>/// <param name="jsonStr">需要解析的Json字符串</param>/// <returns>返回解析好的Hashtable表</returns>public static Hashtable AnalayJsonString(string jsonStr){Hashtable ht = new Hashtable();if (!string.IsNullOrEmpty(jsonStr)){JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr);foreach (var item in jo){ht.Add(item.Key, item.Value);}}return ht;}/// <summary>/// 解析Json字符串为JObject(首尾没有中括号)/// </summary>/// <param name="jsonStr">需要解析的Json字符串</param>/// <returns>返回解析后的JObject对象</returns>public static JObject AnalayJsonStringToJObject(string jsonStr){if (!string.IsNullOrEmpty(jsonStr)){string strJsonIndex = string.Empty;JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr);return jo;}else{return null;}}#endregion#region   解析Json字符串(首尾有中括号)/// <summary>/// 解析Json字符串(首尾有中括号)【线程安全】/// </summary>/// <param name="jsonStr">需要解析的Json字符串</param>/// <returns>返回解析好的Hashtable表</returns>public static Hashtable AnalayJsonStringMiddleBrackets(string jsonStr){Hashtable ht = new Hashtable();if (!string.IsNullOrEmpty(jsonStr)){JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonStr);//jsonArrayText必须是带[]字符串数组if (jArray != null && jArray.Count > 0){foreach (var item in jArray){foreach (JToken jToken in item){string[] strTmp = jToken.ToString().Split(':');ht.Add(strTmp[0].Replace("\"", ""), strTmp[1].Replace("\"", ""));}}}}return ht;}/// <summary>/// 解析Json字符串为JArray(首尾有中括号)/// </summary>/// <param name="jsonStr">需要解析的Json字符串</param>/// <returns>返回解析后的JArray对象</returns>public static JArray AnalayJsonStringMiddleBracketsToJArray(string jsonStr){if (!string.IsNullOrEmpty(jsonStr)){string strJsonIndex = string.Empty;JArray ja = (JArray)JsonConvert.DeserializeObject(jsonStr);return ja;}else{return null;}}#endregion}

1.2、获取中国免费的天气信息方式2

1.2.1、采用第三方直接提供的数据接口(我这里的是直接采用:和风天气做示例;还推荐中国气象数据网,气象大数据平台)

①打开和风天气官网和风天气,然后选择右上角的“天气API”

②进入天气API后如果没有登陆请先注册登陆

③注册登陆后选择“API文档”,如下图所示;

④查看对应的API文档了解用法

⑤查看API文档后需要注册自己需要使用天气信息应用的key,操作如下图所示:

1.2.2、采用和风天气API获取天气信息代码如下:

    using Newtonsoft.Json;using Newtonsoft.Json.Linq;using System;using System.Collections;using System.IO;using System.Net;using System.Text;using System.Text.RegularExpressions;class Program{static void Main(string[] args){//获取天气信息GetWeatherInfos();}//获取天气信息private static void GetWeatherInfos(){try{//1-输入当前需要查询的地州名称string strAreaName = null;while (true){Console.Write("请输入需要查询的地州:");strAreaName = Console.ReadLine();if (!string.IsNullOrEmpty(strAreaName)) break;}Console.WriteLine("当前查询的省市地州为:"+ strAreaName);//2-和风天气实时信息获取示例string WeatherInfo = HttpGet($"https://free-api.heweather.net/s6/weather/now?location={strAreaName}&key=5c742a5979914bc6b7e195180ab488ee");JObject jo = AnalayJson.AnalayJsonStringToJObject(WeatherInfo);string str = jo["HeWeather6"].ToString();JArray ja = AnalayJson.AnalayJsonStringMiddleBracketsToJArray(str);Console.WriteLine("1-体感温度:" + ja[0]["now"]["fl"]);Console.WriteLine("2-温度:" + ja[0]["now"]["tmp"] + "℃");Console.WriteLine("3-天气情况:" + ja[0]["now"]["cond_txt"]);Console.WriteLine("4-风向角度:" + ja[0]["now"]["wind_deg"] );Console.WriteLine("5-风向:" + ja[0]["now"]["wind_dir"] );Console.WriteLine("5-风速:" + ja[0]["now"]["wind_spd"] );Console.WriteLine("6-相对湿度:" + ja[0]["now"]["hum"] + "");Console.WriteLine("7-降水量:" + ja[0]["now"]["pcpn"] );Console.WriteLine("8-大气压强:" + ja[0]["now"]["pres"] + "pa");Console.WriteLine("9-能见度:" + ja[0]["now"]["vis"] + "公里");Console.WriteLine("10-云量:" + ja[0]["now"]["cloud"] );Console.WriteLine("-----------免费的天气信息获取完成----------------");Console.WriteLine("按任何键退出...");Console.ReadKey();}/// <summary>/// 发送GET请求/// </summary>/// <param name="url">请求URL,如果需要传参,在URL末尾加上“?+参数名=参数值”即可</param>/// <returns>返回对应的相应信息</returns>private static string HttpGet(string url){if (!string.IsNullOrEmpty(url)){try{//创建HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);//设置请求方法httpWebRequest.Method = "GET";//请求超时时间httpWebRequest.Timeout = 20000;//发送请求HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();//利用Stream流读取返回数据StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);//获得最终数据,一般是jsonstring responseContent = streamReader.ReadToEnd();streamReader.Close();httpWebResponse.Close();return responseContent;}catch (Exception ex){throw new Exception("获取当前 "+url+" 信息出错,请检查!!!"+ex.Message);}}else{return null;}}/// <summary>/// 当前输入的内容是否存在省份直辖市列表中/// </summary>/// <param name="curInfo">当前需要查询的省份直辖市或城市</param>/// <param name="ht">当前需要查询省份直辖市或城市的Hashtable表</param>/// <returns>返回当前查询省份直辖市或城市对应的编码</returns>private static string IsSameInfo(string curInfo, Hashtable ht){string strTmp = string.Empty;if (!string.IsNullOrEmpty(curInfo) && ht!=null && ht.Count>0){foreach (DictionaryEntry item in ht){if (item.Value.ToString().Contains(curInfo)){strTmp= item.Key.ToString();}}}return strTmp;}/// <summary>/// 获取信息并打印/// </summary>/// <param name="url">请求URL</param>/// <returns></returns>private static Hashtable GetInfoAndPrint(string url){Hashtable HTTmp = null;if (!string.IsNullOrEmpty(url)){string content = HttpGet(url);HTTmp = AnalayJson.AnalayJsonString(content);foreach (DictionaryEntry item in HTTmp){Console.WriteLine(item.Key + " " + item.Value);}Console.WriteLine("---------解析完成-------------");}return HTTmp;}}//Class_endclass AnalayJson{#region   解析Json字符串(首尾没有中括号)/// <summary>/// 解析Json字符串(首尾没有中括号)【线程安全】/// </summary>/// <param name="jsonStr">需要解析的Json字符串</param>/// <returns>返回解析好的Hashtable表</returns>public static Hashtable AnalayJsonString(string jsonStr){Hashtable ht = new Hashtable();if (!string.IsNullOrEmpty(jsonStr)){JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr);foreach (var item in jo){ht.Add(item.Key, item.Value);}}return ht;}/// <summary>/// 解析Json字符串为JObject(首尾没有中括号)/// </summary>/// <param name="jsonStr">需要解析的Json字符串</param>/// <returns>返回解析后的JObject对象</returns>public static JObject AnalayJsonStringToJObject(string jsonStr){if (!string.IsNullOrEmpty(jsonStr)){string strJsonIndex = string.Empty;JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr);return jo;}else{return null;}}#endregion#region   解析Json字符串(首尾有中括号)/// <summary>/// 解析Json字符串(首尾有中括号)【线程安全】/// </summary>/// <param name="jsonStr">需要解析的Json字符串</param>/// <returns>返回解析好的Hashtable表</returns>public static Hashtable AnalayJsonStringMiddleBrackets(string jsonStr){Hashtable ht = new Hashtable();if (!string.IsNullOrEmpty(jsonStr)){JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonStr);//jsonArrayText必须是带[]字符串数组if (jArray != null && jArray.Count > 0){foreach (var item in jArray){foreach (JToken jToken in item){string[] strTmp = jToken.ToString().Split(':');ht.Add(strTmp[0].Replace("\"", ""), strTmp[1].Replace("\"", ""));}}}}return ht;}/// <summary>/// 解析Json字符串为JArray(首尾有中括号)/// </summary>/// <param name="jsonStr">需要解析的Json字符串</param>/// <returns>返回解析后的JArray对象</returns>public static JArray AnalayJsonStringMiddleBracketsToJArray(string jsonStr){if (!string.IsNullOrEmpty(jsonStr)){string strJsonIndex = string.Empty;JArray ja = (JArray)JsonConvert.DeserializeObject(jsonStr);return ja;}else{return null;}}#endregion}

运行结果如下:

C#获取中国免费的天气信息相关推荐

  1. python使用openweathermap API获取全世界主要城市天气信息

    python使用openweathermap API获取全世界主要城市天气信息 官方网址: http://www.openweathermap.org/api 注意:使用gmail注册成功,然后到gm ...

  2. uni-app 微信小程序 用高德sdk获取地理位置,以及天气信息

    uni-app 微信小程序采用高德sdk获取地理位置和天气信息主要有以下几个步骤: 1. 注册高德开发者,并获取应用key 概述-微信小程序插件 | 高德地图API 在这个网页最下面,按步骤来就可以了 ...

  3. alexa_如何从Alexa获取更多详细的天气信息

    alexa Alexa's built-in weather forecast is handy for those who just want the basic forecast for the ...

  4. java获取天气预报_使用java获取未来7天天气信息,可用于android

    环境:eclipsse, jdk1.6, 没有使用第三方的包,都是JDK有的. 项目结构如下: 1.获取天气预报的类 WeatherUtil.java [java] package com.siqi. ...

  5. Android中基于心知天气API获取天气信息

    Android中基于心知天气获取天气信息 JSON JSON简介 JSON对象 JSON数组 JSON解析 Android中获取天气 获取天气的流程 获取心知天气的API key 获取心知天气的API ...

  6. 使用小米天气API获取天气信息

    1. URL部分 以下url中"%s"代表的是城市Id,比如北京的cityId=101010100: //获取未来五天预报信息,红色部分信息不需要 WEATHER_DATA_URL ...

  7. STM32使用ESP8266模块AT指令连接心知天气API获取天气信息

    由于之前使用STM32单片机来开发一些物联网的小项目,接触到了WIFI模块ESP8266,所以写下来记录一下.本文主要介绍的是STM32通过发送AT指令集来控制ESP8266 WIFI模块连接WiFi ...

  8. STM32连接WIFI-ESP8266获取天气信息---STA模式运用

    1. 小白入门STA模式运用 前面章节讲解了AP模式运用,这节来探索STA模式如何使用.何谓STA模式呢?通俗来讲就是我们的WIFI模块,连接到可用的无线网络(如手机发射出来的热点或者家里路由器的热点 ...

  9. linux使用世界时间,用GNOME Clocks和Weather在Ubuntu中查看世界时钟和天气信息

    GNOME Shell可以在消息托盘(也称为通知区域)内显示世界时钟信息和天气预报信息,只需要用到GNOME Clocks和GNOME Weather这两个扩展工具.有了这两个扩展工具,就可以无需打开 ...

  10. domoticz添加和风天气,让domoticz显示天气信息

    1.domoticz添加天气信息 domoticz中可以很方便的通过dark sky api显示天气信息,但是dark sky的信息不太准确,想添加国内天气的信息,网上的都是通过彩云的api获取jso ...

最新文章

  1. 斗米客户端的架构思想
  2. 直升机和固定翼实操期末考试
  3. 织梦dedecms出现DedeCMS Error: (PHP 5.3 and above) Please set 'request_order' ini value to i解决办法...
  4. 制作一个功能丰富的Android天气App
  5. IDEA使用Maven打包时如何去掉测试阶段
  6. Ajax — 大事件项目(第二天)
  7. 微服务系列实践 .NET CORE
  8. 祝我们的所有女孩子,女生节快乐~
  9. java7代码示例_Java中的七种排序方式代码示例
  10. 美团点评酒旅数据仓库建设实践
  11. Python切分文本(将文本文档切分为词列表)
  12. UICollectionViewDelegateFlowLayout 使用
  13. 某道Pwn(格式化字符串漏洞)
  14. 计算机图标怎么隐藏cmd,一个神奇的bat批处理文件,更好的隐藏电脑里的文件或者文件夹...
  15. 我是如何从蛋壳的虎口里维权的?
  16. oracle练习(mldn视频)二
  17. 微信小程序教程、开发资源下载汇总(2.8日更新,持续更新中……)
  18. 沟通CTBS常见问题
  19. seaweedfs使用说明
  20. 一行代码实现F11的功能,即让浏览器窗口全屏

热门文章

  1. Python的文献计量分析流程实现--含代码
  2. jq插件之bxSlider
  3. DirectX9.0 DirectxSDK下载 DirectX9.03D游戏开发编程基础PDF+源代码
  4. 论文:Real-Time Referring Expression Comprehension by Single-Stage Grounding Network
  5. 【cvpr2022】CRIS: CLIP-Driven Referring Image Segmentation
  6. Rust 限流算法crate调研
  7. Android使用Socket.IO实现即时通讯
  8. android 18x games,Roadgames
  9. kindle读书笔记——2017.05.22-06.21
  10. 视频教程-NodeJs零基础到实战项目-Node.js