我很擅长使用Ruby,尤其是使用API,但我一直试图让Darksky API工作,但我担心我会错过一些明显的用法
这就是我所拥有的
require 'darksky'
darksky = Darksky::API.new('my api key')
forecast = darksky.forecast('34.0500', '118.2500')
forecast
当我从命令行运行它时没有任何反应。我在这里做错了什么?
答案 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]