如何在Ruby上使用Xively API库?

时间:2013-09-11 05:09:35

标签: ruby xively

我很想从ruby上传一些数据到xively,我确实安装了所有的宝石,这个测试代码运行正常,但我的设备的xively图表没有任何变化。

这个小代码是从一个更好的代码片段中分离出来的,并且使用php编写的接口将数据发布到我的服务器,但现在我想用xively来记录数据。

我确实从此代码,API_KEY,Feed编号和Feed名称中删除了我的个人数据。

#!/usr/bin/ruby

require 'rubygems'
require 'json'
require 'xively-rb'

##Creating the xively client instance
API_KEY = "MY_API_KEY_WAS_HERE"
client = Xively::Client.new(API_KEY)

#on an endless loop
while true

  #n is a random float between 0 y 1
  n = rand()

  ##Creating datapoint and sendig it to xively
  puts "Creating datapoint "+Time.now.to_s+", "+n.to_s+" and sending it to xively"

  datapoint = Xively::Datapoint.new(:at => Time.now, :value => n)

  client.post('/api/v2/feeds/[number]/datastreams/[name]', :body => {:datapoints => [datapoint]}.to_json)

end

获得一个关于如何使用该库的示例会很好,我没有找到任何简洁的例子。

(有可能在代码中找到一些愚蠢的错误,如果是这样,那就没关系了,因为我现在正在学习红宝石,如果它不是关键,只是简单地指出它不要去offtopic,我会很乐意研究和学习后来)

我真的很期待一些答案,所以提前谢谢。

2 个答案:

答案 0 :(得分:2)

我找到了可以帮助你谈论api的链接

https://github.com/xively/xively-rb/wiki/Talking-to-the-REST-API

你可以使用

client = Xively::Client.new(YOUR_API_KEY)
response = client.post('/v2/feeds.json', :body => feed.to_json)
puts response.headers['location'] # Will give us the location of the Xively feed including    the ID
=> "http://api.xively.com/v2/feeds/SOMEID"

创建数据点

数据点创建端点采用数据点数组

  datapoint = Xively::Datapoint.new(:at => Time.now, :value => "25")
  client.post('/v2/feeds/504/datastreams/temperature/datapoints', :body => {:datapoints => [datapoint]}.to_json)

答案 1 :(得分:1)

我收到了一个同学合作的解决方案,它是关于Cosm的帖子,现在是xively的beta版,以前也是pachube。

我们大约两周时间寻找这样的事情:

afulki.net more-on-ruby-and-cosm

#!/usr/bin/ruby

require 'xively-rb'
require 'json'
require 'rubygems'

class XivelyConnector
  API_KEY = 'MY_API_KEY_HARD-CODED_HERE'

  def initialize( xively_feed_id )
    @feed_id = xively_feed_id

    @xively_response = Xively::Client.get("/v2/feeds/#{@feed_id}.json", :headers => {"X-ApiKey" => API_KEY})
  end

  def post_polucion( sensor, polucion_en_mgxm3 )
    return unless has_sensor? sensor

    post_path          = "/v2/feeds/#{@feed_id}/datastreams/#{sensor}/datapoints"
    datapoint          = Xively::Datapoint.new(:at => Time.now, :value => polucion_en_mgxm3.to_s )
    response           = Xively::Client.post(post_path,
      :headers => {"X-ApiKey" => API_KEY},
      :body    => {:datapoints => [datapoint]}.to_json)
  end

  def has_sensor?( sensor )
    @xively_response["datastreams"].index { |ds| ds["id"] == sensor }
  end
end

使用该课程:

#!/usr/bin/ruby

require 'rubygems'
require 'json' 
require 'xively-rb'
require_relative 'XivelyConnector'

xively_connector = XivelyConnector.new( MY_FEED_ID_HERE )

while true
n = rand()
xively_connector.post_polucion 'Sensor-Asdf', n

sleep 1

end