雅虎天气 YQL 数据限制
yahoo weather yql data limit
我最近注意到雅虎对其天气服务进行了更改 API 并试图编辑我正在使用的代码。我发现 this code on github 并试图只获取今天的天气信息,因此将变量 yql 的值中的 limit 5
更改为 limit 1
,但是 div 不会显示任何内容。只有在我更改大于 1(例如 2)的数字后,div 才会显示检索到的数据。我不知道我做错了什么以及还需要做什么。
如有任何帮助或建议,我们将不胜感激。
在第 27 行,代码将循环预期结果数组的每一项。但如果响应数据中只有一项(limit 1
),数据将不是数组而是对象,从而打破循环。
这里有一个快速解决方法(有一些代码重复,但它说明了这个想法):
<html>
<head>
<title>Weather Example</title>
<script src="https://code.jquery.com/jquery-2.2.3.min.js"
integrity="sha256-a23g1Nt4dtEYOj7bR+vTu7+T8VP13humZFBJNIYoEJo="
crossorigin="anonymous">
</script>
<style>
.weather { display: none; margin: 1em; border: 2px solid black; width: 100px; text-align: center; border-radius: 4px; }
.weather_date { background-color: #000; color: #fff; height: 1.2em; padding: 0.1em; }
.weather_temp { display: table; width:100%; height: 1.2em; border-bottom: 1px solid black; }
.weather_temp_min { display: table-cell; background-color: #efe; width: 50%; padding: 0.1em; }
.weather_temp_max { display: table-cell; background-color: #fee; width: 50%; padding: 0.1em; }
.weather_text { font-size: 80%; color: #999; padding: 0.5em; }
</style>
</head>
<body>
<script>
var url = 'https://query.yahooapis.com/v1/public/yql';
var yql = 'select title, units.temperature, item.forecast from weather.forecast where woeid in (select woeid from geo.places where text="Brisbane, Australia") and u = "C" limit 1| sort(field="item.forecast.date", descending="false");';
var iconUrl = 'https://s.yimg.com/zz/combo?a/i/us/we/52/';
$.ajax({url: url, data: {format: 'json', q: yql}, method: 'GET', dataType: 'json'})
.success(function(data) {
if (data.query.count > 1) {
jQuery.each(data.query.results.channel, function(idx, result) {
console.log(idx);
var f = result.item.forecast;
var u = result.units.temperature;
var c = $('#weather').clone();
c.find('.weather_date').text(f.date);
c.find('.weather_temp_min').text(f.low + u);
c.find('.weather_temp_max').text(f.high + u);
c.find('.weather_icon').attr('src', iconUrl + f.code + '.gif');
c.find('.weather_text').text(f.text);
c.css('display', 'inline-block');
c.appendTo($('body'));
});
} else {
var f = data.query.results.channel.item.forecast;
var u = data.query.results.channel.units.temperature;
var c = $('#weather').clone();
c.find('.weather_date').text(f.date);
c.find('.weather_temp_min').text(f.low + u);
c.find('.weather_temp_max').text(f.high + u);
c.find('.weather_icon').attr('src', iconUrl + f.code + '.gif');
c.find('.weather_text').text(f.text);
c.css('display', 'inline-block');
c.appendTo($('body'));
}
}
);
</script>
<!-- Used as a template -->
<div id="weather" class="weather">
<div class="weather_date">DATE</div>
<div class="weather_temp">
<div class="weather_temp_min">MIN</div>
<div class="weather_temp_max">MAX</div>
</div>
<img class="weather_icon">
<div class="weather_text"></div>
</div>
</body>
</html>
我最近注意到雅虎对其天气服务进行了更改 API 并试图编辑我正在使用的代码。我发现 this code on github 并试图只获取今天的天气信息,因此将变量 yql 的值中的 limit 5
更改为 limit 1
,但是 div 不会显示任何内容。只有在我更改大于 1(例如 2)的数字后,div 才会显示检索到的数据。我不知道我做错了什么以及还需要做什么。
如有任何帮助或建议,我们将不胜感激。
在第 27 行,代码将循环预期结果数组的每一项。但如果响应数据中只有一项(limit 1
),数据将不是数组而是对象,从而打破循环。
这里有一个快速解决方法(有一些代码重复,但它说明了这个想法):
<html>
<head>
<title>Weather Example</title>
<script src="https://code.jquery.com/jquery-2.2.3.min.js"
integrity="sha256-a23g1Nt4dtEYOj7bR+vTu7+T8VP13humZFBJNIYoEJo="
crossorigin="anonymous">
</script>
<style>
.weather { display: none; margin: 1em; border: 2px solid black; width: 100px; text-align: center; border-radius: 4px; }
.weather_date { background-color: #000; color: #fff; height: 1.2em; padding: 0.1em; }
.weather_temp { display: table; width:100%; height: 1.2em; border-bottom: 1px solid black; }
.weather_temp_min { display: table-cell; background-color: #efe; width: 50%; padding: 0.1em; }
.weather_temp_max { display: table-cell; background-color: #fee; width: 50%; padding: 0.1em; }
.weather_text { font-size: 80%; color: #999; padding: 0.5em; }
</style>
</head>
<body>
<script>
var url = 'https://query.yahooapis.com/v1/public/yql';
var yql = 'select title, units.temperature, item.forecast from weather.forecast where woeid in (select woeid from geo.places where text="Brisbane, Australia") and u = "C" limit 1| sort(field="item.forecast.date", descending="false");';
var iconUrl = 'https://s.yimg.com/zz/combo?a/i/us/we/52/';
$.ajax({url: url, data: {format: 'json', q: yql}, method: 'GET', dataType: 'json'})
.success(function(data) {
if (data.query.count > 1) {
jQuery.each(data.query.results.channel, function(idx, result) {
console.log(idx);
var f = result.item.forecast;
var u = result.units.temperature;
var c = $('#weather').clone();
c.find('.weather_date').text(f.date);
c.find('.weather_temp_min').text(f.low + u);
c.find('.weather_temp_max').text(f.high + u);
c.find('.weather_icon').attr('src', iconUrl + f.code + '.gif');
c.find('.weather_text').text(f.text);
c.css('display', 'inline-block');
c.appendTo($('body'));
});
} else {
var f = data.query.results.channel.item.forecast;
var u = data.query.results.channel.units.temperature;
var c = $('#weather').clone();
c.find('.weather_date').text(f.date);
c.find('.weather_temp_min').text(f.low + u);
c.find('.weather_temp_max').text(f.high + u);
c.find('.weather_icon').attr('src', iconUrl + f.code + '.gif');
c.find('.weather_text').text(f.text);
c.css('display', 'inline-block');
c.appendTo($('body'));
}
}
);
</script>
<!-- Used as a template -->
<div id="weather" class="weather">
<div class="weather_date">DATE</div>
<div class="weather_temp">
<div class="weather_temp_min">MIN</div>
<div class="weather_temp_max">MAX</div>
</div>
<img class="weather_icon">
<div class="weather_text"></div>
</div>
</body>
</html>