使用Ruby和API

时间:2013-11-08 04:23:10

标签: ruby api

我很擅长使用Ruby,尤其是使用API​​,但我一直试图让Darksky API工作,但我担心我会错过一些明显的用法

这就是我所拥有的

require 'darksky'

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

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

forecast

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

1 个答案:

答案 0 :(得分:2)

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

puts forecast

或者,看看Ruby的对象漂亮打印机是否可以返回更有趣的东西:

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

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

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

JSON[returned_json] 

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

body = open(URL).read
puts JSON[body]