class ProPublica

Attributes

api_key[RW]

Public Class Methods

new(api_key) click to toggle source
# File lib/propublica.rb, line 7
def initialize(api_key)
 @api_key = api_key
end

Public Instance Methods

about() click to toggle source
# File lib/propublica.rb, line 11
def about
    puts "Hello! This is a Ruby wrapper for the ProPublica API.
    Try getting starting by seeing current senators for California, for example:
    'sens = client.get_senate_members(115).select{ |sen| sen[:state] == 'CA'}'"
    return self.get_senate_members(115).select{ |sen| sen[:state] == 'CA'}
end
config(api_key) click to toggle source
# File lib/propublica.rb, line 18
def config(api_key)
  @api_key = api_key
end
get_house_members(congress_number) click to toggle source

TO-DO: Be able to select and retrieve all desired information keys (e.g., twitter_account).

# File lib/propublica.rb, line 68
def get_house_members(congress_number)
 if response = self.get_response_from_API(congress_number,"house")
   raw_house_members_data = JSON.parse(response.body)
   house_members = raw_house_members_data["results"].first["members"]
   all_members = []

   house_members.each do |hash|
       member = {}
       member[:first_name] = hash["first_name"]
       member[:last_name] = hash["last_name"]
       member[:link] = hash["api_uri"]
       member[:party] = hash["party"]
       member[:state] = hash["state"]
       member[:next_election] = hash["next_election"]
       member[:twitter_account] = hash["twitter_account"]
       all_members << member
     end
   return all_members
  else
    return "Please configure your API key."
  end
end
get_member(congressional_id) click to toggle source
# File lib/propublica.rb, line 91
def get_member(congressional_id)

  if @api_key != nil && @api_key.length > 10 # To-Do: Add validation.
     uri = URI.parse("https://api.propublica.org/congress/v1/members/#{congressional_id}.json")

     request = Net::HTTP::Get.new(uri)
     request["X-Api-Key"] = @api_key
     req_options = {
       use_ssl: uri.scheme == "https",
     }

     response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
       http.request(request)
     end

     raw_member_data = JSON.parse(response.body)
     return raw_member_data["results"].first
 else
   puts "Please configure your API key."
   return false
 end
end
get_response_from_API(congress, chamber) click to toggle source
# File lib/propublica.rb, line 22
def get_response_from_API(congress, chamber)

  if @api_key != nil && @api_key.length > 10 # To-Do: Add validation.
     uri = URI.parse("https://api.propublica.org/congress/v1/#{congress}/#{chamber}/members.json")

     request = Net::HTTP::Get.new(uri)
     request["X-Api-Key"] = @api_key
     req_options = {
       use_ssl: uri.scheme == "https",
     }

     response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
       http.request(request)
     end
     return response
 else
   puts "Please configure your API key."
   return false
 end
end
get_senate_members(congress_number) click to toggle source

TO-DO: Be able to select and retrieve all desired information keys (e.g., twitter_account).

# File lib/propublica.rb, line 44
def get_senate_members(congress_number)
   if response = self.get_response_from_API(congress_number,"senate")
     raw_senate_members_data = JSON.parse(response.body)
     senate_members = raw_senate_members_data["results"].first["members"]
     all_members = []

     senate_members.each do |hash|
       member = {}
       member[:first_name] = hash["first_name"]
       member[:last_name] = hash["last_name"]
       member[:link] = hash["api_uri"]
       member[:party] = hash["party"]
       member[:state] = hash["state"]
       member[:next_election] = hash["next_election"]
       member[:twitter_account] = hash["twitter_account"]
       all_members << member
     end
     return all_members
   else
   return "Please configure your API key."
   end
 end