使用Ruby Gem的API查询出现问题。我怎样才能解决这个问题?

时间:2014-06-17 04:22:27

标签: ruby-on-rails ruby json web-applications

我正在开展一个项目,我从阳光基金会的Influence Explorer API中提取哪些项目,以显示哪些行业为您所在地区的政客提供了最多的资金。这是一个我正在学习的个人项目。幸运的是,有人已经创建了一个名为'influence_explorer'的令人敬畏的Ruby Gem。我的问题是我从API请求JSON对象有点新鲜。我不知道是否需要分叉并改变这个宝石以满足我的需求。我有点困惑的原因是在gem方法中,JSON端点已经设置好了,而我正在做的事情似乎需要一个不同的端点,它是JSON对象集合的一个子集。

所以,例如。我希望能够提取具有行业的对象数组以及他们捐赠给特定候选人的金额。我可以在API框架中做到这一点。但是,当我使用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 }

我是否需要创建新方法来专门调用聚合中的某些子类别,或者我只是做错了什么。感谢您提供的任何帮助!!!!

宝石:https://github.com/ballantyne/influence_explorer API:http://tryit.sunlightfoundation.com/influenceexplorer

1 个答案:

答案 0 :(得分:1)

对我而言,宝石看起来像是针对作者所遇问题的一次性或快速修复。代码只有一个版本,文档有点轻松。没有覆盖测试。它没有完整的端点集,也没有处理关系数据或子类别请求的任何方法。我看不到gem中的任何方法可以为你提供类似于你的exampe API路径的好东西,尽管你可以这样做:

results = InfluenceExplorer.request(
  "aggregates/pol/#{id}/contributors.json",
  options )

我不能为作者说话,他可以非常平易近人,很高兴花时间在网上聊聊他的项目,或者他可能太忙于处理去年开源工作的干扰。他似乎对开源工作一般都很活跃,但去年更关注node.js项目的工作,而不是Ruby / Rails。

我认为你的选择是:

  • 分叉此宝石并添加您需要的新路线。

  • Raise an issue关于宝石上缺失的路线。作者可能适合您提交添加所需功能的拉取请求。

你可以做到这两点。分叉gem,创建一个功能分支,添加您想要的功能,并在本地使用它来解决您缺少功能的问题。如果您想分享您的工作,您可以回到分支并提出拉取请求,让您的更改与主宝石集成。