本款程序是一款简单的抓取Google天气预报代码哦,以前写的都是php,asp今天我发布一款jsp获取goolge天气代码哦。
public NodeList getWeatherDiv(String htmlUrl) {
NodeList res = null;
try{
Parser parser = new Parser(htmlUrl);
parser.setEncoding("GBK");
NodeFilter divFilter = new NodeClassFilter(Div.class);
OrFilter lastFilter = new OrFilter();
lastFilter
.setPredicates(new NodeFilter[] { divFilter });
NodeList nodeList = parser.parse(lastFilter);
Node[] nodes = nodeList.toNodeArray();
for (int i = 0; i < nodes.length; i++) {
Node anode = (Node) nodes[i];
if(anode instanceof Div){
Div mydiv = (Div)anode;
String className = mydiv.getAttribute("class");
if(className!=null && className.equals("e")){
res = mydiv.getChildren();
}
}
}
} catch (ParserException e) {
e.printStackTrace();
}
return res;
}
public static void cleanCache() {
if(isStart) return;
isStart = true;
TimerTask task = new TimerTask() {
public void run() {
Iterator it = hmCache.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
Object key = entry.getKey();
String today = DateTimeUtil.format(new Date(),"yyyyMMdd");
if(key.toString().indexOf(today)>=0){
it.remove();
hmCache.remove(key);
}
}
}
};
Timer timer = new Timer();
timer.schedule(task, Calendar.getInstance ().getTime(), 24*3600 * 1000);
}
private void addWeatherDay(JSONObject json,int flag,String htmlContent){
String tt = (flag==0?"t":("t"+flag));
try{
Node anode = null;
Parser parser = Parser.createParser(htmlContent, "GBK");
NodeFilter textFilter = new NodeClassFilter(TextNode.class);
NodeFilter imgFilter = new NodeClassFilter(ImageTag.class);
OrFilter lastFilter = new OrFilter();
lastFilter.setPredicates(new NodeFilter[] { textFilter,imgFilter });
//String t = "",t_res = "",t_tp="";
NodeList nodeList = parser.parse(lastFilter);
Node[] nodes = nodeList.toNodeArray();
for (int i = 0; i < nodes.length; i++) {
anode = (Node) nodes[i];
if(anode instanceof ImageTag){
ImageTag img = (ImageTag)anode;
if(img!=null){
json.put(tt+"_res", img.getAttribute("title"));
json.put(tt+"_result", img.getAttribute("title"));
json.put(tt+"_tp", ("http://www.google.cn"+img.getImageURL()));
}
}else if(anode instanceof TextNode){
TextNode text = (TextNode)anode;
String t = text.getText();
if(t.indexOf("°C")>0){
json.put(tt, t);
}
}
}
}catch(Exception ex){
ex.printStackTrace();
}
}
private void getDivText(JSONObject json, String htmlContent) {
String line = "";
Node anode = null;
Div divnode = null;
try {
Parser parser = Parser.createParser(htmlContent, "GBK");
NodeFilter divFilter = new NodeClassFilter(Div.class);
OrFilter lastFilter = new OrFilter();
lastFilter.setPredicates(new NodeFilter[] { divFilter });
NodeList nodeList = parser.parse(lastFilter);
int idx = 0;
Node[] nodes = nodeList.toNodeArray();
for (int i = 0; i < nodes.length; i++) {
anode = (Node) nodes[i];
line = "";
if (anode instanceof Div) {
divnode = (Div) anode;
String className = StrCharUtil.formatNullStr(divnode.getAttribute("class"));
String align = StrCharUtil.formatNullStr(divnode.getAttribute("align"));
if(align.equals("")) continue;
if(className.equals("") && align.equals("center")){
line = divnode.getChildrenHTML();
addWeatherDay(json,idx,line);
idx ++;
}
}
if (StrCharUtil.formatNullStr(line).equals(""))
continue;
}
} catch (ParserException pe) {
pe.printStackTrace();
}
}
public JSONObject getWeather(String city){
String today = DateTimeUtil.format(new Date(),"yyyyMMdd");
if(hmCache.get(city+today)!=null){
return hmCache.get(city+today);
}
JSONObject hm =new JSONObject();
hm.put("zhishu","");
try{
city = getCityName(city);
final String googleWeatherURL = "http://www.google.cn/search?hl=zh-CN&newwindow=1&q=tq+"+URLEncoder.encode(city,"UTF-8")+"&aq=f&oq=";
NodeList nodeListDiv = getWeatherDiv(googleWeatherURL);
int idx = 0;
if(nodeListDiv!=null){
getDivText(hm,nodeListDiv.toHtml());
}
}catch(Exception ex){
ex.printStackTrace();
}
hmCache.put(city+today, hm);
return hm;
}
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔