C#天气预报WebService

自己需要用到天气的WebService的时候,写的一个WebService,提供参考吧.

///   <summary>
///  wsWeather 的摘要说明
///   </summary>
[WebService(Namespace =  " http://lespos.org/ ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public  class wsWeather : System.Web.Services.WebService {

    SqlConnection conn =  new SqlConnection();

     public wsWeather () {

         // 如果使用设计的组件,请取消注释以下行 
        
// InitializeComponent(); 
    }

     #region Method for getAllDayWeatherInfo  // 获取全天天气信息
     ///   <summary>
    
///  获取全天天气信息
    
///   </summary>
    
///   <param name="CityCode"> 城市代码 </param>
    
///   <returns> Json数据 </returns>
    [WebMethod]
     public  string getAllDayWeatherInfo( string CityCode)
    {
         if ( string.IsNullOrEmpty(CityCode))
        {
            CityCode =  " 101020100 "// 默认编码上海
        }

         string strUrl =  @" http://www.weather.com.cn/data/cityinfo/ " + CityCode +  " .html ";

         string tempurl =  @" http://www.weather.com.cn/data/list3/city.xml?level=1 ";
         string strResult = GetUrltoHtml(tempurl);
         return strResult;
    }
     #endregion

     #region Method for getRealTimeWeatherInfo  // 获取实时天气信息
     ///   <summary>
    
///  获取实时天气信息
    
///   </summary>
    
///   <param name="CityCode"> 城市代码 </param>
    
///   <returns> Json数据 </returns>
    [WebMethod]
     public  string getRealTimeWeatherInfo( string CityCode)
    {
         if ( string.IsNullOrEmpty(CityCode))
        {
            CityCode =  " 101020100 "// 默认编码上海
        }

         string strUrl =  @" http://www.weather.com.cn/data/sk/ " + CityCode +  " .html ";

         string strResult = GetUrltoHtml(strUrl);
         return strResult;
    }
     #endregion

     #region Method for getSevenDaysWeatherInfo  // 获取7天内天气信息
     ///   <summary>
    
///  获取7天内天气信息
    
///   </summary>
    
///   <param name="CityCode"> 城市代码 </param>
    
///   <returns> Json数据 </returns>
    [WebMethod]
     public  string getSevenDaysWeatherInfo( string CityCode)
    {
         if ( string.IsNullOrEmpty(CityCode))
        {
            CityCode =  " 101020100 "// 默认编码上海
        }

         string strUrl =  @" http://m.weather.com.cn/data/ " + CityCode +  " .html ";

         string strResult = GetUrltoHtml(strUrl);
         return strResult;
    }
     #endregion

     #region Method for GetUrltoHtml  // 获取Url请求的内容(Get方式)
     ///   <summary>
    
///  获取Url请求的内容
    
///   </summary>
    
///   <param name="Url"></param>
    
///   <returns></returns>
     public  string GetUrltoHtml( string Url)
    {
         try 
        {
            System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
            System.Net.WebResponse wResp = wReq.GetResponse();
            System.IO.Stream respStream = wResp.GetResponseStream();
             using (System.IO.StreamReader reader =  new System.IO.StreamReader(respStream, Encoding.GetEncoding( " utf-8 ")))
            {
                 return reader.ReadToEnd();
            }
        }
         catch (System.Exception ex)
        {
        }
         return  "";
    }
     #endregion

     #region Method for GetUrltoHtml  // 获取Url请求的内容(Post方式)
     ///   <summary>
    
///  获取Url请求的内容
    
///   </summary>
    
///   <param name="Url"></param>
    
///   <returns></returns>
     public  static  string OpenReadWithHttps( string URL)
    {
         try
        {
            Encoding encoding = Encoding.Default;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
            request.Method =  " post ";
            request.Accept =  " text/html, application/xhtml+xml, */* ";
            request.ContentType =  " application/x-www-form-urlencoded ";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
             using (StreamReader reader =  new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding( " utf-8 ")))
            {
                 return reader.ReadToEnd();
            }
        }
         catch (System.Exception ex)
        {
        }
         return  "";
    }
     #endregion

     #region Method for TempAddWeather  // 添加天气地区信息
     ///   <summary>
    
///  
    
///   </summary>
    
///   <returns></returns>
    [WebMethod]
     private  string TempAddWeather()
    {
        LESDB.SQLDB clsdb =  new LESDB.SQLDB();

         try
        {
             string tempurl =  @" http://www.weather.com.cn/data/list3/city.xml?level=1 ";
             string strPrivance = GetUrltoHtml(tempurl);
             if (!strPrivance.Contains( " html "))
            {
                 string[] PrivanceList = strPrivance.Split( ' , ');

                 foreach ( string tempPrivance  in PrivanceList)
                {

                     string[] tempPrivanceInfo = tempPrivance.Split( ' | ');
                     string PrivanceCode = tempPrivanceInfo[ 0].Trim();  // 省份编码
                     string PrivanceName = tempPrivanceInfo[ 1].Trim();  // 省份名称

                     string tempUrlC =  @" http://www.weather.com.cn/data/list3/city " + PrivanceCode +  " .xml?level=2 ";
                     string strCity = GetUrltoHtml(tempUrlC);
                     if (!strCity.Contains( " html "))
                    {
                         string[] CityList = strCity.Split( ' , ');

                         foreach ( string tempCity  in CityList)
                        {
                             string[] tempCityInfo = tempCity.Split( ' | ');
                             string CityCode =tempCityInfo[ 0].Trim() ;  // 城市编码
                             string CityName = tempCityInfo[ 1].Trim();  // 城市名称

                             string tempUrlA =  @" http://www.weather.com.cn/data/list3/city " + CityCode +  " .xml?level=3 ";
                             string strArea = GetUrltoHtml(tempUrlA);
                            CityCode =  " 101 " + CityCode+  " 01 "
                             if (!strArea.Contains( " html "))
                            {
                                 string[] AreaList = strArea.Split( ' , ');

                                 foreach ( string tempArea  in AreaList)
                                {
                                     string[] tempAreaInfo = tempArea.Split( ' | ');
                                     string AreaCode =  " 101 " + tempAreaInfo[ 0].Trim();  // 地区编码
                                     string AreaName = tempAreaInfo[ 1].Trim();  // 地区名称

                                    
// 添加记录

                                    
// 根据门店获取对应城市的代码

                                    clsdb.OpenConn( ref conn);
                                     string sqlstr =  " Insert into WeatherInfo values('{0}','{1}','{2}','{3}','{4}','{5}') ";
                                    sqlstr =  string.Format(sqlstr, PrivanceCode, PrivanceName, CityCode, CityName, AreaCode, AreaName);
                                     int retInt = clsdb.ExecuteSQl( ref conn, sqlstr);
                                     if (retInt ==  0)
                                         return  " Failed ";

                                }
                            }
                        }
                    }
                }
            }
        }

         catch (Exception ex)
        {
             // LogInfo.AddLog("[" + this.GetType().Name + "]-[GetCityCode]-" + ex.Message);
             return ex.ToString();
        }
         finally
        {
            clsdb.CloseConn( ref conn);
        }
         return  " OK ";
    }
     #endregion

     #region Method for TempWeatherInfo  // 检查天气地区信息是否正常
     ///   <summary>
    
///  检查天气地区信息是否正常
    
///   </summary>
    
///   <returns></returns>
    [WebMethod]
     public  string TempWeatherInfo()
    {
         string Result =  string.Empty;
        LESDB.SQLDB clsdb =  new LESDB.SQLDB();
        clsdb.OpenConn( ref conn);
         string sqlstr =  " select AreaCode,AreaName from dbo.WeatherInfo(nolock) where id>=500 and id<=1000 ";
        DataTable dt= clsdb.GetDataTable( ref conn, sqlstr);
         foreach (DataRow row  in dt.Rows)
        {
             string AreaName = row[ " AreaName "].ToString();
             string AreaCode = row[ " AreaCode "].ToString();
             string tempUrlA =  @" http://m.weather.com.cn/data/ " + AreaCode +  " .html ";
             string strArea = GetUrltoHtml(tempUrlA);
             if (strArea.Contains( " weatherinfo "))
            {
                Result +=  " [ " + AreaName +  " : " + AreaCode +  " ----OK]/n ";
            }
             else
            {
                Result +=  " [ " + AreaName +  " : " + AreaCode +  " ----Failed]/n ";
            }

        }
         return Result;
    }
     #endregion

}
复制代码

 

最后两个方法 TempAddWeather 和 TempWeatherInfo 是把省份城市地区的编码保存到数据库中,和测试连接是否访问正常的方法。

需要的朋友可以根据自己的实际情况修改下.

这个是根据气象局提供的接口写的,时间匆忙,所以写了点,需要的朋友自己扩展吧.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值