首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开放天气API

开放天气API
EN

Stack Overflow用户
提问于 2014-12-24 16:23:04
回答 3查看 6.4K关注 0票数 3

所以,我为不同的社区制作了一堆网页,我想在每个网页上都有一个小的天气箱,我可以定制它,只要有这个城市的名字,当前的温度,和当前的天气状况。我想要能够完全按照我想要的方式来设计。我找到了一个名为开放式天气图的网站,它似乎完全可以做我想做的事情。问题是我不知道如何使用JSON。这可能很简单,但我似乎在我尝试过的任何在线教程中都迷失了方向。

这是一个页面的URL示例,它加载了一些JSON。http://api.openweathermap.org/data/2.5/weather?q=London,uk

我可以把这个包含在我的文件中,动态地更改城市和国家代码,以得到我想要的城市。但是我怎么把这个装进我的天气箱呢?假设这就是我所拥有的:

代码语言:javascript
复制
<div class="weatherbox">

  <strong class="city>{CITY NAME HERE}</strong>
  <span class="temperature">{X} °C</span>
  <p class="weatherdescription>{WEATHER DESCRIPTION HERE}</p>

</div>

然后如何从JSON访问数据?我希望尽可能简单地做到这一点。是否包括这样的文件才能访问对象,还是更复杂?

代码语言:javascript
复制
<script type="javascript" src="http://api.openweathermap.org/data/2.5/weather?q=London,uk"></script>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-24 16:54:17

从您的代码行:

代码语言:javascript
复制
<script type="javascript" src="http://api.openweathermap.org/data/2.5/weather?q=London,uk"></script>

这是不正确的,api正在返回JSON,它不是javascript文件,所以您不能以这种方式访问它。请注意,它们的API似乎将城市和国家作为URL参数的一部分,因此您需要插入相应的城市/国家。

对于你的具体问题,你可以这样做:

代码语言:javascript
复制
var jsonData;

$(document).ready(function ()
{
    $.getJSON('http://api.openweathermap.org/data/2.5/weather?q=London,uk', function(data) {
        jsonData = data;
        $('.city').text(jsonData.name);
        // etc
    });
});

有关实际操作,请参见http://jsfiddle.net/jsxm7j3n/1/

注为了理解JSON,您可以通过JSON解析器(如http://json.parser.online.fr/上的解析器)运行它--这将使您能够更好地理解所接收的内容的组成,以及如何解析它。

双重注意:忘记提到这个解决方案使用JQuery -我相信有纯粹的javascript方式来实现它,但它会更冗长,(在我看来)更难理解。

票数 5
EN

Stack Overflow用户

发布于 2014-12-24 16:42:21

假设jQuery:

代码语言:javascript
复制
<script>
// Load the data through ajax, not by including it like a script:

$.get('http://api.openweathermap.org/data/2.5/weather?q=London,uk', function(data) {
    $('.weatherbox .temperature').text(data.main.temp);
});

</script>

当您查看从URL到API的响应头时,它发送了两个重要的头:

代码语言:javascript
复制
Content-Type: application/json; charset=utf-8
Access-Control-Allow-Origin: *

这意味着:

  1. 返回JSON对象,而不仅仅是一个文件。那么,您不必使用JSON.parse()$.getJSON
  2. 允许任何人通过ajax (Ajax的安全方面)请求它。

因为Ajax默认是异步的(这就是A所代表的),所以您需要将您的分配封装到一个函数中,该函数在请求完成后执行。

票数 4
EN

Stack Overflow用户

发布于 2018-11-19 09:34:56

运行以下代码。您必须只更改Api键。

完整教程:https://www.revilodesign.de/blog/sonstiges/wetterdaten-mit-openweathermap-api-in-eigene-webseite-einbinden/

代码语言:javascript
复制
// API URL
var apiUrl				=	'https://api.openweathermap.org/data/2.5/weather?q=London,uk&units=metric&APPID=YOUR_API_KEY';

// AJAX
jQuery.ajax ({
	url: apiUrl,
	type: 'GET',
	dataType: 'jsonp',
	success: function(data) {

		console.log(data);

		// COORDINATES
		var coordLat			=	data.coord.lat;
		var coordLng			=	data.coord.lon;
		
		// WEATHER
		var weatherId			=	data.weather[0].id;
		var weatherMain			=	data.weather[0].main;
		var weatherDesc			=	data.weather[0].description;
		var weatherIcon			=	'<img src="https://openweathermap.org/img/w/' + data.weather[0].icon + '.png" />';
		var weatherBg			=	data.weather[0].icon;
		
		// BASE
		var baseData			=	data.base;
		
		// TEMP
		var mainTemp			=	data.main.temp;
		var mainPressure		=	data.main.pressure;
		var mainHumidity		=	data.main.humidity;
		var mainTempMin			=	data.main.temp_min;
		var mainTempMax			=	data.main.temp_max;
		
		// VISIBILITY
		var visibility			=	data.visibility;
		
		// WIND
		var windSpeed			=	data.wind.speed;
		var windDeg				=	data.wind.deg;
		
		// CLOUDS
		var clouds				=	data.clouds.all;
		
		// DT
		var dt					=	data.dt;
		
		// SYS
		var sysType				=	data.sys.type;
		var sysId				=	data.sys.id;
		var sysMessage			=	data.sys.message;
		var sysCountry			=	data.sys.country;
		var sysSunrise			=	data.sys.sunrise;
		var sysSunset			=	data.sys.sunset;
		
		// ID
		var id					=	data.id;
		
		// NAME
		var name				=	data.name;
		
		// COD
		var cod					=	data.cod;
					
		jQuery('#city').html( name );
		jQuery('#temp').html( mainTemp + '° C' );
		jQuery('#desc').html( weatherDesc );
	}
	
});
代码语言:javascript
复制
#weatherbox {
  width: 200px;
  height: 20px;
  background: #b4ecff;
  border-radius: 8px;
  display: table;
  margin: 20px auto;
  text-align: center;
  font-size: 14px;
  line-height: 20px;
  overflow:hidden;
  padding: 0 0 10px 0;
}
strong,
span {
  width: 100%;
  display: inline-block;
  padding: 10px 0;
  margin: 0;
}
p {
  padding: 0;
  margin: 0
}
strong {
  background: #00769d;
  color: #fff;
  text-transform: uppercase;
  letter-spacing: 1px;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="weatherbox">

  <strong id="city"></strong>
  <span id="temp"></span>
  <p id="desc"></p>

</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27639668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档