Ruby on rails 使用Ruby Gem进行API查询时遇到问题。我怎样才能解决这个问题?
我正在做一个项目,我从阳光基金会的影响力探索者API中获取信息,展示哪些行业为你所在地区的政客提供了最多的资金。这是一个我在实践中学习的个人项目。幸运的是,有人已经创造了一个很棒的Ruby宝石,名为“影响力探索者”。我的问题是,我对从API请求JSON对象有点陌生。我不知道我是否需要用叉子来改变这块宝石以满足我的需要。我有点困惑的原因是,在gem方法中,JSON端点已经设置好了,而我所做的似乎需要一个不同的端点,它是JSON对象集合的子集 比如说。我希望能够提取出一系列的对象,这些对象具有行业和他们捐赠给特定候选人的金额。我可以在API框架中很好地做到这一点。然而,当我使用gem时,我会出错,我想可能是gem。我只是不确定,因为我不知道这件事 API调用示例如下:Ruby on rails 使用Ruby Gem进行API查询时遇到问题。我怎样才能解决这个问题?,ruby-on-rails,ruby,json,web-applications,Ruby On Rails,Ruby,Json,Web Applications,我正在做一个项目,我从阳光基金会的影响力探索者API中获取信息,展示哪些行业为你所在地区的政客提供了最多的资金。这是一个我在实践中学习的个人项目。幸运的是,有人已经创造了一个很棒的Ruby宝石,名为“影响力探索者”。我的问题是,我对从API请求JSON对象有点陌生。我不知道我是否需要用叉子来改变这块宝石以满足我的需要。我有点困惑的原因是,在gem方法中,JSON端点已经设置好了,而我所做的似乎需要一个不同的端点,它是JSON对象集合的子集 比如说。我希望能够提取出一系列的对象,这些对象具有行业和
transparencydata.com/api/1.0/aggregates/pol/f990d08287c34c389cfabe3cbf3dde99/contributors.json?cycle=2012&limit=10&apikey=b34a371adbb94d988029fec07141ed1d
骨料的gem方法为:
module InfluenceExplorer
class Aggregates
def initialize(options)
@data = InfluenceExplorer.request('aggregates.json', options)
end
end
end
调用方法是:
module InfluenceExplorer
def self.base_url
'http://transparencydata.com/api/1.0/'
end
def self.request(endpoint, options)
opts = options.merge('apikey' => InfluenceExplorer::Config.api_key)
url = base_url + endpoint + "?" + opts.to_query
# puts url
response = JSON.parse(RestClient.get(url).to_str).collect {|i| Hashie::Mash.new(i) }
response
end
end
class Hash
def to_query
self.map{|k,v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v)}"}.join("&")
end
end
Dir.glob(File.dirname(__FILE__) + '/influence_explorer/*.rb').each { |f| require f }
我是否需要创建新方法来专门调用聚合中的某些子类别,或者我只是做错了什么。感谢您提供的任何帮助
宝石:
API:对我来说,gem看起来像是作者所遇到问题的一次性解决方案或快速修复方案。该代码只有一个版本,文档也比较简单。没有覆盖测试。它没有完整的端点集,也没有处理关系数据或子类别请求的任何方法。我看不到gem中有任何方法可以让您的exampe API路由得到很好的包装,尽管您可以这样做:
results = InfluenceExplorer.request(
"aggregates/pol/#{id}/contributors.json",
options )
我不能代表作者说话,他可能非常平易近人,并且乐于花几个小时在网上谈论他的项目,或者他可能太忙了,无法处理去年开源工作带来的分心。总体而言,他似乎积极参与开源工作,但在过去一年中,他更关注node.js项目的工作,而不是Ruby/Rails
我认为你的选择是:
- 分叉此gem并添加所需的新路线
- 关于宝石上失踪的路线。作者可能愿意您提交一个添加您需要的功能的请求
你两者都可以。分叉gem,创建一个功能分支来添加您想要的功能,并在本地使用它来解决缺少功能的问题。如果您想分享您的工作,您可以返回fork并提出请求,将您的更改与主gem集成。非常感谢!实际上,我找到了一个解决方法,只需使用gem的方法直接请求API数据。它添加了一些代码,但现在我需要很快完成一个基本版本,这样就可以了。我可能会在将来使用它,然后添加功能。再次感谢!