如何找到天气预报城市ID?

Posted

技术标签:

【中文标题】如何找到天气预报城市ID?【英文标题】:how to find weather forecast city id? 【发布时间】:2015-03-09 03:27:51 【问题描述】:
final String FORECAST_BASE_URL =
        "http://api.openweathermap.org/data/2.5/forecast/daily?";
final String QUERY_PARAM = "q";

你好。 我正在制作一个天气预报应用程序。但是当我使用“http://openweathermap.org”的API时, 我进货有问题,如何获取城市代码或ID“q”? 我尝试查找城市 ID,但找不到。

示例代码按城市 ID 调用:

api.openweathermap.org/data/2.5/forecast/daily?id=524901

我听说“q”也用于“id”。 我的意思是

api.openweathermap.org/data/2.5/forecast/daily?q=524901

也是可以的。我想这样做。

那么,如何找到城市ID? 有人知道吗?

【问题讨论】:

你有解决办法吗? 【参考方案1】:

OpenWeatherMap 支持中心提出了类似的问题。这是链接OpenWeatherMap

此外,这里是城市列表及其各自 ID 的链接(只需 CTRL + F 即可找到您想要的城市):List of Cities & IDs

【讨论】:

两个链接都失效了...看来页面的最后一个有效链接是来自web.archive.org/web/20180601000000*/openweathermap.org/help/city_list.txt的web.archive.org/web/20180619015316/http://openweathermap.org/…【参考方案2】:

可以从以下位置下载 CityID 的完整列表:http://bulk.openweathermap.org/sample/city.list.json.gz

您可以手动搜索该文件(解压缩后)以查找您的城市名称或从 shell 中搜索,例如:

grep -i "london" city.list.json

关于“q”与“id”查询标签:您可以使用“q”标签按城市(和国家)进行搜索,如下所示:

http://api.openweathermap.org/data/2.5/forecast/daily?q=London,GB

(请注意,不一定需要国家代码)

只要没有关于哪个城市的问题,它就可以工作。但是,如果一个国家/地区有多个同名城市,您可以在上面链接的列表中找到正确的标识符后,使用 CityID 来指定某个城市,如下所示:

http://api.openweathermap.org/data/2.5/forecast/daily?id=2643743

它还返回伦敦的天气,但如果您选择不在“q”标签中使用国家/地区代码,请确保您不会意外获得美国肯塔基州伦敦或美国俄亥俄州伦敦的天气。

【讨论】:

是否有API可以下载城市列表而不是下载静态文件? @gammay 我不确定您到底在寻找什么,但如果您询问是否有 API 调用将返回包含 OpenWeatherMap 已知的所有城市的响应,那么没有,没有(据我所知)。城市列表应该很少更改,因此对于大多数脚本来说,下载一次列表就足够了。如果您能详细说明您需要完成的工作,我可能会提供进一步的帮助。 你回答了我的问题。谢谢你。我不相信下载城市列表一次就足够了,因为城市/国家名称会发生​​变化(尽管不是很频繁)。此外,我的意见是,人们可能会使用旧名称和新名称。 @gammay 文件很大,已压缩;将其作为 JSON/XML 文本响应接收将是禁止的。 可以使用分页。国家/地区列表 - 城市等【参考方案3】:

使用 openweathermap,您需要创建一个帐户 here 。 之后,您可以生成将在地址栏中使用的 API 密钥......像这样:

http://api.openweathermap.org/data/2.5/forecast?id=524901&APPID=*******************************

只需用生成的密钥替换星星

【讨论】:

【参考方案4】:

听起来您的应用需要在用户输入城市名称时搜索城市。你可以通过在某种主机上运行OpenWeatherMap City Finder 服务器来做到这一点(在 Heroku 上,在 Docker 主机上,也许每月 5 美元从 Digital Ocean 购买你自己最便宜的 VM),然后使用 OWM City Finder Client 访问该服务器并使用 GPS 和 ID 解析用户输入到城市 JSON 数组中的任何字符串。

OWM City Finder Server 无需设置,只需在目标机器上运行以下命令:

docker run --rm -ti -p25314:25314 mvysny/owm-city-finder-server:0.1

要测试服务器并执行城市查询,只需运行:

$ curl localhost:25314/city?query=helsinki
["id":658226,"name":"Helsinki","country":"FI","coord":"lon":24.93417,"lat":60.17556,"id":658225,"name":"Helsinki","country":"FI","coord":"lon":24.93545,"lat":60.169521,"id":658224,"name":"Helsinki","country":"FI","coord":"lon":21.438101,"lat":60.60778]

您可以直接从您的应用程序访问 REST,也可以使用提供的客户端更轻松地访问。 阅读更多https://gitlab.com/mvysny/owm-city-finder/tree/master/owm-city-finder-server

【讨论】:

以上是关于如何找到天气预报城市ID?的主要内容,如果未能解决你的问题,请参考以下文章

C# winform生成天气预报(转)

.NET7使用HttpClient实现查询天气预报接口

全球78707个主要城市数据库,包含经纬度坐标值国家省份

用JS怎样显示自动获取城市和天气预报

最好的网页天气预报代码(自动定制城市天气)

天气预报公网查询城市的天气预报提示:查询结果为空!,这城市或区域暂时不被支持。