最近项目中需要一个天气的小部件,根据用户的IP地址显示当前用户所处位置的天气。
找个很久,有很多是用iframe调用其他天气网页,这样会产生页面无法控制的问题。又看到yahoo的weather API,这个API是很不错的,功能强大,内容详细,但是查找的条件比较苛刻,需要WOEID。这个ID我没有找到方法可以动态获取,其他网友提供的方法也都无法完成此功能(有些是已经停用),所以只能找其他的方法了。下面是我利用worldweatheronline服务以及sina Ip地址服务获取天气的代码。<script src="Scripts/jquery-1.4.1.js"></script>
<script src="Scripts/jqPagination/js/WeatherConv.js"></script>
<script type="text/javascript" src="http://counter.sina.com.cn/ip"></script>
<script type="text/javascript">
//创建天气预报核心对象
$(document).ready(function () {
url = "http://api.worldweatheronline.com/free/v1/weather.ashx?q=" + ILData[0] + "&format=json&num_of_days=1&key=yourkey&callback=?";
$.getJSON(url, function (result) {
var strdate = new Date(result.data.weather[0].date);
$("#date").html(strdate.toLocaleDateString());
$("#tempMinC").html(result.data.weather[0].tempMinC);
$("#tempMaxC").html(result.data.weather[0].tempMaxC);
var type = result.data.weather[0].weatherCode;
if (WeatherType[type] != null) {
$("#weatherDesc").html(WeatherType[type]);
}
else {
$("#weatherDesc").html(result.data.weather[0].weatherDesc[0].value);
}
var wind = result.data.weather[0].winddir16Point;
if (Windcompass[wind] != null) {
$("#Wind").html(Windcompass[wind]);
}
$("#weatherIconUrl").attr('src', result.data.weather[0].weatherIconUrl[0].value);
});
});
</script>
首先引入jquery库,WeatherConv.js是我自己写的天气和风向编码对照表,因为worldweatheronline服务返回的是英语,接下来是sina的服务地址,用来获取ip地址。
下面是html页面
<div>
<div style="float: left;">
<img id="weatherIconUrl" alt="" src="" />
</div>
<div style="float: left;margin-left:2px;">
<div id="temp"><span id="tempMinC"></span>C~<span id="tempMaxC"></span>C</div>
<div id="weatherDesc"></div>
<div id="Wind"></div>
<div id="date"></div>
</div>
</div>
使用worldweatheronline服务需要申请一个Key,免费的。该服务的网址在http://www.worldweatheronline.com/
附件上传不上来,稍后把WeatherConv.js发上来吧JavaScript天气预报
找个很久,有很多是用iframe调用其他天气网页,这样会产生页面无法控制的问题。又看到yahoo的weather API,这个API是很不错的,功能强大,内容详细,但是查找的条件比较苛刻,需要WOEID。这个ID我没有找到方法可以动态获取,其他网友提供的方法也都无法完成此功能(有些是已经停用),所以只能找其他的方法了。下面是我利用worldweatheronline服务以及sina Ip地址服务获取天气的代码。<script src="Scripts/jquery-1.4.1.js"></script>
<script src="Scripts/jqPagination/js/WeatherConv.js"></script>
<script type="text/javascript" src="http://counter.sina.com.cn/ip"></script>
<script type="text/javascript">
//创建天气预报核心对象
$(document).ready(function () {
url = "http://api.worldweatheronline.com/free/v1/weather.ashx?q=" + ILData[0] + "&format=json&num_of_days=1&key=yourkey&callback=?";
$.getJSON(url, function (result) {
var strdate = new Date(result.data.weather[0].date);
$("#date").html(strdate.toLocaleDateString());
$("#tempMinC").html(result.data.weather[0].tempMinC);
$("#tempMaxC").html(result.data.weather[0].tempMaxC);
var type = result.data.weather[0].weatherCode;
if (WeatherType[type] != null) {
$("#weatherDesc").html(WeatherType[type]);
}
else {
$("#weatherDesc").html(result.data.weather[0].weatherDesc[0].value);
}
var wind = result.data.weather[0].winddir16Point;
if (Windcompass[wind] != null) {
$("#Wind").html(Windcompass[wind]);
}
$("#weatherIconUrl").attr('src', result.data.weather[0].weatherIconUrl[0].value);
});
});
</script>
首先引入jquery库,WeatherConv.js是我自己写的天气和风向编码对照表,因为worldweatheronline服务返回的是英语,接下来是sina的服务地址,用来获取ip地址。
下面是html页面
<div>
<div style="float: left;">
<img id="weatherIconUrl" alt="" src="" />
</div>
<div style="float: left;margin-left:2px;">
<div id="temp"><span id="tempMinC"></span>C~<span id="tempMaxC"></span>C</div>
<div id="weatherDesc"></div>
<div id="Wind"></div>
<div id="date"></div>
</div>
</div>
使用worldweatheronline服务需要申请一个Key,免费的。该服务的网址在http://www.worldweatheronline.com/
附件上传不上来,稍后把WeatherConv.js发上来吧JavaScript天气预报
http://download.csdn.net/detail/ryan1221/5339586
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>weather.html</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="jquery-1.4.1.js"></script>
<script type="text/javascript" src="WeatherConv.js"></script>
<script type="text/javascript" src="http://counter.sina.com.cn/ip"></script> <script type="text/javascript">
//创建天气预报核心对象
$(document).ready(function () {
url = "http://api.worldweatheronline.com/free/v1/weather.ashx?q=" + ILData[0] + "&format=json&num_of_days=1&key=yourkey&callback=?";
$.getJSON(url, function (result) {
var strdate = new Date(result.data.weather[0].date);
$("#date").html(strdate.toLocaleDateString());
$("#tempMinC").html(result.data.weather[0].tempMinC);
$("#tempMaxC").html(result.data.weather[0].tempMaxC);
var type = result.data.weather[0].weatherCode;
if (WeatherType[type] != null) {
$("#weatherDesc").html(WeatherType[type]);
}
else {
$("#weatherDesc").html(result.data.weather[0].weatherDesc[0].value);
}
var wind = result.data.weather[0].winddir16Point;
if (Windcompass[wind] != null) {
$("#Wind").html(Windcompass[wind]);
}
$("#weatherIconUrl").attr('src', result.data.weather[0].weatherIconUrl[0].value);
});
});
</script>
</head>
<body>
<div>
<div style="float: left;">
<img id="weatherIconUrl" alt="" src="" />
</div>
<div style="float: left;margin-left:2px;">
<div id="temp"><span id="tempMinC"></span>C~<span id="tempMaxC"></span>C</div>
<div id="weatherDesc"></div>
<div id="Wind"></div>
<div id="date"></div>
</div>
</div>
</body>
</html>我这样写,应该没问题吧?可是不行呢,显示不出来
谁测试下,行不行啊?还是我机子的问题?
应该不是吧,但貌似不知道在那里找Key。
另外,有一个疑问,如果说使用者,都有去注册一个Key,那这个实用性有问题啊?
你不可能也叫你的用户,也去这个网站申请一个Key吧?
应该不是吧,但貌似不知道在那里找Key。
另外,有一个疑问,如果说使用者,都有去注册一个Key,那这个实用性有问题啊?
你不可能也叫你的用户,也去这个网站申请一个Key吧?KeyID是在worldweatheronline注册后,登陆,会有一个My API Keys。这个是免费Key,如果用户想要有更多的需求,也可以申请一个付费的Key。毕竟这是为了免费使用而找到的方法,为用户申请一个Key就可以了。雅虎的位置查询也需要申请一个账号,且每天有查询数量限制。
应该不是吧,但貌似不知道在那里找Key。
另外,有一个疑问,如果说使用者,都有去注册一个Key,那这个实用性有问题啊?
你不可能也叫你的用户,也去这个网站申请一个Key吧?KeyID是在worldweatheronline注册后,登陆,会有一个My API Keys。这个是免费Key,如果用户想要有更多的需求,也可以申请一个付费的Key。毕竟这是为了免费使用而找到的方法,为用户申请一个Key就可以了。雅虎的位置查询也需要申请一个账号,且每天有查询数量限制。
不错,终于搞定了,感谢分享。
另外,这个只是当天的天气预报,实用性不强,楼主可以扩展下,至少要显示明天或后天的天气情况,
像QQ上或2345.com上的天气预报那样。显示三天内,应该是要把num_of_days=1改为num_of_days=3吧。