我正在尝试从元天气 api 获取数据,但它不让我

Posted

技术标签:

【中文标题】我正在尝试从元天气 api 获取数据,但它不让我【英文标题】:I'm trying to get data from meta weather api, but its not letting me 【发布时间】:2020-01-28 13:06:20 【问题描述】:

我正在尝试从元天气 API 获取数据。由于 CORS 问题,我正在使用这个名为“crossorigin.me”的代理。仍然,它不让我获取数据。在许多人建议这样做之后,我什至包括了“模式:'no-cors”。

<!DOCTYPE html>
<html>
<head>
    <title> Fetch Promise </title>
</head>
<body>
<script>
    function getWeather(woeid)
    fetch(`https://crossorigin.me/https://www.metaweather.com/api/location/$woeid/`,mode: 'no-cors')
//fetch always returns a promise
.then(data => 
    console.log(data)
    return data.json()
    // json also returns a promise so we handle that by chaining
)
.then(result => 
const today = result.consolidated_weather[0]
console.log(`temperature in $result.title stay between $today.min_temp and $today.max_temp`)
)
.catch(error => console.log(error)) 

getWeather(2487956)
</script>
</body>
</html

【问题讨论】:

检查浏览器开发工具网络中的实际请求。我得到一个 522 状态。然后,您可以检查响应正文并阅读原因。简而言之,那个代理服务似乎不可靠 【参考方案1】:

您正在使用的 CORS 解决方法服务可能不可用,这可能是由于流量负载过大或其他原因。

谢天谢地,使用 heroku 设置您自己的个人代理非常非常容易。

按照本帖第一个回复中的说明进行操作:cors-anywhere.herokuapp.com not working (503). What else can I try?

希望这会有所帮助。

【讨论】:

【参考方案2】:

MetaWeather API 不支持 CORS。您需要在与前端相同的域上运行自己的服务器应用程序以发出请求并获取 API 响应,并指定适当的标头:例如 Access-Controll-Allow-Origin: *。 见这篇文章:https://jeremyliberman.com/2019/02/11/fetch-has-been-blocked-by-cors-policy.html

从 Node.js 和 Express 着手。

【讨论】:

以上是关于我正在尝试从元天气 api 获取数据,但它不让我的主要内容,如果未能解决你的问题,请参考以下文章

BigtableConnection API 失败;从元数据服务器获取访问令牌时出错

如何使用 fetch api 获取 XML

如何通过天气 api 获取降水/降雨?

根据数组的大小进行多次 api 调用

NSURLSession 和 API

使用 JSON 渲染数据(天气 API)