黑马程序员技术交流社区

标题: 新手上路。。实现了天气预报的半半半成品小程序。... [打印本页]

作者: 月微怜    时间: 2017-1-12 21:55
标题: 新手上路。。实现了天气预报的半半半成品小程序。...
操作流程:                                输入:城市名
                输出:粗略的天气信息
涉及到的技术:
                         网络请求,json的处理,一些集合的简单应用;
运行流程:
                以get方式发送http://weather.123.duba.net/static/weather_info/101010100.html(以北京为例) 请求,抓取天气信息
                返回json字符串:
                大概长这样:
                ......"city_en":"beijing","city":"北京","cityid":"101010100","week":"星期四"......
      
[Java] 纯文本查看 复制代码
import java.util.HashMap;
import java.util.Scanner;
import net.sf.json.JSONObject;

public class WeatherDome {
        public static void main(String[] args) {
                //定义一个Map集合存储城市对应的城市编号,用于后面URL的拼接
                HashMap<String,String> map=new HashMap<String,String>();
                map.put("北京","101010100");
                map.put("广州","101280101");
                map.put("深圳","101280601");
                map.put("上海","101020100");
                map.put("湛江","101281001");
                String code="";
                String uri="";
                System.out.println("======请输入城市名称===暂时只支持北京、广州、深圳、上海、湛江===");
                //接收控制台输入的城市名称
                Scanner sc =new Scanner(System.in);
                String s=sc.next();
                //判断Map集合中是否有输入的城市名称
                if(map.containsKey(s)){
                        code=map.get(s);
                        uri="http://weather.123.duba.net/static/weather_info/" + code + ".html";
                        String str=new NetUtils().doGet(uri);
                        //把json字符串转换为json对象
                        JSONObject jsonObject = JSONObject.fromObject(str);
                        //  去掉最外层的大括号
                        JSONObject object = jsonObject.getJSONObject("weatherinfo");
                
                        //打印输出天气信息
                        System.out.println();
                        System.out.println("======"+object.getString("city")+"======");
                        System.out.print(object.getString("week")+"\t");
                        System.out.println(object.getString("temp")+" ~ "+ object.getString("temp1"));
                        System.out.print(object.getString("fl1")+"\t");
                        System.out.println(object.getString("weather1"));
                }else {
                        System.out.println("暂时不支持该城市。。。");
                }
        }       
}





     
[Java] 纯文本查看 复制代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
*
* 网络请求的工具类
*/
public class NetUtils {
public static String doGet(String uri){
        StringBuffer stringBuffer=new StringBuffer();
        try {
                //根据 String 表示形式创建 URL对象,获取文件内容的
                URL url=new URL(uri);
                //获取远程对象的连接
                HttpURLConnection connection= (HttpURLConnection) url.openConnection();
                //设置请求方式
                connection.setRequestMethod("GET");
                //设置一个指定的超时值(以毫秒为单位),
                connection.setConnectTimeout(5 * 1000);
                //从 HTTP 响应消息获取状态码;等于200时表示成功
                int responseCode = connection.getResponseCode();
                if (responseCode==200){
                        //使用inputStream读取数据
                        InputStream inputStream = connection.getInputStream();
                        //BufferedReader缓冲区
                        BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
                        //读取数据
                        String line = reader.readLine();
                        while (line!=null){
                                //拼接字符串
                                stringBuffer.append(line);
                                //读取下一行
                                line=reader.readLine();
                        }

                }
        } catch (MalformedURLException e) {
                e.printStackTrace();
        } catch (IOException e) {
                e.printStackTrace();
        }

//做一个json字符串的处理

        String sb = stringBuffer.toString();
        //去掉多余的头部和最外围的括号
        if (stringBuffer!=null && sb.contains("weather_callback")){
                //.substring():截取字符串 参数一:开始截取的位置 参数二:结束的位置
                String result = sb.substring(sb.indexOf("(") + 1, sb.lastIndexOf(")"));
                return result;
        }
        return sb;
        }
}



输出结果:

新手上路,有写得不好的地方还请大神们不含赐教。。。

作者: djycoder    时间: 2017-1-13 20:44
可以很给力!
作者: 月微怜    时间: 2017-1-15 22:07
补充几个要用到的jar包
lib1.rar (1.44 MB, 下载次数: 41)
lib2.rar (579.2 KB, 下载次数: 49)








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2