2013-11-08 2 views
0

Я довольно новичок в работе с Ruby, особенно с API, но я пытался заставить Darksky API работать, но я боюсь, что мне не хватает чего-то очевидного с тем, как я использую Это.Работа с Ruby и APIs

Вот что у меня есть

require 'darksky' 

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

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

forecast 

При запуске из командной строки ничего не происходит. Что я здесь делаю неправильно?

+0

Вы зарегистрировались и получили свой ключ API? – shiva

+0

Да. Даже когда вводится ключ API, он просто не возвращает никаких данных. Также установлен Gem. –

+0

Что вы проверили? Ваш код выглядит нормально. Работает ли ваш ключ API и создает действительный объект «darksky»? Вы знаете, есть ли у них глобальное покрытие погодой, так как вы просите Китай? А если вы попробуете что-то вроде darkky.interesting? – HM1

ответ

2

Просто используя forecast ничего не собирается делать. Вы должны использовать puts как минимум:

puts forecast 

Или увидеть, если объект довольно-принтер в Ruby может вернуть что-то более интересное:

require 'pp' 
pp forecast 

копания в дальнейшем, я думаю, что их API Безразлично Не работай. На основе их примеров, используя действительный ключ и их образцы местоположения, а также местоположения со своего исходного сайта Forecast.io, также возвращает нуль.

Использование интерфейса REST непосредственно с сайта Forecast.io возвращает JSON. JSON очень прост в работе с Ruby, так что это хороший путь.

Вот код для тестирования API и REST интерфейс Forecast.io в:

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, что Alcatraz по данным сайта Forecast.io. Также обратите внимание, что вывод body представляет собой строку JSON.

Pass возвращаемый JSON к Руби JSON класса, как:

JSON[returned_json] 

, чтобы он разобран обратно в Руби Hash. Используя OpenURI (потому что он поставляется с Ruby) вместо HTTParty, а передача его в JSON для синтаксического анализа выглядит так:

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

Когда я использую 'С. forecast' возвращает ' nil' Когда я использую 'ставит forecast' он ничего не возвращает Я изменил мои координаты на те, которые используются в данном примере, так они должны работать, но не делать этого. –

+0

Итак, теоретически мой код должен сработать? Мне нужно потратить некоторое время, чтобы переварить ваш пример кода, но спасибо за его предоставление. Это оценено. –

+0

Нет, ваш код не будет работать из моих тестов, но это не ваша вина. Я думаю, что darksky API нарушен, потому что, используя их примеры, я получаю нулевые значения, как и вы. Использование одного и того же местоположения и подключение к Forecast.io отлично работают, поэтому я бы сказал, чтобы пропустить API и перейти к исходному коду. –

Смежные вопросы