Class: ProPublica

Inherits:
Object
  • Object
show all
Defined in:
lib/propublica.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key) ⇒ ProPublica

Returns a new instance of ProPublica.


7
8
9
# File 'lib/propublica.rb', line 7

def initialize(api_key)
 @api_key = api_key
end

Instance Attribute Details

#api_keyObject

Returns the value of attribute api_key.


5
6
7
# File 'lib/propublica.rb', line 5

def api_key
  @api_key
end

Instance Method Details

#aboutObject


11
12
13
14
15
16
# 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) ⇒ Object


18
19
20
# File 'lib/propublica.rb', line 18

def config(api_key)
  @api_key = api_key
end

#get_house_members(congress_number) ⇒ Object

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


68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 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) ⇒ Object


91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# 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) ⇒ Object


22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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) ⇒ Object

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


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 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