Ruby on rails 使用Ruby 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对象集合的子集 比如说。我希望能够提取出一系列的对象,这些对象具有行业和

我正在做一个项目,我从阳光基金会的影响力探索者API中获取信息,展示哪些行业为你所在地区的政客提供了最多的资金。这是一个我在实践中学习的个人项目。幸运的是,有人已经创造了一个很棒的Ruby宝石,名为“影响力探索者”。我的问题是,我对从API请求JSON对象有点陌生。我不知道我是否需要用叉子来改变这块宝石以满足我的需要。我有点困惑的原因是,在gem方法中,JSON端点已经设置好了,而我所做的似乎需要一个不同的端点,它是JSON对象集合的子集

比如说。我希望能够提取出一系列的对象,这些对象具有行业和他们捐赠给特定候选人的金额。我可以在API框架中很好地做到这一点。然而,当我使用gem时,我会出错,我想可能是gem。我只是不确定,因为我不知道这件事

API调用示例如下:

 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数据。它添加了一些代码,但现在我需要很快完成一个基本版本,这样就可以了。我可能会在将来使用它,然后添加功能。再次感谢!