天气预报API接口是气象服务商为客户提供服务的唯一接口。拿墨迹赤必为例,跟客户充分沟通后了解客户的实际需求,从而对现有的数据进行调整,符合客户的需求形成API接口,让客户接入,这样就形成了一个完整的服务。所以说API接口并不是一个很神秘的东西,只不过是企业和客户之间的一条服务纽带。
连接中央气象台的API URL url = new URL("" + Cityid + ".html"); URLConnection connectionData = url.openConnection(); connectionData.setConnectTimeout(1000);
简单的 *** ,可以直接在servlet的doGet或doPost里面构建这个xml,然后写回响应就可以了。
需要搭建java应用服务器如tomcat服务器,运行这个servlet就可以。
xml的构建对于Java来说工具很多,JDOM, Dom4J等。
如果客户端要求用web service方式提供,就考虑Apache CXF这些Java Web服务框架,不过一般没必要的。
前台js界面代码:
//省份
function LoadProvince() {
$.ajax({
type: "POST",
url: "ashx/weatherHandler.ashx",
data: "option=province",
success: function (result) {
$(".sel-province option").remove();
var arry = result.split('|');
var obj = null;
for (var i = 0; i arry.length; i++) {
if (arry[i] != null arry[i] != "") {
obj = arry[i].split(',');
$(".sel-province").append("option value='" + obj[1] + "'" + obj[0] + "/option");
}
}
$(".sel-province").find("option[text='北京']").attr("selected", "selected");
},
error: function (errorMsg) {
$(".result-table tr").remove();
$(".result-table").append("trtd省份请求出现错误,请您稍后重试。。。/td/tr");
}
});
}
//城市
function LoadCity(provinceid) {
$.ajax({
type: "POST",
url: "ashx/weatherHandler.ashx",
data: "provinceid=" + provinceid + "option=city",
success: function (result) {
$(".sel-city option").remove();
var arry = result.split('|');
var obj = null;
for (var i = 0; i arry.length; i++) {
if (arry[i] != null arry[i] != "") {
obj = arry[i].split(',');
$(".sel-city").append("option value='" + obj[1] + "'" + obj[0] + "/option");
}
}
},
error: function (errorMsg) {
$(".result-table tr").remove();
$(".result-table").append("trtd城市请求出现错误,请您稍后重试。。。/td/tr");
}
});
}
//加载天气
function GetWeather(cityid) {
$.ajax({
type: "POST",
url: "ashx/weatherHandler.ashx",
data: "cityid=" + cityid + "option=weather",
success: function (result) {
$(".result-table tr").remove();
var arry = result.split('|');
var obj = null;
for (var i = 0; i arry.length; i++) {
if (arry[i] != null arry[i] != "") {
if (arry[i].indexOf(".gif") 0) {
$(".result-table").append("trtdimage src='images/" + arry[i] + "'//td/tr");
}
else {
$(".result-table").append("trtd" + arry[i] + "/td/tr");
}
}
}
},
error: function (errorMsg) {
$(".result-table tr").remove();
$(".result-table").append("trtd天气数据请求出现错误,请您稍后重试。。。/td/tr");
}
});
}
html代码:
body
form id="form1" runat="server"
div class="35c5-a082-0801-b697 head-div"
table
tr
td
select class="a082-0801-b697-6417 sel-province sel"
/select
/td
td
select class="0801-b697-6417-1e44 sel-city sel"
/select
/td
td
input type="button" class="b697-6417-1e44-2489 btn-search" value="查询" /
/td
/tr
/table
/div
div class="6417-1e44-2489-3de1 result-div"
table class="1e44-2489-3de1-c0b7 result-table"
/table
/div
/form
/body
由于js不支持跨域,直接ajax+ashx一般处理程序(在里面调用天气接口)。一般处理程序代码如下:
using System.Web;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
namespace WeatherTest.ashx
{
/// summary
/// weatherHandler 的摘要说明
/// /summary
public class weatherHandler : IHttpHandler
{
WeatherWsClient.WeatherWSSoapClient client = new WeatherWsClient.WeatherWSSoapClient();
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string[] result = null;
string option = context.Request.Form["option"];
switch (option)
{
case "province":
result = GetProvinces();
break;
case "city":
result = GetCitys(context.Request.Form["provinceid"]);
break;
case "weather":
result = GetWeather(context.Request.Form["cityid"], null);
break;
}
string str = ConvertToString(result, option);
context.Response.Write(str);
}
/// summary
/// 数组转字符串
/// /summary
/// param name="result"/param
/// param name="option"/param
/// returns/returns
private string ConvertToString(string[] result, string option)
{
StringBuilder *** = new StringBuilder();
foreach (string item in result)
{
*** .Append(item+"|");
}
return *** .ToString();
}
/// summary
/// 省份
/// /summary
/// returns/returns
private string[] GetProvinces()
{
return client.getRegionProvince();
}
/// summary
/// 城市
/// /summary
/// param name="provinceid"/param
/// returns/returns
private string[] GetCitys(string provinceid)
{
return client.getSupportCityString(provinceid);
}
/// summary
/// 天气数据
/// /summary
/// param name="cityid"/param
/// param name="userid"/param
/// returns/returns
private string[] GetWeather(string cityid, string userid)
{
return client.getWeather(cityid, userid);
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
①取出地址中的返回值(getWeatherReader *** )
②解析json格式的字符串
③形成你要展示的天气预报效果
public static String getWeatherReader() {//取得接口字符串
String currentLine = "";
String strReturn = "";
URL url = null;
HttpURLConnection conn = null;
InputStream in = null;
BufferedReader buff = null;
try {
url = new URL("");
System.out.println(url.toURI());
//打开地址链接
conn = (HttpURLConnection)url.openConnection();
conn.connect();
//接收数据
in = conn.getInputStream();
//如有乱码注意编码方式,如:UTF-8
buff = new BufferedReader(new InputStreamReader(in, "gb2312"));
while((currentLine = buff.readLine()) != null) {
strReturn += currentLine;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
in.close();
buff.close();
} catch (IOException e) {
return "8EF0000";
}
}
return strReturn;
}
在俄乌冲突于 2 月下旬爆发后,许多西方国家都颁布了针对俄罗斯的制裁令。然而漏洞赏金平台 HackerOne 的做法,却让不少乌克兰安全研究人员也感到寒心。多位乌克兰黑客与研究人员在 Twitter 上控诉,HackerOne 正在阻止他们提取漏洞赏金,甚至有人被截留了数千美元。 由 Hacker...
尽管恶意软件开发者擅长利用各种软硬件漏洞来达成目的,但他们散播的成品也并非毫无破绽。比如近日,安全研究人员 John Page(又名 hyp3rlinx)就介绍了一招反制勒索软件的新套路。由个人网站和 Twitter 账号上发布的内容可知,John Page 专精于找到恶意软件本身的漏洞,并于近日分...
一项新研究表明,2021 年通过勒索软件攻击方式牟取的所有资金中有 74% 流向了俄罗斯有关的黑客手中。研究人员说,价值超过 4 亿美元的加密货币支付给了“极有可能与俄罗斯有关联”的团体。研究人员还称,大量基于加密货币的洗钱活动是通过俄罗斯加密公司进行。 这项研究是由 Chainalysi...
Hackernews 编译,转载请注明出处: 在流行的包管理器中已经揭露多个安全漏洞,如果被潜在黑客利用,可能被滥用来运行任意代码和访问敏感信息,包括受感染设备的源代码和访问令牌。 然而,值得注意的是,这些漏洞要求目标开发人员同时处理一个受影响的软件包管理器和一个恶意软件包。 So...
据报道,日前,微软、英伟达等科技公司遭到一系列黑客攻击,而网络安全人员在调查中,把目标锁定在了英国英格兰牛津一位16岁少年。四名网络安全专家目前正代表微软等被攻击公司展开调查,对名为“Lapsus$”的黑客组织进行调查,专家们判断,上述16岁少年是这个黑客组织的主谋。 这个黑客组织过去进行了多次高调...
Google周四宣布,当用户打开托管在Google硬盘上的潜在可疑或危险文件时,它会开始警告用户。“我们将显示一个警告横幅,以帮助保护[用户]和他们的组织免受恶意软件、网络钓鱼和勒索软件的侵害。此前打开Google文档、表单、幻灯片和绘图时,已经有了这些警告。” 这次安全功能升级是完全被动的,管理...