天气预报

来源:互联网 发布:英语雅思网络课程 编辑:程序博客网 时间:2024/03/29 06:47

    /// <summary>
    /// 天气预报
    /// </summary>
    public class weather
    {
        #region 公共属性
        /// <summary>
        /// 城市
        /// </summary>
        public string City;
        /// <summary>
        /// 日期
        /// </summary>
        public string Date;
        /// <summary>
        /// 天气
        /// </summary>
        public string WeatherInfo;
        /// <summary>
        /// 温度
        /// </summary>
        public string Temperature;
        /// <summary>
        /// 风
        /// </summary>
        public string Wind;
        /// <summary>
        /// 光
        /// </summary>
        public string Light;

        #endregion 公共属性

        #region ==方法==
        /// <summary>
        /// 解析指定城市的天气
        /// </summary>
        /// <param name="cityWeatherPageText"></param>
        /// <returns></returns>
        public void PasreCityWeather(string cityWeatherPageText)
        {
            //解析时间
            this.ParseDate(cityWeatherPageText);
            //解析天气
            this.ParseWeather(cityWeatherPageText);
            //解析温度
            this.ParseTemperature(cityWeatherPageText);
            //解析风,光
            this.ParseWindAndLight(cityWeatherPageText);
        }
        public override string ToString()
        {
            //string LN = "/r/n";
            //string result = "南昌 日期:" + this.Date + LN;
            //result += "天气:" + this.WeatherInfo + LN;
            //result += "温度:" + this.Temperature + LN;
            //result += "风:" + this.Wind + LN;
            //result += "" + this.Light + LN;
             if (this.Temperature == "") this.Temperature = "4℃";

            string LN = "/r/n";
            string result = "南昌  "; //+ this.Date + LN;
            result += this.WeatherInfo + LN;
            result += this.Temperature + LN;
            return result;
        }
        #region 私有方法
        /// <summary>
        /// 解析时间
        /// </summary>
        /// <param name="cityWeatherPageText"></param>
        private void ParseDate(string cityWeatherPageText)
        {
            this.Date = this.GetStringBetween(cityWeatherPageText, "<span class=/"big-cn/">", "</span>").Trim();
        }
        /// <summary>
        /// 解析天气
        /// </summary>
        /// <param name="cityWeatherPageText"></param>
        private void ParseWeather(string cityWeatherPageText)
        {
            this.WeatherInfo = this.GetStringBetween(cityWeatherPageText, "class=/"weather/">", "</td>").Trim();
        }
        /// <summary>
        /// 解析温度
        /// </summary>
        /// <param name="cityWeatherPageText"></param>
        private void ParseTemperature(string cityWeatherPageText)
        {
            this.Temperature = this.GetStringBetween(cityWeatherPageText, "class=/"weatheren/">", "</td>").Trim();
        }
        /// <summary>
        /// 解析风,光
        /// </summary>
        /// <param name="cityWeatherPageText"></param>
        private void ParseWindAndLight(string cityWeatherPageText)
        {
            string windAndLight = this.GetStringBetween(cityWeatherPageText, "<td width=/"153/" valign=/"top/"><span class=/"big-cn/">", "</td>");
            this.Wind = this.GetStringBetween(windAndLight, "", "<br>").Trim();
            this.Light = this.GetStringBetween(windAndLight, "<br>", "</span>").Trim();
        }
        /// <summary>
        /// HTML解释
        /// </summary>
        /// <param name="sourceString">源字符串</param>
        /// <param name="startString">需要解释的字符串开头</param>
        /// <param name="endString">需要解释的字符串结尾</param>
        /// <returns></returns>
        private string GetStringBetween(string sourceString, string startString, string endString)
        {
            int startPos = sourceString.IndexOf(startString) + startString.Length;
            int endPos = sourceString.IndexOf(endString, startPos);
            string result = sourceString.Substring(startPos, endPos - startPos);
            return result;
        }
        #endregion 私有方法
        #endregion

}

 

/// <summary>
    ///  获取远程文件内容
    /// </summary>
    public class Spider
    {
        ArrayList alWeather = null;
        /// <summary>
        ///
        /// </summary>
        private string weatherSiteURL = @"http://weather.tq121.com.cn/";
        /// <summary>
        /// 城市查找
        /// </summary>
        private string cityWeatherURL = @"http://weather.tq121.com.cn/mapanel/index1.php?city=";
        #region 构造函数
        public Spider()
        {
            alWeather = new ArrayList();
            if (System.Configuration.ConfigurationSettings.AppSettings["weatherSiteUrl"] != null)
            {
                this.weatherSiteURL = System.Configuration.ConfigurationSettings.AppSettings["weatherSiteUrl"];
            }
            if (System.Configuration.ConfigurationSettings.AppSettings["cityWeatherURL"] != null)
            {
                this.cityWeatherURL = System.Configuration.ConfigurationSettings.AppSettings["cityWeatherURL"];
            }

        }
        #endregion 构造函数
        /// <summary>
        /// 取得指定城市的天气
        /// </summary>
        /// <param name="city"></param>
        /// <returns></returns>
        public weather GetWeather(string city)
        {
            string encodedCity = System.Web.HttpUtility.UrlEncode(city, System.Text.Encoding.Default);
            string url = this.cityWeatherURL + encodedCity;
            Console.WriteLine(url);
            string cityWeatherPageText = this.GetPageText(url);
            weather cityWeather = new weather();
            cityWeather.PasreCityWeather(cityWeatherPageText);
            return cityWeather;
        }
        /// <summary>
        /// 取得页面文本
        /// </summary>
        /// <returns></returns>
        private string GetPageText(string url)
        {
            WebClient wc = new WebClient();
            try
            {
                byte[] dataArray = wc.DownloadData(url);
                string weatherPageText = System.Text.Encoding.Default.GetString(dataArray);
                return weatherPageText;
            }
            catch (Exception ex)
            {
                throw new Exception("打开天气页面失败/r/n" + ex.Message);
            }
        }
    }

//调用示例:

  weather cityWeather = spider.GetWeather("南昌");
  s = cityWeather.ToString();

原创粉丝点击