为什么Yahoo weather API查询不起作用?

为什么Yahoo weather API查询不起作用?,api,yahoo,weather,Api,Yahoo,Weather,从渥太华获取预测的查询不起作用: SELECT * FROM weather.forecast WHERE woeid IN (SELECT woeid FROM geo.places WHERE text="Ottawa, Canada" limit 1) 结果: "query": { "count": 1, "created": "2015-07-02T13:06:45Z", "lang": "en-US", "results": { "channel": {

从渥太华获取预测的查询不起作用:

SELECT * FROM weather.forecast WHERE woeid IN (SELECT woeid FROM geo.places WHERE text="Ottawa, Canada" limit 1)
结果:

"query": {
  "count": 1,
  "created": "2015-07-02T13:06:45Z",
  "lang": "en-US",
  "results": {
   "channel": {
    "title": "Yahoo! Weather - Error",
    "description": "Yahoo! Weather Error",
    "item": {
     "title": "City not found",
     "description": "\nInvalid Input /forecastrss?w=91982014\n"
    }
   }
  }
 }
"query": {
  "count": 1,
  "created": "2015-07-02T13:00:47Z",
  "lang": "en-US",
  "results": {
   "place": {
    "woeid": "91982014"
   }
  }
 }
子查询单独执行后,将获得正确的结果:

SELECT woeid FROM geo.places WHERE text="Ottawa, Canada" limit 1
结果:

"query": {
  "count": 1,
  "created": "2015-07-02T13:06:45Z",
  "lang": "en-US",
  "results": {
   "channel": {
    "title": "Yahoo! Weather - Error",
    "description": "Yahoo! Weather Error",
    "item": {
     "title": "City not found",
     "description": "\nInvalid Input /forecastrss?w=91982014\n"
    }
   }
  }
 }
"query": {
  "count": 1,
  "created": "2015-07-02T13:00:47Z",
  "lang": "en-US",
  "results": {
   "place": {
    "woeid": "91982014"
   }
  }
 }

这适用于我尝试过的所有其他城市,当我忽略限制1时,它也适用于渥太华,但返回的结果太多。我是做错了什么还是API出了问题?

我认为问题在于,对于渥太华来说,有多个WOEID的多个结果,并且不是所有这些WOEID在weather.forecast表中都有相应的条目。我认为这是因为其中一些条目的水平与我们预测的水平不同

查询SELECT woeid FROM geo.places WHERE text=渥太华,Canada将生成以下结果:

"results": {
 "place": [
  {
   "woeid": "91982014"
  },
  {
   "woeid": "29375164"
  },
  {
   "woeid": "12483153"
  }
 ]
}
如果修改查询以包括地点类型,请选择woeid,placeTypeName.content FROM geo.places WHERE text=渥太华,加拿大,您可以看到结果包括城镇、县/区和岛屿,城镇是结果中的第一项:

"results": {
 "place": [
  {
   "woeid": "91982014",
   "placeTypeName": "Town"
  },
  {
   "woeid": "29375164",
   "placeTypeName": "County/District"
  },
  {
   "woeid": "12483153",
   "placeTypeName": "Island"
  }
 ]
}
在返回过多结果的完整查询结果中,从weather.forecast WHERE woeid In SELECT woeid FROM geo.places WHERE text=渥太华,您可以看到一个名为diagnostics的部分,该部分包含一个名为url的数组,该数组提供了作为查询结果调用的天气API url:

http://weather.yahooapis.com/forecastrss?w=12483153
http://weather.yahooapis.com/forecastrss?w=29375164
http://weather.yahooapis.com/forecastrss?w=91982014
91982014的结果是一个错误:

您可以从结果中删除错误案例从weather.forecast中选择*从geo.places中选择woeid从geo.places中选择woeid从text=渥太华,加拿大和title NOT LIKE%error%,这仍然会给出两个结果

似乎你真正想做的是意识到加拿大有三个地方以渥太华的名字命名:安大略省的首都渥太华,安大略省的县/区渥太华,以及努纳武特地区的一系列岛屿,称为渥太华群岛。因此,您需要对您的查询更加具体

从weather.forecast中选择*WHERE woeid IN SELECT woeid FROM geo.places WHERE text=渥太华、安大略、加拿大和标题不相似%Error%


感觉很笨拙,但只给出了一个结果。

谢谢您提供的详细答案!更具体的问题是,我只能从另一个API获得城市和国家的名称,但根据您的建议,我可以得到一个有效的解决方案。再次感谢。