我正在尝试使用Yahoo Weather Service中的以下HTTPS端点:
我正在根据API进行一些特殊查询,以获取某个参数化位置的当前天气。
@Service("weatherConditionService")
public class WeatherConditionServiceImpl implements WeatherConditionService {
private static final String URL = "http://query.yahooapis.com/v1/public/yql";
public WeatherCondition getCurrentWeatherConditionsFor(Location location) {
RestTemplate restTemplate = new RestTemplate();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(URL);
stringBuilder.append("?q=select%20item.condition%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22");
// TODO: Validate YQL query injection
stringBuilder.append(location.getName());
stringBuilder.append("%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys");
WeatherQuery weatherQuery = restTemplate.getForObject(stringBuilder.toString(), WeatherQuery.class);
// TODO: Test Json mapping response
Condition condition = weatherQuery.getQuery().getResults().getChannel().getItem().getCondition();
return new WeatherCondition(condition.getDate(), Integer.parseInt(condition.getTemp()), condition.getText());
}
位置是一个提供属性" name"这是该位置的字符串描述,例如"纽约"或"马尼拉"。
条件其他类只映射返回的对象。
执行时,我得到以下HTTP响应:
org.springframework.web.client.HttpClientErrorException: 403 Forbidden
所以这意味着我无权根据我的理解访问该资源。
如果我只是复制&将其粘贴到网络浏览器中:
我认为绘图不是问题,因为我没有得到" 400" (错误请求)但是" 403" (禁止)
我使用RestTemplate对象的方式一定有一些错误。我正在研究,但我无法找到答案。
答案 0 :(得分:1)
文档说你需要一个api密钥。但是当我这样打电话时:
fetch('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22nome%2C%20ak%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys')
.then(resp=> resp.json())
.then((res)=>console.log(res.query.results))
没有一个它可以正常工作。也许你经常因为经常打击api而被黑名单。
您的代码似乎没问题。