本文将分享读取RSS源的天气预报WebServer实现的详细内容,并且还将对获取天气预报接口进行详尽解释,此外,我们还将为大家带来关于ASP.NET使用WebService实现天气预报功能、axis2
本文将分享读取RSS源的天气预报Web Server实现的详细内容,并且还将对获取天气预报接口进行详尽解释,此外,我们还将为大家带来关于ASP.NET使用WebService实现天气预报功能、axis2客户端调用免费的webservice服务的实例之二纯手动调用免费天气预报webservice服务、CXF 调用天气预报webservice、JAVA + WeatherWebService 实现天气预报接口调取的相关知识,希望对你有所帮助。
本文目录一览:- 读取RSS源的天气预报Web Server实现(获取天气预报接口)
- ASP.NET使用WebService实现天气预报功能
- axis2客户端调用免费的webservice服务的实例之二纯手动调用免费天气预报webservice服务
- CXF 调用天气预报webservice
- JAVA + WeatherWebService 实现天气预报接口调取
读取RSS源的天气预报Web Server实现(获取天气预报接口)
在VS2010中完成
1.数据结构
/// <summary>
/// 数据成员
/// </summary>
public class rss
{
public string Title;
public List<Item> Items=new List<Item>();
}
public class Item
{
public string Title;
public string Description;
public string PubDate;
}
public class Weather
{
public DateTime WeatherDate;
public DateTime PubDate;
public string Temp;
public string Wind;
public string Cloud;
}
2.功能实现
- 读取RSS源,将读到的文档相关标签的内容存入类rss中,函数ReadXml,具体参考我的另一边博文----C#解析RSS新闻源
- 将rss数据中的变量存储为天气所需要的特定类型,也即是类Weather,实现代码SetWeather
public List<Weather> SetWeather(string where) { rss rss = new rss(); switch (where) { case "南京": rss = ReadXml("http://weather.raychou.com/?/detail/58238/count_3/rss"); break; case "北京": rss = ReadXml("http://weather.raychou.com/?/detail/54511/count_3/rss"); break; case "上海": rss = ReadXml("http://weather.raychou.com/?/detail/58367/count_3/rss"); break; case "广东": rss = ReadXml("http://weather.raychou.com/?/detail/59287/count_3/rss"); break; case "重庆": rss = ReadXml("http://weather.raychou.com/?/detail/57516/count_3/rss"); break; case "厦门": rss = ReadXml("http://weather.raychou.com/?/detail/59134/count_3/rss"); break; case "杭州": rss = ReadXml("http://weather.raychou.com/?/detail/58457/count_3/rss"); break; case "大连": rss = ReadXml("http://weather.raychou.com/?/detail/54662/count_3/rss"); break; } List<Weather> weather = new List<Weather>(); Weather weather_one = new Weather(); for (int i = 0; i < rss.Items.Count; i++) { weather_one.WeatherDate = DateTime.Parse(rss.Items[i].Title); weather_one.PubDate = DateTime.Parse(rss.Items[i].PubDate); string[] sArray = rss.Items[i].Description.Split('' ''); weather_one.Cloud=sArray[0].ToString(); if (weather_one.Cloud.Contains("雪")) weather_one.Cloud = "雪"; else if (weather_one.Cloud.Contains("雨") && weather_one.Cloud.Contains("雪") == false) weather_one.Cloud = "雨"; else if (weather_one.Cloud.Contains("阴") && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false) weather_one.Cloud = "阴"; else if (weather_one.Cloud.Contains("云") && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false) weather_one.Cloud = "云"; else if (weather_one.Cloud.Contains("晴") && weather_one.Cloud.Contains("云") == false && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false) weather_one.Cloud = "晴"; else weather_one.Cloud = "世界末日到了!"; weather_one.Temp=sArray[1].ToString();//情 云 雨 雪 阴 weather_one.Wind=sArray[2].ToString(); weather.Add(weather_one); } return weather; }
返回的是一个list<Weather> - 最后就可以生成一个简单的天气预报Web Server
- 完整代码如下
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Xml; namespace WebApplication1 { /// <summary> /// Rss 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class Rss : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } /*public string GetWind(DateTime date) { } [WebMethod] public int GetTemp(DateTime date) { }*/ public rss ReadXml(string uri) { XmlTextReader Reader = new XmlTextReader(uri); // XmlValidatingReader Valid = new XmlValidatingReader(Reader); // Valid.ValidationType = ValidationType.None; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Reader); XmlNode rssNode = FoundChildNode(xmlDoc, "rss"); XmlNode channelNode = FoundChildNode(rssNode, "channel"); rss channel = new rss(); //channel.Items = new List<rss.Item>(); for (int i = 0; i < channelNode.ChildNodes.Count; i++) { switch (channelNode.ChildNodes[i].Name) { case "title": { channel.Title = channelNode.ChildNodes[i].InnerText; break; } case "item": { Item item = this.getRssItem(channelNode.ChildNodes[i]); channel.Items.Add(item); break; } } } return channel; } private XmlNode FoundChildNode(XmlNode Node, string Name) { XmlNode childlNode = null; for (int i = 0; i < Node.ChildNodes.Count; i++) { if (Node.ChildNodes[i].Name == Name && Node.ChildNodes[i].ChildNodes.Count > 0) { childlNode = Node.ChildNodes[i]; return childlNode; } } return childlNode; } private Item getRssItem(XmlNode Node) { Item item = new Item(); for (int i = 0; i < Node.ChildNodes.Count; i++) { if (Node.ChildNodes[i].Name == "title") { item.Title = Node.ChildNodes[i].InnerText; } else if (Node.ChildNodes[i].Name == "description") { item.Description = Node.ChildNodes[i].InnerText; } else if (Node.ChildNodes[i].Name == "pubDate") { item.PubDate = Node.ChildNodes[i].InnerText; } } return item; } [WebMethod] public List<Weather> SetWeather(string where) { rss rss = new rss(); switch (where) { case "南京": rss = ReadXml("http://weather.raychou.com/?/detail/58238/count_3/rss"); break; case "北京": rss = ReadXml("http://weather.raychou.com/?/detail/54511/count_3/rss"); break; case "上海": rss = ReadXml("http://weather.raychou.com/?/detail/58367/count_3/rss"); break; case "广东": rss = ReadXml("http://weather.raychou.com/?/detail/59287/count_3/rss"); break; case "重庆": rss = ReadXml("http://weather.raychou.com/?/detail/57516/count_3/rss"); break; case "厦门": rss = ReadXml("http://weather.raychou.com/?/detail/59134/count_3/rss"); break; case "杭州": rss = ReadXml("http://weather.raychou.com/?/detail/58457/count_3/rss"); break; case "大连": rss = ReadXml("http://weather.raychou.com/?/detail/54662/count_3/rss"); break; } List<Weather> weather = new List<Weather>(); Weather weather_one = new Weather(); for (int i = 0; i < rss.Items.Count; i++) { weather_one.WeatherDate = DateTime.Parse(rss.Items[i].Title); weather_one.PubDate = DateTime.Parse(rss.Items[i].PubDate); string[] sArray = rss.Items[i].Description.Split('' ''); weather_one.Cloud=sArray[0].ToString(); if (weather_one.Cloud.Contains("雪")) weather_one.Cloud = "雪"; else if (weather_one.Cloud.Contains("雨") && weather_one.Cloud.Contains("雪") == false) weather_one.Cloud = "雨"; else if (weather_one.Cloud.Contains("阴") && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false) weather_one.Cloud = "阴"; else if (weather_one.Cloud.Contains("云") && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false) weather_one.Cloud = "云"; else if (weather_one.Cloud.Contains("晴") && weather_one.Cloud.Contains("云") == false && weather_one.Cloud.Contains("阴") == false && weather_one.Cloud.Contains("雨") == false && weather_one.Cloud.Contains("雪") == false) weather_one.Cloud = "晴"; else weather_one.Cloud = "世界末日到了!"; weather_one.Temp=sArray[1].ToString();//情 云 雨 雪 阴 weather_one.Wind=sArray[2].ToString(); weather.Add(weather_one); } return weather; } } /// <summary> /// 数据成员 /// </summary> public class rss { public string Title; public List<Item> Items=new List<Item>(); } public class Item { public string Title; public string Description; public string PubDate; } public class Weather { public DateTime WeatherDate; public DateTime PubDate; public string Temp; public string Wind; public string Cloud; } }
原文链接: http://blog.csdn.net/txg703003659/article/details/6595384
ASP.NET使用WebService实现天气预报功能
本文使用Asp.Net (C#)调用互联网上公开的WebServices(http://www.webxml.com.cn/WebServices/WeatherWebService.asmx)来实现天气预报,该天气预报 Web 服务,数据来源于中国气象局http://www.cma.gov.cn/,数据每2.5小时左右自动更新一次,准确可靠。包括 340 多个中国主要城市和 60 多个国外主要城市三日内的天气预报数据。
效果图 :
步骤 :
1 、新建web 项目,添加窗体。
2 、 引用右键--> 添加服务引用-->高级--> 添加Web引用。
3 、 将Web接口复制到URL右边的框里-->点击输入框右边的箭头,测试连接(观察左下角看是否连接成功)--> 最右边可以更改Web引用名-->添加引用。
前台代码
<div> <br /> <br /> Asp.Net 调用WebService实现天气预报<br /> <br /> <br /> 请输入城市名称:<asp:TextBox ID="txtcity" runat="server"></asp:TextBox> <asp:Label ID="Label1" runat="server"BorderColor="Red" Text="如 :上海"></asp:Label> <br /> <br /> <asp:Button ID="btncheck" runat="server" Text="查询" Width="69px" OnClick="btncheck_Click" /> <br /> 天气概况 : <asp:Label ID="lbtianqi" runat="server"BorderColor="Red" Text=""></asp:Label> <br /> <br /> 天气实况 : <br /> <asp:TextBox ID="txtcityweather" runat="server" Height="62px" TextMode="MultiLine" Width="258px"></asp:TextBox> <br /> <br /> <br /> <br /> <br /> <br /> <br /> </div>
后台代码
protected void btncheck_Click(object sender, EventArgs e) { WeatherService.WeatherWebService w = new WeatherService.WeatherWebService(); string [] res=new string[23]; string cityname = txtcity.Text.Trim(); res = w.getWeatherbyCityName(cityname); lbtianqi.Text = cityname + " "+res[6]; txtcityweather.Text = res[10]; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
- jQuery调用Webservice传递json数组的方法
- 甩掉ashx和asmx使用jQuery.ajaxWebService请求WebMethod简练处理Ajax
- 使用jQuery Ajax 请求webservice来实现更简练的Ajax
- C# WebService发布以及IIS发布
- jQuery 调用WebService 实例讲解
- ASP.NET中基于soaphead的webservice安全机制
- WebService的相关概念
axis2客户端调用免费的webservice服务的实例之二纯手动调用免费天气预报webservice服务
上一节讲了axis2通过wsdl生成客户端程序并本地调用,这种方法由于得配置环境变量,运行dos命令,之后根据生成的代码来编写输出代码,相比较为复杂一些。这节说一下利用axis2纯手动调用网上免费webservice服务,使用这种方式较为简单一些,只需要在引入axis2包后创建一个java类就可以达到我们的目的了
项目结构如下图:
在引入axis2的jar包后,只需要新建一个testWebService2的java类就够了,下面具体看一下这个类中代码
注意:代码中.wsdl的服务地址链接一定要先在浏览器中运行一下,看是否能成功打开,成功后方可用于代码中
package com.test.weather; import java.util.Iterator; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.soap.soAP11Constants; import org.apache.axis2.Constants; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; public class testWebService2 { public static void main(String[] args) throws Exception { // axis2利用网上免费webservice服务一个城市的天气情况 ServiceClient sender = new ServiceClient(); Options option = new Options(); option.setSoapVersionURI(SOAP11Constants.soAP_ENVELOPE_NAMESPACE_URI); option.setAction("http://WebXml.com.cn/getWeather"); EndpointReference epfs = new EndpointReference( "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl"); option.setTransportInProtocol(Constants.TRANSPORT_HTTP); option.setTo(epfs); sender.setoptions(option); OMFactory fac = OMAbstractFactory.getoMFactory(); OMNamespace omNs = fac.createOMNamespace("http://WebXml.com.cn/",""); OMElement data = fac.createOMElement("getWeather",omNs); OMElement theCityCode = fac.createOMElement("theCityCode ",omNs); OMElement theUserID = fac.createOMElement("theUserID ",omNs); theCityCode.setText("北京"); theUserID.setText(""); data.addChild(theCityCode); data.addChild(theUserID); OMElement result = sender.sendReceive(data); //System.out.println(result); //---------------- Iterator in = result.getChildrenWithLocalName("getWeatherResult"); while(in.hasNext()){ OMElement om = (OMElement)in.next(); Iterator in2 = om.getChildElements(); while(in2.hasNext()){ System.out.println(in2.next().toString()); //System.out.println(((OMElement)in2.next()).getText()); } } } }这个程序是 axis2利用网上免费webservice服务一个城市的天气情况的实例
运行代码中------以上的代码就会得到结果
有结果可以看出信息是xml格式的,如果想去掉节点,直接输出信息,需要把代码中------下方的代码去注释运行,结果如下
利用axis2纯手动调用网上免费webservice服务的介绍就完事了,较上一节的方式,两种方式各有优缺点,上一节的方式操作复杂点,这节的方式简单点,但是对网络依赖大,所以操作时,一定要在浏览器中运行一下.wsdl的服务地址链接,成功打开后方可用于自己的代码中
在研究axis2访问webservice服务的过程发现一些别的方式,但操作时报出了一些错误,下节将说一下具体的情况
CXF 调用天气预报webservice
网上公布的天气预报wsdl文件为
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
可是执行wsdl2java命令的时候报一个undefined element declaration ''s:schema'' 错误执行不了后来百度发现好像CXF 识别不了 ref 属性
可是我又不能更改WSDL文件格式,所以果断把wsdl文件右键另存为本地文件 然后找到<s:element ref="s:schema" />删除之后文件生成成功
JAVA + WeatherWebService 实现天气预报接口调取
两步完成接口调取
第一步:引入jar包
- 在线jar包
- 若在线jar包失效,私信我即可。
第二步:创建类实现
- 在JAVA项目中创建java类(我的是:WeatherUtil)
- 修改类中cityid为你需要展示的地区id,我的是上海的【cityid查询】
WeatherUtil类代码:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONObject;
/**
* java调用中央气象局天气预报接口
*
* @author Administrator
*
*/
public class WeatherUtil {
/**
* 获取一周天气<br>
* 方 法 名:getWeekWeatherMap <br>
* @param Cityid 城市编码
*/
public static List<Map<String, Object>> getWeekWeatherMap(String Cityid)
throws IOException, NullPointerException {
// 连接中央气象台的API
URL url = new URL("http://m.weather.com.cn/data/" + Cityid + ".html");
URLConnection connectionData = url.openConnection();
connectionData.setConnectTimeout(1000);
// 得到1到6天的天气情况
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
connectionData.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null)
sb.append(line);
String datas = sb.toString();
System.out.println(datas);
JSONObject jsonData = JSONObject.fromObject(datas);
JSONObject info = jsonData.getJSONObject("weatherinfo");
for (int i = 1; i <= 6; i++) {
// 得到未来6天的日期
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, i - 1);
Date date = cal.getTime();
SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日");
Map<String, Object> map = new HashMap<String, Object>();
map.put("city", info.getString("city").toString());// 城市
map.put("date_y", sf.format(date));// 日期
map.put("week", getWeek(cal.get(Calendar.DAY_OF_WEEK)));// 星期
map.put("fchh", info.getString("fchh").toString());// 发布时间
map.put("weather", info.getString("weather" + i).toString());// 天气
map.put("temp", info.getString("temp" + i).toString());// 温度
map.put("wind", info.getString("wind" + i).toString());// 风况
map.put("fl", info.getString("fl" + i).toString());// 风速
// map.put("index", info.getString("index").toString());//
// 今天的穿衣指数
// map.put("index_uv", info.getString("index_uv").toString());//
// 紫外指数
// map.put("index_tr", info.getString("index_tr").toString());//
// 旅游指数
// map.put("index_co", info.getString("index_co").toString());//
// 舒适指数
// map.put("index_cl", info.getString("index_cl").toString());//
// 晨练指数
// map.put("index_xc", info.getString("index_xc").toString());//
// 洗车指数
// map.put("index_d", info.getString("index_d").toString());//
// 天气详细穿衣指数
list.add(map);
}
} catch (SocketTimeoutException e) {
System.out.println("连接超时");
} catch (FileNotFoundException e) {
System.out.println("加载文件出错");
}
return list;
}
/**
*
* 获取实时天气1<br>
* 方 法 名: getTodayWeather <br>
*
* @param Cityid
* 城市编码
*/
public static Map<String, Object> getTodayWeather1(String Cityid)
throws IOException, NullPointerException {
// 连接中央气象台的API
URL url = new URL("http://www.weather.com.cn/data/sk/" + Cityid
+ ".html");
URLConnection connectionData = url.openConnection();
connectionData.setConnectTimeout(1000);
Map<String, Object> map = new HashMap<String, Object>();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
connectionData.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null)
sb.append(line);
String datas = sb.toString();
System.out.println(datas);
JSONObject jsonData = JSONObject.fromObject(datas);
JSONObject info = jsonData.getJSONObject("weatherinfo");
map.put("city", info.getString("city").toString());// 城市
map.put("temp", info.getString("temp").toString());// 温度
map.put("WD", info.getString("WD").toString());// 风向
map.put("WS", info.getString("WS").toString());// 风速
map.put("SD", info.getString("SD").toString());// 湿度
map.put("time", info.getString("time").toString());// 发布时间
} catch (SocketTimeoutException e) {
System.out.println("连接超时");
} catch (FileNotFoundException e) {
System.out.println("加载文件出错");
}
return map;
}
/**
*
* 获取实时天气2<br>
* 方 法 名: getTodayWeather <br>
*
* @param Cityid
* 城市编码
*/
public static Map<String, Object> getTodayWeather2(String Cityid)
throws IOException, NullPointerException {
// 连接中央气象台的API
URL url = new URL("http://www.weather.com.cn/data/cityinfo/" + Cityid
+ ".html");
URLConnection connectionData = url.openConnection();
connectionData.setConnectTimeout(1000);
Map<String, Object> map = new HashMap<String, Object>();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
connectionData.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null)
sb.append(line);
String datas = sb.toString();
System.out.println(datas);
JSONObject jsonData = JSONObject.fromObject(datas);
JSONObject info = jsonData.getJSONObject("weatherinfo");
map.put("city", info.getString("city").toString());// 城市
map.put("temp1", info.getString("temp1").toString());// 最高温度
map.put("temp2", info.getString("temp2").toString());// 最低温度
map.put("weather", info.getString("weather").toString());//天气
map.put("ptime", info.getString("ptime").toString());// 发布时间
} catch (SocketTimeoutException e) {
System.out.println("连接超时");
} catch (FileNotFoundException e) {
System.out.println("加载文件出错");
}
return map;
}
private static String getWeek(int iw) {
String weekStr = "";
switch (iw) {
case 1:
weekStr = "星期天";
break;
case 2:
weekStr = "星期一";
break;
case 3:
weekStr = "星期二";
break;
case 4:
weekStr = "星期三";
break;
case 5:
weekStr = "星期四";
break;
case 6:
weekStr = "星期五";
break;
case 7:
weekStr = "星期六";
break;
default:
break;
}
return weekStr;
}
public static void main(String[] args) {
try {
//测试获取实时天气1(包含风况,湿度)
Map<String, Object> map = getTodayWeather1("101020100");
System.out.println(map.get("city") + "\t" + map.get("temp")
+ "\t" + map.get("WD") + "\t" + map.get("WS")
+ "\t" + map.get("SD") + "\t" + map.get("time"));
//测试获取实时天气2(包含天气,温度范围)
Map<String, Object> map2 = getTodayWeather2("101010100");
System.out.println(map2.get("city") + "\t" + map2.get("temp1")
+ "\t" + map2.get("temp2") + "\t" + map2.get("weather")
+ "\t" + map2.get("ptime"));
//测试获取一周天气
List<Map<String, Object>> listData = getWeekWeatherMap("101010100");
for (int j = 0; j < listData.size(); j++) {
Map<String, Object> wMap = listData.get(j);
System.out.println(wMap.get("city") + "\t" + wMap.get("date_y")
+ "\t" + wMap.get("week") + "\t" + wMap.get("weather")
+ "\t" + wMap.get("temp") + "\t" + wMap.get("wind")
+ "\t" + wMap.get("fl"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
关于读取RSS源的天气预报Web Server实现和获取天气预报接口的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ASP.NET使用WebService实现天气预报功能、axis2客户端调用免费的webservice服务的实例之二纯手动调用免费天气预报webservice服务、CXF 调用天气预报webservice、JAVA + WeatherWebService 实现天气预报接口调取等相关内容,可以在本站寻找。
本文标签: