如何使用Spring Boot使用HTTPS GET服务

时间:2017-11-02 18:17:53

标签: java spring-boot https get yahoo-weather-api

我正在尝试使用Yahoo Weather Service中的以下HTTPS端点:

Yahoo Weather Service API

我正在根据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

所以这意味着我无权根据我的理解访问该资源。

如果我只是复制&将其粘贴到网络浏览器中:

Yahoo Weather Query

我认为绘图不是问题,因为我没有得到" 400" (错误请求)但是" 403" (禁止)

我使用RestTemplate对象的方式一定有一些错误。我正在研究,但我无法找到答案。

1 个答案:

答案 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))

https://repl.it/NeoM

没有一个它可以正常工作。也许你经常因为经常打击api而被黑名单。

您的代码似乎没问题。