使用雅虎天气Api

时间:2016-05-12 17:00:58

标签: android json retrofit2 yahoo-weather-api

我正在使用yahoo weather api并使用以下链接获取结果:

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%22london%22)&format=json

现在我想通过改造来使用这个网址。所以请告诉我如何通过传递查询来改变城市。

谢谢

2 个答案:

答案 0 :(得分:4)

最终会出现这样的情况:

public interface WeatherService {
   @GET("v1/public/yql")
   Call<String> getWeather(@Query("q") String query);

}

然后像这样创建对象:

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://query.yahooapis.com")
            .addConverterFactory(ScalarsConverterFactory.create())
            .build();

      WeatherService wService = retrofit.create(WeatherService.class);

然后像这样运行:

String query = "select * from weather.forecast where woeid in (select woeid from geo.places(1) where text=\"Leeds\")&format=json";

Call<String> weather = wService.getWeather(query);
         try {
            Response<String> resp = weather.execute();

您应该将ConverterFactory更改为json并正确解析天气输出。

我没有对此进行测试,只是让您了解如何使用Retrofit查询。

答案 1 :(得分:3)

如果我理解得很清楚,那么您正在寻找一种将特定城市纳入网址的方法。以下是有关如何执行此操作的示例代码。在示例中,变量城市可以采用任何给定的城市名称。

var city = "london";
var query = "select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22"+ city +"%22)&format=json"

更新

然后您可以将查询连接到基本URL,如下所示:

var baseurl = "https://query.yahooapis.com/v1/public/yql?q=" + query;