import java.io.IOException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class WeatherReport {
/**
* 发送请求到GOOGLE获取天气信息页面
* @param city
* @return
* @throws Exception
*/
@SuppressWarnings("deprecation")
private static String getInputStream(String city) {
try {
HttpClient httpClient = new HttpClient();
//System.out.println("city========="+city);
String hostUrl = "http://www.google.cn/search?hl=zh-CN&q=tq%20" + URLEncoder.encode(city);
//System.out.println("hostUrl========="+hostUrl);
GetMethod getMethod = new GetMethod(hostUrl);
// 使用系统提供的默认的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
try {
// 执行getMethod
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + getMethod.getStatusLine());
}
String result = getMethod.getResponseBodyAsString();
return result;
} catch (HttpException e) {
// 发生致命的异常,可能是协议不对或者返回的内容有问题
//System.out.println("Please check your provided http address!");
e.printStackTrace();
} catch (IOException e) {
// 发生网络异常
e.printStackTrace();
} finally {
// 释放连接
getMethod.releaseConnection();
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return null;
}
/**
* 将获取的包含天气页面的信息解析出相关的天气信息
* @param result
* @identifier
* @return
*/
public static String readText(String result, String identifier) {
Pattern shopNumberPattern = Pattern.compile(identifier);
Matcher shopNamMatcher = shopNumberPattern.matcher(result);
if (shopNamMatcher.find())
return shopNamMatcher.group(1);
return "";
}
public static String getWeather(String city) {
String result = readText(getInputStream(city), "<div style=\"padding:5px 5px 5px 0;float:left\">(.+?)</div></div>");
String weatherDetail = readText(result, "<div style=\"font-size:140%\">(.+?)%");
weatherDetail = weatherDetail.replaceAll("<div>", "").replaceAll("</div>", "").replaceAll("<br>", "").replace(":", ":");
weatherDetail = weatherDetail.replaceAll(" / ","℃~");
weatherDetail = weatherDetail.replaceAll("<b>","");
weatherDetail = weatherDetail.replaceAll("</b>"," ");
weatherDetail = weatherDetail.replaceAll("°C","℃");
weatherDetail = weatherDetail.replaceAll("当前: ","");
weatherDetail = weatherDetail.replaceAll("当前:","");
return weatherDetail;
}
public static Map getWeatherBySale(String saleName) {
String weather = "";
Map resMap=null;
String city = saleName.substring(0,2);
weather = WeatherReport.getInputStream(city);
if (weather==null || weather.equals("")){
city = saleName.substring(0,3);
weather = WeatherReport.getInputStream(city);
if (weather==null || weather.equals("")){
city = saleName.substring(0,4);
weather = WeatherReport.getInputStream(city);
}
}
if (weather!=null && !weather.equals("")){
resMap=new HashMap();
weather = weather.replaceAll("\n", "").replaceAll("\t", "").replaceAll("\r", "");;
weather = weather.replaceAll(" ", "");
weather = weather.substring(0,weather.indexOf("湿度"));
// weather = city + " " + weather;
resMap.put("city", city);
resMap.put("weather", weather);
}
return resMap;
}
public static void main(String args[]){
System.out.println(WeatherReport.getWeather("呼和浩特"));
}
}
也可采用第二种方式:用地一个插件
http://www.thinkpage.cn/调用该网站提供的插件模板
可以添加股票的信息 通过如下代码:
<iframe src="http://www.thinkpage.cn/stock/widget.htm?mo=1&or=1&an=1" frameborder="0" scrolling="no" width="200" height="200" allowTransparency="true"></iframe>
分享到:
相关推荐
在Java编程中,获取天气信息是一项常见的任务,尤其在开发涉及地理位置、旅游或者日常生活助手类的应用时。要实现这一功能,通常需要借助于公开的天气API(应用程序接口),这些API提供JSON或XML格式的天气数据,...
6. **多线程**:为了不影响主程序的运行,获取天气信息的网络请求可以考虑在后台线程(如使用`ExecutorService`)中执行。 7. **数据展示**:获取到天气信息后,可能需要将数据展示给用户,这可以通过控制台打印、...
以上就是通过Java获取中国各地天气信息的基本流程,结合数据库操作,可以实现一个实用的应用程序。对于初学者来说,这涉及到了网络编程、数据解析和数据库操作等多个Java核心概念,是一个很好的学习实践项目。
本主题将详细介绍如何使用Java语言来获取天气预报数据,特别是通过"风和天气"以及"高德地图"这两个服务提供商。本文将深入探讨相关技术细节和步骤,以便开发者可以有效地集成到自己的项目中。 首先,我们要了解“风...
在获取天气预报的场景中,你需要知道中央气象台的公开API接口地址,然后使用HttpClient发送GET请求。请求成功后,服务器会返回一个包含天气信息的XML文档。解析XML数据,可以使用Java内置的DOM、SAX或JAXB等解析器,...
- 当用户点击按钮时,调用`getUserInput`方法获取输入,然后构建API请求URL,最后通过`sendGetRequest`获取天气信息。 4. **解析JSON数据**: - 解析API响应的JSON数据后,需要提取所需的信息。这可以通过遍历...
总的来说,实现"Java获取Google天气信息,且能根据IP地址获取所属地天气"这一功能,涉及到的知识点包括:网络请求、数据解析(XML和JSON)、IP地址与地理位置转换、异常处理以及服务的封装和部署。理解并掌握这些...
java获取新浪天气
标题中的“获取天气预报API,免费接口,项目下载可运行,Java实现”表明这是一个关于使用Java语言开发的天气预报API项目,它提供了免费的API接口,并且已经打包为可直接运行的形式。这样的项目通常对开发者来说是很...
@Description TODO 天气信息数据来源(http://www.webxml.com.cn/) * 根据城市或地区名称查询获得未来三天内天气情况、现在的天气实况、天气和生活指数: * 调用方法如下:输入参数:theCityName = 城市中文名称...
以下是一个简单的例子,展示了如何使用`HttpURLConnection`获取天气信息: ```java public WeatherInfo getWeatherInfo(String cityIdOrName) throws IOException { URL url = new URL(...
在本例中,使用了 webxml.com.cn 提供的天气预报服务,通过调用其 WebService 来获取天气信息。 6. Java 调用天气接口的应用 Java 调用天气接口的应用非常广泛,如: * 天气预报应用程序 * 气象监控系统 * 旅游...
java获取新浪天气代码
在Java编程领域,获取外部数据是一项常见的任务,其中包括获取天气预报信息。本示例中,我们探讨的主题是如何利用Java从Google获取简单的天气预报。通过分析提供的压缩包文件,我们可以了解到一个简单的实现方案。 ...
java调用百度天气api解析json的demo,使用gson解析,天气保存在txt文件中,带简略操作界面
### 使用Java获取Google的简单天气预报 #### 概述 本文档将介绍如何使用Java语言来获取Google提供的简单天气预报信息。尽管Google官方已不再直接提供公开的天气API服务,但可以通过第三方API或其他方式间接获取到...
java基于高德地图实现实时查询天气功能源代码。基于高德地图实现实时查询天气功能,api二次开发java基于高德地图实现实时查询天气功能源代码。基于高德地图实现实时查询天气功能,api二次开发java基于高德地图实现...
该工具类集成的是http://www.webxml.com.cn/的weiservice的接口,直接调用weatherUse中的findAllByCityName,即可根据城市名称获取天气,湿度等详细信息
在Java编程中,获取某个...以上就是使用Java获取城市天气信息的基本步骤和涉及的技术点,实际开发中可能需要根据具体需求进行调整和优化。在实现过程中,学习和理解HTTP协议、JSON解析以及错误处理机制是非常重要的。
在`WeatherTest`这个文件中,可能包含了上述代码的实现,用于测试和展示如何在Java中获取并解析Yahoo天气预报。这样的代码对学习网络编程、XML解析以及API调用等技能非常有帮助,同时也是构建实用应用程序的一个基础...