0

我对使用 Ruby 非常陌生,尤其是使用 API,但我一直在尝试让Darksky API工作,但我担心我在使用它时遗漏了一些明显的东西。

这是我所拥有的

require 'darksky'

darksky = Darksky::API.new('my api key')

forecast = darksky.forecast('34.0500', '118.2500')

forecast

当我从命令行运行它时,没有任何反应。我在这里做错了什么?

4

1 回答 1

2

简单地使用forecast不会做任何事情。puts您至少需要使用:

puts forecast

或者,看看 Ruby 的 object pretty-printer 是否可以返回更有趣的东西:

require 'pp'
pp forecast

进一步挖掘,我认为他们的 API 不起作用。根据他们的示例,使用有效密钥及其位置样本,以及来自其源站点 Forecast.io 的位置,也返回 nil。

直接从 Forecast.io 的站点使用 REST 接口确实会返回 JSON。JSON 在 Ruby 中很容易使用,所以它是一个很好的方法。

下面是一些测试 API 和 Forecast.io 的 REST 接口的代码:

API_KEY = 'xxxxxxxxxxxxxxxxxxx'
LOCATION = %w[37.8267 -122.423]

require 'darksky'
darksky = Darksky::API.new(API_KEY)
forecast = darksky.forecast(*LOCATION)
forecast # => nil

brief_forecast = darksky.brief_forecast(*LOCATION)
brief_forecast # => nil

require 'json'
require 'httparty'
URL = "https://api.forecast.io/forecast/#{ API_KEY }/37.8267,-122.423"
puts URL
# >> https://api.forecast.io/forecast/xxxxxxxxxxxxxxxxxxx/37.8267,-122.423

puts HTTParty.get(URL).body[0, 80]
# >> {"latitude":37.8267,"longitude":-122.423,"timezone":"America/Los_Angeles","offse

请注意,LOCATION37.8267,-122.423这两种情况下,根据 Forecast.io 网站,这是恶魔岛。另请注意,body显示的输出是 JSON 字符串。

将返回的 JSON 传递给 Ruby 的 JSON 类,例如:

JSON[returned_json] 

将其解析回 Ruby 哈希。使用 OpenURI(因为它带有 Ruby)而不是 HTTParty,并将其传递给 JSON 进行解析,如下所示:

body = open(URL).read
puts JSON[body]
于 2013-11-08T04:58:32.373 回答