您的位置:首页 > 编程语言

查询天气预报的Webservice接口程序源代码

2014-10-02 21:46 495 查看

一个天气预报服务接口

<%@ WebService Language="c#" Class="WeatherWS.GetChinaWeather" %>

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.Net;

using System.Text;

using System.IO;

using System.Web;

using System.Web.Services;

namespace WeatherWS

{

/// <summary>

/// GetChinaWeather 的摘要说明。

/// </summary>

[WebService(Namespace="http://flying.redv.com/monster")]

public class GetChinaWeather : System.Web.Services.WebService

{

public GetChinaWeather()

{

//CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的

InitializeComponent();

}

#region 组件设计器生成的代码

//Web 服务设计器所必需的

private IContainer components = null;

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

/// </summary>

private void InitializeComponent()

{

}

/// <summary>

/// 清理所有正在使用的资源。

/// </summary>

protected override void Dispose( bool disposing )

{

if(disposing && components != null)

{

components.Dispose();

}

base.Dispose(disposing);

}

#endregion

[WebMethod(Description="中国各城市(县)天气预报获取服务,可接受一字符串参数(可选的查询方式:·国内城市(县)全名·字首拼音缩写·电话区号·邮政编码,如查询徐州的天气情况可输入'徐州'或'xz'作为参数)")]

public DataSet getWeather(string strCity)

{

DataSet dsWeather = new DataSet();

try

{

const int maxDay=5;

string []time = new string[maxDay];//存储日期,从今天开始算起

string []weather = new string[maxDay];//保存天气情况数据

string []max = new string[maxDay];//保存最高温度数据

string []min = new string[maxDay];//保存最低温度数据

string []wind = new string[maxDay];//保存风向数据

//发送一个post请求到index.jsp页面以获取城市数据

Uri uri = new Uri("http://www.weathercn.com/forecastn/forcast/index.jsp?searchname="+System.Web.HttpUtility.UrlEncode(strCity,System.Text.Encoding.GetEncoding("GB2312")));

WebRequest wreq=WebRequest.Create(uri);

HttpWebResponse wresp=(HttpWebResponse)wreq.GetResponse();

string HTML ="";

Stream s=wresp.GetResponseStream();

StreamReader objReader = new StreamReader(s,System.Text.Encoding.Default);

HTML=objReader.ReadToEnd();

if(HTML==null||HTML=="")

return dsWeather;

HTML = HTML.ToLower();//全部转换为小写

if(HTML==null||HTML=="")

return dsWeather;

int head,tail,i;

//查找城市数据 如果没有找到 则返回一个空的dataset

head = HTML.IndexOf("查询结果:",0);

head = HTML.IndexOf("station_name=",head);

if(head==-1)

{

return dsWeather;

}

head = HTML.IndexOf("station_name=",head+1);

tail = HTML.IndexOf("'",head);

string strCityData = HTML.Substring(head,tail-head);//城市数据获取

string href = "http://www.weathercn.com/forecastn/forcast/forecastDetail.jsp?"+strCityData;

//根据城市数据去查询天气情况

wreq=WebRequest.Create(href);

wresp=(HttpWebResponse)wreq.GetResponse();

HTML ="";

s=wresp.GetResponseStream();

objReader = new StreamReader(s,System.Text.Encoding.Default);

HTML=objReader.ReadToEnd();

if(HTML==null||HTML=="")

return dsWeather;

HTML = HTML.ToLower();//全部转换为小写

DateTime dtNow = new DateTime();

dtNow = DateTime.Today;//获取系统当前日期

dtNow = dtNow.Subtract(TimeSpan.Parse("1"));

for(i=0;i<maxDay;i++)

{

dtNow = dtNow.Add(TimeSpan.Parse("1"));

time[i] = dtNow.ToShortDateString();//日期数据

}

//获取天气情况数据,总共maxDay天的数据

String date = DateTime.Now.Year.ToString()+"年"+DateTime.Now.Month.ToString()+"月";//当前年月

head = HTML.IndexOf(date,0);

head = HTML.IndexOf("<tr>",head);

for(i=0;i<maxDay;i++)

{

head = HTML.IndexOf("<td",head);

head = HTML.IndexOf("<img",head);

head = HTML.IndexOf("/",head);

head = HTML.IndexOf("/",head+1);

tail = HTML.IndexOf("_",head);

weather[i] = HTML.Substring(head+1,tail-head-1);

head = HTML.IndexOf("</td>",head);

}

//获取近maxDay天温度数据,包括最高温度和最低温度

for(i=0;i<maxDay;i++)

{

head = HTML.IndexOf("max",head);

head = HTML.IndexOf(">",head);

tail = HTML.IndexOf("<",head);

max[i] = HTML.Substring(head+1,tail-head-1);//最高温度

head = HTML.IndexOf("min",head);

head = HTML.IndexOf(">",head);

tail = HTML.IndexOf("<",head);

min[i] = HTML.Substring(head+1,tail-head-1);//最低温度

}

//最近maxDay天的风向数据

head = HTML.IndexOf("<tr",head);

for(i=0;i<maxDay;i++)

{

head = HTML.IndexOf("class",head);

head = HTML.IndexOf(">",head);

tail = HTML.IndexOf("<",head);

wind[i] = HTML.Substring(head+1,tail-head-1);//风向数据

}

//将数据填充到DataSet中去

DataTable dtWeather = new DataTable();

dtWeather.Columns.Add("日期");

dtWeather.Columns.Add("天气");

dtWeather.Columns.Add("最高温度");

dtWeather.Columns.Add("最低温度");

dtWeather.Columns.Add("风力风向");

for(i=0;i<maxDay;i++)

{

DataRow drWeather = dtWeather.NewRow();

drWeather["日期"] = time[i];

drWeather["天气"] = weather[i];

drWeather["最高温度"] = max[i];

drWeather["最低温度"] = min[i];

drWeather["风力风向"] = wind[i];

dtWeather.Rows.Add(drWeather);

}

dsWeather.Tables.Add(dtWeather);

dsWeather.AcceptChanges();

return dsWeather;

}

catch(Exception e)

{

//DO Something

return dsWeather;

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: