操作流程: 输入:城市名
输出:粗略的天气信息
涉及到的技术:
网络请求,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;
}
}
输出结果:
新手上路,有写得不好的地方还请大神们不含赐教。。。
|