1:由于天气apk接口不稳定所以经常获取不到信息。于是就动手写一个扒取天气网站上的数据然后做成json,apk直接调用服务器上扒取的数据增加稳定性。
2:项目主要是用servlet然后正则表达式来提取网站信息。
3:我觉得比较难得地方就是如何写正确的正则来提取出需要的信息,以下记录每个接口中需要的正则
3.1
获取页面省份的编号
//page为需要提取信息的源信息
public static Hashtable<String, String>parseProvincePage(String page){
return getKeyValues(page, "<a href=\"dis.do?.+?class=\"c\">.+?</a>", "(?<=>).+?(?=</a>)", "(?<=pid=)[0-9]+");
}
3.2获取城市的编号
public static Hashtable<String,String>parseDitPage(String page){
return getKeyValues(page, "<a href=\"cout.do\\?.+?class=\"c\">.+?</a>", "(?<=>).+?(?=</a>)", "(?<=did=)[0-9]+");
}
3.3获取县城编号
public static Hashtable<String,String>parseCidPage(String page){
return getKeyValues(page, "<a href=\"index.do\\?cid=?.+?&pid=.+?class=\"c\">.+?</a>", "(?<=>).+?(?=</a>)", "(?<=cid=)[0-9]+(?=&)");
}
3.4
public static Hashtable<String, String> getKeyValues(String webPage,String tagRegex,String keyRegex,String valueRegex){
Hashtable<String,String>table=new Hashtable<String, String>();
for(String tag:getAllMathers(webPage,tagRegex)){
table.put(getMatcher(tag,keyRegex), getMatcher(tag, valueRegex));
}
return table;
}
3.5
7天详情
String regex="((?<=class=\"b\">)[\\s\\S]+?<br>[\\s\\S]+?(?=</))";
3.6 洗车指数
return getAllMathers(html, "(?<=洗车指数]</span>).+?(?=<)");
3.7 城市的详细天气状况
getAllMathers(detailHtml, "(?<=class=\"b\" id=\"\\w{9,15}\">).+?(?=<)|(?<=:).+?(?=<br>)");
4
项目主要的思路就是通过servlet来调用连接然后把信息保存在xml做缓存然后每小时查询一下网站扒取下信息来更新缓存数据,然后客户端就先查询xml中有没有缓存数据没有再通知服务器扒取。
5
项目的完成效果。我就不一一贴出代码了。需要的留言吧