天气接口

一、方法一

1、引入很多jar包,pom依赖,注意如果有冲突的时候要排除或者查看引入版本是否冲突,buildpath是否引入的其他版本的jar,buildpath->libraries里面看是否有引入错误的jar包

activation.jar
axis-ant.jar
axis.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
log4j-1.2.8.jar
mail.jar
saaj.jar
wsdl4j-1.5.1.jar

2、第三方天气预报WebService接口WSDL地址(网上有很多,不一定用我举例的这个):

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

打开以后,看到的信息即是WSDL文档对webservice接口的说明信息。

将网页上的文本信息拷贝下来,去掉黑色字体(无用的)。

3、保存成一个.wsdl格式的文件

将这个.wsdl文件拷贝到我们的src目录下

4、右键此文件,new-->Web Service -- > web services Client-->拷贝wsdl网址-->finish

我们会看到自动给我们生成了很多的代码。

我们只需要调其中我们需要的方法就行了。

5、写main类

代码如下:

public class WeatherForecastService {
 
    public static void main(String[] args) throws RemoteException, ServiceException {
        System.out.println("======程序启动======");
        String result[] = QueryWeatherForecastInfo("杭州");
        for (String r : result)
            System.out.println(r);
        System.out.println("======程序结束======");
    }
 
    public static String[] QueryWeatherForecastInfo(String cityName) throws RemoteException, ServiceException {
        WeatherWebServiceLocator locator = new WeatherWebServiceLocator();
 
        // 调用xxLocator对象的getXXPort()方法生成xxSoapBindingStub对象
        WeatherWebServiceSoapStub stud = (WeatherWebServiceSoapStub) locator.getWeatherWebServiceSoap();
        // 输出当天的天气状况
        String[] weather = stud.getWeatherbyCityName("杭州");
 
        return weather;
    }
 
}
运行一下,输入天气就正常了,下面是拼装好的controller;

至此,一个调用第三方接口的WebService的demo就完成了,将该http://www.webxml.com.cn/zh_cn/weather_icon.aspx网站的图片下载到本项目,类似4.gif表示天气图标,封装所需要的参数返回给前端就ok了

@RequestMapping("queryWeatherInfo")
    @CatchErr(write2response = true, value = "返回天气失败")
    public Object QueryWeatherInfo(String cityName) throws RemoteException, ServiceException {
        WeatherWebServiceLocator locator = new WeatherWebServiceLocator();
 
        // 调用xxLocator对象的getXXPort()方法生成xxSoapBindingStub对象
        WeatherWebServiceSoapStub stud;
        try {
            stud = (WeatherWebServiceSoapStub) locator.getWeatherWebServiceSoap();
            String[] weather = stud.getWeatherbyCityName("石家庄");
            HashMap<String, Object> map=new HashMap<String,Object>();
            for (int i = 0; i < weather.length; i++) {
                String string = weather[i];
                if(i==6) {
                    map.put("weather", string);
                }else if(i==8) {
                    map.put("pic", string);
                }else if(i==10) {
                    map.put("temperature", string);
                }
            }
            return map;
        } catch (javax.xml.rpc.ServiceException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
 
    }

二、方法二

1、三个ajax调用接口

$.ajax({
              url: 'http://pv.sohu.com/cityjson?ie=utf-8',
              dataType: "script",
              success: function(){
                  getCity(returnCitySN.cip);
              }
          });
        function getCity(cip){
            $.ajax({
                url:"https://restapi.amap.com/v3/ip?ip="+cip+"&output=json&key=84e1031718d2f505c18968313edc211e",
                //传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
                dataType : "jsonp",//数据类型为jsonp
                jsonp: 'callback',
                //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
                //jsonpCallback: 'list',
                type : "GET",
                async : false,
                success : function(data) {
                    weather(data.adcode);
                },
                error: function (e) {
                    // 状态码
                }
            })
        }
        
        function weather(code) {
            $.ajax({
                url:"https://restapi.amap.com/v3/weather/weatherInfo?city="+ code +"&key=84e1031718d2f505c18968313edc211e",
                dataType:"jsonp",
                jsonp:'callback',
                type:"GET",
                async:false,
                success:function(data) {
                    $scope.list = data.lives[0];
                    switch ($scope.list.weather) {
                    case '多云':
                        $scope.src = "icon-3.png";
                        break;
                    case '晴':
                        $scope.src = "icon-4.png";
                        break;
                    case '阴':
                        $scope.src = "icon-1.png";
                        break;
                    case '雷阵雨':
                        $scope.src = "icon-11.png";
                        break;
                    case '雨夹雪':
                        $scope.src = "icon-9.png";
                        break;
                    case '小雨':
                        $scope.src = "icon-7.png";
                        break;
                    case '小雪':
                        $scope.src = "icon-6.png";
                        break;
                    case '大雪':
                        $scope.src = "icon-2.png";
                        break;
                    case '雾':
                        $scope.src = "icon-5.png";
                        break;
                    case '中雪':
                        $scope.src = "icon-8.png";
                        break;
                    case '阵雪':
                        $scope.src = "icon-10.png";
                        break;
                    }
                    
                    $scope.$apply();
                }
            })
        }

2、页面获取

<div>
              <div style="float:left">
                  <div><span>{{list.city}}</span></div>
                  <div><span>{{list.weather}}</span></div>
                  <div><span>{{list.temperature}}℃</span></div>
                  <div><span>{{list.reporttime}}</span></div>
              </div>
              <div class="iconbox">
                  <img ng-src="../../assets/img/icon-weather/{{src}}" alt="">
              </div>
          </div>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值