ProPublica 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/propublica.rb +115 -0
  3. metadata +44 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b7e0c1337b7417cb74d3b20087e563184b35b412
4
+ data.tar.gz: c9b4250d7f6be4ac131fcd900ed60a66bf1b778b
5
+ SHA512:
6
+ metadata.gz: 16640e25f8c6900201ecc08d24fe370a0932377f18116fe5c7c17383668f6820f5369c17b8c6992ca2d698f5055991a528f6814cb854d0be20b6ed27b5b2a246
7
+ data.tar.gz: a30f92ba6995250b8573ced350471170a031a81ce4d14b725cc3de887cf5e0afd4721f5f64b78f49d8eec9c307f3020ebe7ba3b0875fa6593aa85eea9b9fd9b0
@@ -0,0 +1,115 @@
1
+ class ProPublica
2
+ require 'net/http'
3
+ require 'json'
4
+
5
+ attr_accessor :api_key
6
+
7
+ def initialize(api_key)
8
+ @api_key = api_key
9
+ end
10
+
11
+ def about
12
+ puts "Hello! This is a Ruby wrapper for the ProPublica API.\n" +
13
+ " Please get started by entering your API KEY in a new ProPublica instance creation (e.g., client = ProPublica.new(YOUR_KEY_HERE))\n" +
14
+ "Good luck, citizen!"
15
+ end
16
+
17
+ def config(api_key)
18
+ @api_key = api_key
19
+ end
20
+
21
+ def get_response_from_API(congress, chamber)
22
+
23
+ if @api_key != nil && @api_key.length > 10 # To-Do: Add validation.
24
+ uri = URI.parse("https://api.propublica.org/congress/v1/#{congress}/#{chamber}/members.json")
25
+
26
+ request = Net::HTTP::Get.new(uri)
27
+ request["X-Api-Key"] = @api_key
28
+ req_options = {
29
+ use_ssl: uri.scheme == "https",
30
+ }
31
+
32
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
33
+ http.request(request)
34
+ end
35
+ return response
36
+ else
37
+ puts "Please configure your API key."
38
+ return false
39
+ end
40
+ end
41
+
42
+ def get_senate_members(congress_number)
43
+ # Returns an array of senate member hash objects.
44
+ # TO-DO: Be able to select and retrieve all desired information keys (e.g., twitter_account).
45
+ if self.get_response_from_API(congress_number,"senate")
46
+ raw_senate_members_data = JSON.parse(self.get_response_from_API(congress_number,"senate").body)
47
+ senate_members = raw_senate_members_data["results"].first["members"]
48
+ all_members = []
49
+
50
+ senate_members.each do |hash|
51
+ member = {}
52
+ member[:first_name] = hash["first_name"]
53
+ member[:last_name] = hash["last_name"]
54
+ member[:link] = hash["api_uri"]
55
+ member[:party] = hash["party"]
56
+ member[:state] = hash["state"]
57
+ member[:next_election] = hash["next_election"]
58
+ member[:twitter_account] = hash["twitter_account"]
59
+ all_members << member
60
+ end
61
+ return all_members
62
+ else
63
+ return "Please configure your API key."
64
+ end
65
+ end
66
+
67
+ def get_house_members(congress_number)
68
+ # Returns an array of house member hash objects.
69
+ # TO-DO: Be able to select and retrieve all desired information keys (e.g., twitter_account).
70
+ if self.get_response_from_API(congress_number,"house")
71
+ raw_house_members_data = JSON.parse(self.get_response_from_API(congress_number,"house").body)
72
+ house_members = raw_house_members_data["results"].first["members"]
73
+ all_members = []
74
+
75
+ house_members.each do |hash|
76
+ member = {}
77
+ member[:first_name] = hash["first_name"]
78
+ member[:last_name] = hash["last_name"]
79
+ member[:link] = hash["api_uri"]
80
+ member[:party] = hash["party"]
81
+ member[:state] = hash["state"]
82
+ member[:next_election] = hash["next_election"]
83
+ member[:twitter_account] = hash["twitter_account"]
84
+ all_members << member
85
+ end
86
+ return all_members
87
+ else
88
+ return "Please configure your API key."
89
+ end
90
+ end
91
+
92
+ def get_member(congressional_id)
93
+
94
+ if @api_key != nil && @api_key.length > 10 # To-Do: Add validation.
95
+ uri = URI.parse("https://api.propublica.org/congress/v1/members/#{congressional_id}.json")
96
+
97
+ request = Net::HTTP::Get.new(uri)
98
+ request["X-Api-Key"] = @api_key
99
+ req_options = {
100
+ use_ssl: uri.scheme == "https",
101
+ }
102
+
103
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
104
+ http.request(request)
105
+ end
106
+
107
+ raw_member_data = JSON.parse(response.body)
108
+ return raw_member_data["results"].first # NOTE: This is idiosyncratic per endpoint structure.
109
+ else
110
+ puts "Please configure your API key."
111
+ return false
112
+ end
113
+ end
114
+
115
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ProPublica
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ platform: ruby
6
+ authors:
7
+ - O. A. Malik
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-07-21 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A Ruby wrapper for the ProPublica Congress API.
14
+ email: oam@cal.berkeley.edu
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/propublica.rb
20
+ homepage: https://github.com/omarcodex/propublica-gem
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.6.11
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: ProPublica Gem
44
+ test_files: []