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.
- checksums.yaml +7 -0
- data/lib/propublica.rb +115 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -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
|
data/lib/propublica.rb
ADDED
@@ -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: []
|