gnugeek-congredi 0.0.3

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.
data/History.txt ADDED
@@ -0,0 +1,11 @@
1
+ === 0.0.1 / 2009-01-11
2
+
3
+ * Release
4
+
5
+ === 0.0.2 / 2009-01-12
6
+
7
+ * Minor Bug Fixes
8
+
9
+ === 0.0.3 / 2009-01-13
10
+
11
+ * Bumping version number for github gem
data/README.rdoc ADDED
@@ -0,0 +1,105 @@
1
+ = congredi
2
+
3
+ * http://github.com/gnugeek/congredi/tree/master
4
+
5
+ == DESCRIPTION:
6
+
7
+ Ruby interface to the New York Times Congress API.
8
+ ( http://developer.nytimes.com/docs/congress_api )
9
+
10
+ == FEATURES/PROBLEMS:
11
+
12
+ * Fetch roll-call votes by congress, chamber, session, and roll-call
13
+ * Fetch members of congress by congress and chamber
14
+ * Fetch voting record by member of congress
15
+ * Fetch biographical data by member of congress
16
+
17
+ == SYNOPSIS:
18
+
19
+ require 'congredi'
20
+
21
+ true
22
+
23
+ m = Congredi::Members.new({:congress => 111, :chamber => 'senate'})
24
+
25
+ member = m.members.first
26
+
27
+ member.name
28
+
29
+ "Daniel Akaka"
30
+
31
+ member.member_id
32
+
33
+ "A000069"
34
+
35
+ bio = Congredi::Bio.new({:member_id => member.member_id})
36
+
37
+ bio.date_of_birth
38
+
39
+ "1924-09-11"
40
+
41
+ votes = Congredi::Votes.new({:member_id => member.member_id})
42
+
43
+ vote = votes.votes.first
44
+
45
+ vote.position
46
+
47
+ "Yes"
48
+
49
+ vote.roll_call
50
+
51
+ "215"
52
+
53
+ rc = Congredi::RollCall.new({:congress => vote.congress, :chamber => vote.chamber, :session => vote.session, :rollCall => vote.roll_call})
54
+
55
+ rc.bill_number
56
+
57
+ "H.R.7005"
58
+
59
+ rc.description
60
+
61
+ "Motion to Invoke Cloture on the Motion to Proceed to Consider H.R. 7005.; Alternative Minimum Tax Relief Act of 2008"
62
+
63
+ rc.democratic_majority_position
64
+
65
+ "Yes"
66
+
67
+ rc.republican_yes
68
+
69
+ "10"
70
+
71
+ == REQUIREMENTS:
72
+
73
+ * hpricot gem
74
+ * API Key from NYT
75
+
76
+ == INSTALL:
77
+
78
+ * gem build congredi.gemspec
79
+ * sudo gem install congredi-X.X.X.gem
80
+ * edit lib/congressapi/congredi.rb and add in your API key
81
+
82
+ == LICENSE:
83
+
84
+ (The MIT License)
85
+
86
+ Copyright (c) 2009 Brian Knox
87
+
88
+ Permission is hereby granted, free of charge, to any person obtaining
89
+ a copy of this software and associated documentation files (the
90
+ 'Software'), to deal in the Software without restriction, including
91
+ without limitation the rights to use, copy, modify, merge, publish,
92
+ distribute, sublicense, and/or sell copies of the Software, and to
93
+ permit persons to whom the Software is furnished to do so, subject to
94
+ the following conditions:
95
+
96
+ The above copyright notice and this permission notice shall be
97
+ included in all copies or substantial portions of the Software.
98
+
99
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
100
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
101
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
102
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
103
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
104
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
105
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'fileutils'
4
+
5
+ Rake::TestTask.new('test') do |t|
6
+ t.libs << 'test'
7
+ t.pattern = 'test/test_*.rb'
8
+ t.verbose = true
9
+ end
data/congredi.gemspec ADDED
@@ -0,0 +1,39 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "congredi"
3
+ s.version = "0.0.3"
4
+ s.date = "2009-01-11"
5
+ s.summary = "Interface to U.S. Political Information"
6
+ s.email = "gnutse@gmail.com"
7
+ s.homepage = "http://github.com/gnugeek/congredi"
8
+ s.description = "Congredi is a Ruby Library for interfacing with various sources of data on the U.S. Congress"
9
+ s.has_rdoc = true
10
+ s.authors = ["Brian Knox"]
11
+ s.files = ["History.txt",
12
+ "README.rdoc",
13
+ "Rakefile",
14
+ "congredi.gemspec",
15
+ "History.txt",
16
+ "lib/congredi.rb",
17
+ "lib/congredi/bio.rb",
18
+ "lib/congredi/role.rb",
19
+ "lib/congredi/members.rb",
20
+ "lib/congredi/member.rb",
21
+ "lib/congredi/roll_call.rb",
22
+ "lib/congredi/votes.rb",
23
+ "test/helper.rb",
24
+ "test/test_bio.rb",
25
+ "test/test_members.rb",
26
+ "test/test_roll_call.rb",
27
+ "test/test_votes.rb",
28
+ "test/responses/bio.xml",
29
+ "test/responses/members.xml",
30
+ "test/responses/roll_call.xml",
31
+ "test/responses/votes.xml"]
32
+ s.test_files = ["test/test_bio.rb",
33
+ "test/test_members.rb",
34
+ "test/test_roll_call.rb",
35
+ "test/test_votes.rb"]
36
+ s.rdoc_options = ["--main", "README.rdoc"]
37
+ s.extra_rdoc_files = ["History.txt", "README.rdoc"]
38
+ s.add_dependency("hpricot", ["> 0.0.0"])
39
+ end
data/lib/congredi.rb ADDED
@@ -0,0 +1,14 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ APIKEY = ""
5
+
6
+ require 'rubygems'
7
+ require 'open-uri'
8
+ require 'hpricot'
9
+ require 'congredi/bio'
10
+ require 'congredi/members'
11
+ require 'congredi/member'
12
+ require 'congredi/roll_call'
13
+ require 'congredi/votes'
14
+ require 'congredi/role'
@@ -0,0 +1,29 @@
1
+ module Congredi
2
+
3
+ class Bio
4
+ attr_reader :member_id, :name, :date_of_birth, :gender, :url, :govtrack_id, :roles
5
+
6
+ def initialize(url_or_params)
7
+
8
+ if url_or_params.class == Hash
9
+ @url = "http://api.nytimes.com/svc/politics/v2/us/legislative/congress/members/#{url_or_params[:member_id]}?api-key=#{APIKEY}"
10
+ elsif url_or_params.class == String
11
+ @url = url_or_params
12
+ end
13
+
14
+ @roles = []
15
+ @doc = Hpricot.parse(open(@url))
16
+ @name = @doc.search('//member/name').first.inner_html
17
+ @date_of_birth = @doc.search('//member/date_of_birth').first.inner_html
18
+ @gender = @doc.search('//member/gender').first.inner_html
19
+ @url = @doc.search('//member/url').first.inner_html
20
+ @govtrack_id = @doc.search('//member/govtrack_id').first.inner_html
21
+
22
+ @doc.search('member/roles/role').each do |element|
23
+ @roles.push(Congredi::Role.new(element))
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,18 @@
1
+ module Congredi
2
+
3
+ class Member
4
+ attr_reader :member_id, :name, :party, :state
5
+
6
+ def initialize(element)
7
+ @member_id = element.search('id').inner_html
8
+ @name = element.search('name').inner_html
9
+ @party = element.search('party').inner_html
10
+ @state = element.search('state').inner_html
11
+ end
12
+
13
+ def bio
14
+ @bio ||= Congredi::Bio.new({:member_id => @member_id})
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,21 @@
1
+ module Congredi
2
+
3
+ class Members
4
+ attr_reader :members
5
+
6
+ def initialize(url_or_params)
7
+ if url_or_params.class == String
8
+ @url = url_or_params
9
+ elsif url_or_params.class == Hash
10
+ @url = "http://api.nytimes.com/svc/politics/v2/us/legislative/congress/#{url_or_params[:congress]}/#{url_or_params[:chamber]}/members?api-key=#{APIKEY}"
11
+ end
12
+
13
+ @members = []
14
+ @doc = Hpricot.parse(open(@url))
15
+ @doc.search('member').each do |element|
16
+ @members.push(Congredi::Member.new(element))
17
+ end
18
+ end
19
+ end
20
+
21
+ end
@@ -0,0 +1,17 @@
1
+ module Congredi
2
+
3
+ class Role
4
+ attr_reader :congress, :chamber, :title, :state, :party, :start_date, :end_date
5
+
6
+ def initialize(element)
7
+ @congress = element.search('congress').inner_html
8
+ @chamber = element.search('chamber').inner_html
9
+ @title = element.search('title').inner_html
10
+ @state = element.search('state').inner_html
11
+ @party = element.search('party').inner_html
12
+ @start_date = element.search('start_date').inner_html
13
+ @end_date = element.search('end_date').inner_html
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,46 @@
1
+ module Congredi
2
+
3
+ class RollCall
4
+ attr_reader :d_majority_position, :d_no, :d_yes, :d_present, :d_not_voting,
5
+ :r_majority_position, :r_no, :r_yes, :r_present, :r_not_voting, :i_no,
6
+ :i_yes, :i_present, :i_not_voting,
7
+ :result, :time, :roll_call, :congress, :date, :bill_number,
8
+ :description, :question
9
+
10
+ def initialize(url_or_params)
11
+
12
+ if url_or_params.class == String
13
+ @url = url_or_params
14
+ elsif url_or_params.class == Hash
15
+ @url = "http://api.nytimes.com/svc/politics/v2/us/legislative/congress/#{url_or_params[:congress]}/#{url_or_params[:chamber]}/sessions/#{url_or_params[:session]}/votes/#{url_or_params[:roll_call]}?api-key=#{APIKEY}"
16
+ end
17
+
18
+ @doc = Hpricot.parse(open(@url))
19
+
20
+ @d_majority_position = @doc.search('democratic/majority_position').inner_html
21
+ @d_no = @doc.search('democratic/no').inner_html
22
+ @d_yes = @doc.search('democratic/yes').inner_html
23
+ @d_present = @doc.search('democratic/present').inner_html
24
+ @d_not_voting = @doc.search('democratic/not_voting').inner_html
25
+ @r_majority_position = @doc.search('republican/majority_position').inner_html
26
+ @r_no = @doc.search('republican/no').inner_html
27
+ @r_yes = @doc.search('republican/yes').inner_html
28
+ @r_present = @doc.search('republican/present').inner_html
29
+ @r_not_voting = @doc.search('republican/not_voting').inner_html
30
+ @i_no = @doc.search('independent/no').inner_html
31
+ @i_yes = @doc.search('independent/yes').inner_html
32
+ @i_present = @doc.search('independent/present').inner_html
33
+ @i_not_voting = @doc.search('independent/not_voting').inner_html
34
+ @result = @doc.search('result').inner_html
35
+ @time = @doc.search('time').inner_html
36
+ @roll_call = @doc.search('roll_call').inner_html
37
+ @congress = @doc.search('congress').inner_html
38
+ @date = @doc.search('date').inner_html
39
+ @bill_number = @doc.search('bill_number').inner_html
40
+ @description = @doc.search('description').inner_html
41
+ @question = @doc.search('question').inner_html
42
+
43
+ end
44
+ end
45
+
46
+ end
@@ -0,0 +1,36 @@
1
+ module Congredi
2
+
3
+ class Vote
4
+ attr_reader :date, :time, :position, :chamber, :congress, :session, :roll_call
5
+
6
+ def initialize(element)
7
+ @date = element.search('date').inner_html
8
+ @time = element.search('time').inner_html
9
+ @position = element.search('position').inner_html
10
+ @chamber = element.search('chamber').inner_html
11
+ @congress = element.search('congress').inner_html
12
+ @session = element.search('session').inner_html
13
+ @roll_call = element.search('roll_call').inner_html
14
+ end
15
+ end
16
+
17
+ class Votes
18
+ attr_reader :votes
19
+
20
+ def initialize(url_or_params)
21
+ if url_or_params.class == String
22
+ @url = url_or_params
23
+ elsif url_or_params.class == Hash
24
+ @url = "http://api.nytimes.com/svc/politics/v2/us/legislative/congress/members/#{url_or_params[:member_id]}/votes?api-key=#{APIKEY}"
25
+ end
26
+
27
+ @votes = []
28
+ @doc = Hpricot.parse(open(@url))
29
+ @doc.search('vote').each do |element|
30
+ @votes.push(Congredi::Vote.new(element))
31
+ end
32
+
33
+ end
34
+ end
35
+
36
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,5 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+
3
+ require 'congredi'
4
+ require 'rubygems'
5
+ require 'expectations'
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0"?>
2
+ <result_set>
3
+ <status>OK</status>
4
+ <copyright>Copyright (c) 2009 The New York Times Company. All Rights Reserved.</copyright>
5
+ <results>
6
+ <member>
7
+ <id>C001041</id>
8
+ <name>Hillary Clinton</name>
9
+ <date_of_birth>1947-10-26</date_of_birth>
10
+ <gender>F</gender>
11
+ <url>http://clinton.senate.gov</url>
12
+ <govtrack_id>300022</govtrack_id>
13
+ <roles>
14
+ <role>
15
+ <congress>111</congress>
16
+ <chamber>Senate</chamber>
17
+ <title>Senator, 1st Class</title>
18
+ <state>NY</state>
19
+ <party>D</party>
20
+ <start_date>2009-01-06</start_date>
21
+ <end_date>2011-01-04</end_date>
22
+ </role>
23
+ <role>
24
+ <congress>110</congress>
25
+ <chamber>Senate</chamber>
26
+ <title>Senator, 1st Class</title>
27
+ <state>NY</state>
28
+ <party>D</party>
29
+ <start_date>2007-01-04</start_date>
30
+ <end_date>2009-01-03</end_date>
31
+ </role>
32
+ <role>
33
+ <congress>109</congress>
34
+ <chamber>Senate</chamber>
35
+ <title>Senator, 1st Class</title>
36
+ <state>NY</state>
37
+ <party>D</party>
38
+ <start_date>2005-01-04</start_date>
39
+ <end_date>2006-12-09</end_date>
40
+ </role>
41
+ <role>
42
+ <congress>108</congress>
43
+ <chamber>Senate</chamber>
44
+ <title>Senator, 1st Class</title>
45
+ <state>NY</state>
46
+ <party>D</party>
47
+ <start_date>2003-01-07</start_date>
48
+ <end_date>2004-12-08</end_date>
49
+ </role>
50
+ <role>
51
+ <congress>107</congress>
52
+ <chamber>Senate</chamber>
53
+ <title>Senator, 1st Class</title>
54
+ <state>NY</state>
55
+ <party>D</party>
56
+ <start_date>2001-01-03</start_date>
57
+ <end_date>2002-11-22</end_date>
58
+ </role>
59
+ </roles>
60
+ </member>
61
+ </results>
62
+ </result_set>
@@ -0,0 +1,625 @@
1
+ <?xml version="1.0"?>
2
+ <result_set>
3
+ <status>OK</status>
4
+ <copyright>Copyright (c) 2009 The New York Times Company. All Rights Reserved.</copyright>
5
+ <results>
6
+ <congress>110</congress>
7
+ <chamber>Senate</chamber>
8
+ <num_results>102</num_results>
9
+ <offset>0</offset>
10
+ <members>
11
+ <member>
12
+ <id>A000069</id>
13
+ <name>Daniel Akaka</name>
14
+ <party>D</party>
15
+ <state>HI</state>
16
+ </member>
17
+ <member>
18
+ <id>A000109</id>
19
+ <name>Wayne Allard</name>
20
+ <party>R</party>
21
+ <state>CO</state>
22
+ </member>
23
+ <member>
24
+ <id>A000360</id>
25
+ <name>Lamar Alexander</name>
26
+ <party>R</party>
27
+ <state>TN</state>
28
+ </member>
29
+ <member>
30
+ <id>B000243</id>
31
+ <name>Max Baucus</name>
32
+ <party>D</party>
33
+ <state>MT</state>
34
+ </member>
35
+ <member>
36
+ <id>B000382</id>
37
+ <name>Robert Bennett</name>
38
+ <party>R</party>
39
+ <state>UT</state>
40
+ </member>
41
+ <member>
42
+ <id>B000444</id>
43
+ <name>Joseph Biden</name>
44
+ <party>D</party>
45
+ <state>DE</state>
46
+ </member>
47
+ <member>
48
+ <id>B000468</id>
49
+ <name>Jeff Bingaman</name>
50
+ <party>D</party>
51
+ <state>NM</state>
52
+ </member>
53
+ <member>
54
+ <id>B000611</id>
55
+ <name>Christopher Bond</name>
56
+ <party>R</party>
57
+ <state>MO</state>
58
+ </member>
59
+ <member>
60
+ <id>B000711</id>
61
+ <name>Barbara Boxer</name>
62
+ <party>D</party>
63
+ <state>CA</state>
64
+ </member>
65
+ <member>
66
+ <id>B000944</id>
67
+ <name>Sherrod Brown</name>
68
+ <party>D</party>
69
+ <state>OH</state>
70
+ </member>
71
+ <member>
72
+ <id>B000953</id>
73
+ <name>Sam Brownback</name>
74
+ <party>R</party>
75
+ <state>KS</state>
76
+ </member>
77
+ <member>
78
+ <id>B001066</id>
79
+ <name>Jim Bunning</name>
80
+ <party>R</party>
81
+ <state>KY</state>
82
+ </member>
83
+ <member>
84
+ <id>B001135</id>
85
+ <name>Richard Burr</name>
86
+ <party>R</party>
87
+ <state>NC</state>
88
+ </member>
89
+ <member>
90
+ <id>B001210</id>
91
+ <name>Robert Byrd</name>
92
+ <party>D</party>
93
+ <state>WV</state>
94
+ </member>
95
+ <member>
96
+ <id>B001233</id>
97
+ <name>Evan Bayh</name>
98
+ <party>D</party>
99
+ <state>IN</state>
100
+ </member>
101
+ <member>
102
+ <id>B001261</id>
103
+ <name>John Barrasso</name>
104
+ <party>R</party>
105
+ <state>WY</state>
106
+ </member>
107
+ <member>
108
+ <id>C000127</id>
109
+ <name>Maria Cantwell</name>
110
+ <party>D</party>
111
+ <state>WA</state>
112
+ </member>
113
+ <member>
114
+ <id>C000141</id>
115
+ <name>Ben Cardin</name>
116
+ <party>D</party>
117
+ <state>MD</state>
118
+ </member>
119
+ <member>
120
+ <id>C000174</id>
121
+ <name>Thomas Carper</name>
122
+ <party>D</party>
123
+ <state>DE</state>
124
+ </member>
125
+ <member>
126
+ <id>C000286</id>
127
+ <name>Saxby Chambliss</name>
128
+ <party>R</party>
129
+ <state>GA</state>
130
+ </member>
131
+ <member>
132
+ <id>C000560</id>
133
+ <name>Tom Coburn</name>
134
+ <party>R</party>
135
+ <state>OK</state>
136
+ </member>
137
+ <member>
138
+ <id>C000567</id>
139
+ <name>Thad Cochran</name>
140
+ <party>R</party>
141
+ <state>MS</state>
142
+ </member>
143
+ <member>
144
+ <id>C000705</id>
145
+ <name>Kent Conrad</name>
146
+ <party>D</party>
147
+ <state>ND</state>
148
+ </member>
149
+ <member>
150
+ <id>C000858</id>
151
+ <name>Larry Craig</name>
152
+ <party>R</party>
153
+ <state>ID</state>
154
+ </member>
155
+ <member>
156
+ <id>C000880</id>
157
+ <name>Michael Crapo</name>
158
+ <party>R</party>
159
+ <state>ID</state>
160
+ </member>
161
+ <member>
162
+ <id>C001035</id>
163
+ <name>Susan Collins</name>
164
+ <party>R</party>
165
+ <state>ME</state>
166
+ </member>
167
+ <member>
168
+ <id>C001041</id>
169
+ <name>Hillary Clinton</name>
170
+ <party>D</party>
171
+ <state>NY</state>
172
+ </member>
173
+ <member>
174
+ <id>C001056</id>
175
+ <name>John Cornyn</name>
176
+ <party>R</party>
177
+ <state>TX</state>
178
+ </member>
179
+ <member>
180
+ <id>C001057</id>
181
+ <name>Norm Coleman</name>
182
+ <party>R</party>
183
+ <state>MN</state>
184
+ </member>
185
+ <member>
186
+ <id>C001070</id>
187
+ <name>Bob Casey Jr.</name>
188
+ <party>D</party>
189
+ <state>PA</state>
190
+ </member>
191
+ <member>
192
+ <id>C001071</id>
193
+ <name>Bob Corker</name>
194
+ <party>R</party>
195
+ <state>TN</state>
196
+ </member>
197
+ <member>
198
+ <id>D000388</id>
199
+ <name>Christopher Dodd</name>
200
+ <party>D</party>
201
+ <state>CT</state>
202
+ </member>
203
+ <member>
204
+ <id>D000407</id>
205
+ <name>Pete Domenici</name>
206
+ <party>R</party>
207
+ <state>NM</state>
208
+ </member>
209
+ <member>
210
+ <id>D000432</id>
211
+ <name>Byron Dorgan</name>
212
+ <party>D</party>
213
+ <state>ND</state>
214
+ </member>
215
+ <member>
216
+ <id>D000563</id>
217
+ <name>Richard Durbin</name>
218
+ <party>D</party>
219
+ <state>IL</state>
220
+ </member>
221
+ <member>
222
+ <id>D000595</id>
223
+ <name>Jim DeMint</name>
224
+ <party>R</party>
225
+ <state>SC</state>
226
+ </member>
227
+ <member>
228
+ <id>D000601</id>
229
+ <name>Elizabeth Dole</name>
230
+ <party>R</party>
231
+ <state>NC</state>
232
+ </member>
233
+ <member>
234
+ <id>E000194</id>
235
+ <name>John Ensign</name>
236
+ <party>R</party>
237
+ <state>NV</state>
238
+ </member>
239
+ <member>
240
+ <id>E000285</id>
241
+ <name>Michael Enzi</name>
242
+ <party>R</party>
243
+ <state>WY</state>
244
+ </member>
245
+ <member>
246
+ <id>F000061</id>
247
+ <name>Russell Feingold</name>
248
+ <party>D</party>
249
+ <state>WI</state>
250
+ </member>
251
+ <member>
252
+ <id>F000062</id>
253
+ <name>Dianne Feinstein</name>
254
+ <party>D</party>
255
+ <state>CA</state>
256
+ </member>
257
+ <member>
258
+ <id>G000359</id>
259
+ <name>Lindsey Graham</name>
260
+ <party>R</party>
261
+ <state>SC</state>
262
+ </member>
263
+ <member>
264
+ <id>G000386</id>
265
+ <name>Charles Grassley</name>
266
+ <party>R</party>
267
+ <state>IA</state>
268
+ </member>
269
+ <member>
270
+ <id>G000445</id>
271
+ <name>Judd Gregg</name>
272
+ <party>R</party>
273
+ <state>NH</state>
274
+ </member>
275
+ <member>
276
+ <id>H000206</id>
277
+ <name>Tom Harkin</name>
278
+ <party>D</party>
279
+ <state>IA</state>
280
+ </member>
281
+ <member>
282
+ <id>H000338</id>
283
+ <name>Orrin Hatch</name>
284
+ <party>R</party>
285
+ <state>UT</state>
286
+ </member>
287
+ <member>
288
+ <id>H001016</id>
289
+ <name>Kay Hutchison</name>
290
+ <party>R</party>
291
+ <state>TX</state>
292
+ </member>
293
+ <member>
294
+ <id>H001028</id>
295
+ <name>Chuck Hagel</name>
296
+ <party>R</party>
297
+ <state>NE</state>
298
+ </member>
299
+ <member>
300
+ <id>I000024</id>
301
+ <name>James Inhofe</name>
302
+ <party>R</party>
303
+ <state>OK</state>
304
+ </member>
305
+ <member>
306
+ <id>I000025</id>
307
+ <name>Daniel Inouye</name>
308
+ <party>D</party>
309
+ <state>HI</state>
310
+ </member>
311
+ <member>
312
+ <id>I000055</id>
313
+ <name>John Isakson</name>
314
+ <party>R</party>
315
+ <state>GA</state>
316
+ </member>
317
+ <member>
318
+ <id>J000177</id>
319
+ <name>Tim Johnson</name>
320
+ <party>D</party>
321
+ <state>SD</state>
322
+ </member>
323
+ <member>
324
+ <id>K000105</id>
325
+ <name>Edward M. Kennedy</name>
326
+ <party>D</party>
327
+ <state>MA</state>
328
+ </member>
329
+ <member>
330
+ <id>K000148</id>
331
+ <name>John Kerry</name>
332
+ <party>D</party>
333
+ <state>MA</state>
334
+ </member>
335
+ <member>
336
+ <id>K000305</id>
337
+ <name>Herbert Kohl</name>
338
+ <party>D</party>
339
+ <state>WI</state>
340
+ </member>
341
+ <member>
342
+ <id>K000352</id>
343
+ <name>Jon Kyl</name>
344
+ <party>R</party>
345
+ <state>AZ</state>
346
+ </member>
347
+ <member>
348
+ <id>K000367</id>
349
+ <name>Amy Klobuchar</name>
350
+ <party>D</party>
351
+ <state>MN</state>
352
+ </member>
353
+ <member>
354
+ <id>L000035</id>
355
+ <name>Blanche Lincoln</name>
356
+ <party>D</party>
357
+ <state>AR</state>
358
+ </member>
359
+ <member>
360
+ <id>L000123</id>
361
+ <name>Frank Lautenberg</name>
362
+ <party>D</party>
363
+ <state>NJ</state>
364
+ </member>
365
+ <member>
366
+ <id>L000174</id>
367
+ <name>Patrick Leahy</name>
368
+ <party>D</party>
369
+ <state>VT</state>
370
+ </member>
371
+ <member>
372
+ <id>L000261</id>
373
+ <name>Carl Levin</name>
374
+ <party>D</party>
375
+ <state>MI</state>
376
+ </member>
377
+ <member>
378
+ <id>L000304</id>
379
+ <name>Joseph I. Lieberman</name>
380
+ <party>ID</party>
381
+ <state>CT</state>
382
+ </member>
383
+ <member>
384
+ <id>L000447</id>
385
+ <name>Trent Lott</name>
386
+ <party>R</party>
387
+ <state>MS</state>
388
+ </member>
389
+ <member>
390
+ <id>L000504</id>
391
+ <name>Richard Lugar</name>
392
+ <party>R</party>
393
+ <state>IN</state>
394
+ </member>
395
+ <member>
396
+ <id>L000550</id>
397
+ <name>Mary Landrieu</name>
398
+ <party>D</party>
399
+ <state>LA</state>
400
+ </member>
401
+ <member>
402
+ <id>M000303</id>
403
+ <name>John McCain</name>
404
+ <party>R</party>
405
+ <state>AZ</state>
406
+ </member>
407
+ <member>
408
+ <id>M000355</id>
409
+ <name>Mitch McConnell</name>
410
+ <party>R</party>
411
+ <state>KY</state>
412
+ </member>
413
+ <member>
414
+ <id>M000639</id>
415
+ <name>Robert Menendez</name>
416
+ <party>D</party>
417
+ <state>NJ</state>
418
+ </member>
419
+ <member>
420
+ <id>M000702</id>
421
+ <name>Barbara Mikulski</name>
422
+ <party>D</party>
423
+ <state>MD</state>
424
+ </member>
425
+ <member>
426
+ <id>M001111</id>
427
+ <name>Patty Murray</name>
428
+ <party>D</party>
429
+ <state>WA</state>
430
+ </member>
431
+ <member>
432
+ <id>M001153</id>
433
+ <name>Lisa Murkowski</name>
434
+ <party>R</party>
435
+ <state>AK</state>
436
+ </member>
437
+ <member>
438
+ <id>M001162</id>
439
+ <name>Mel Martinez</name>
440
+ <party>R</party>
441
+ <state>FL</state>
442
+ </member>
443
+ <member>
444
+ <id>M001170</id>
445
+ <name>Claire McCaskill</name>
446
+ <party>D</party>
447
+ <state>MO</state>
448
+ </member>
449
+ <member>
450
+ <id>N000032</id>
451
+ <name>Bill Nelson</name>
452
+ <party>D</party>
453
+ <state>FL</state>
454
+ </member>
455
+ <member>
456
+ <id>N000180</id>
457
+ <name>Ben Nelson</name>
458
+ <party>D</party>
459
+ <state>NE</state>
460
+ </member>
461
+ <member>
462
+ <id>O000167</id>
463
+ <name>Barack Obama</name>
464
+ <party>D</party>
465
+ <state>IL</state>
466
+ </member>
467
+ <member>
468
+ <id>P000590</id>
469
+ <name>Mark Pryor</name>
470
+ <party>D</party>
471
+ <state>AR</state>
472
+ </member>
473
+ <member>
474
+ <id>R000122</id>
475
+ <name>Jack Reed</name>
476
+ <party>D</party>
477
+ <state>RI</state>
478
+ </member>
479
+ <member>
480
+ <id>R000146</id>
481
+ <name>Harry Reid</name>
482
+ <party>D</party>
483
+ <state>NV</state>
484
+ </member>
485
+ <member>
486
+ <id>R000307</id>
487
+ <name>Pat Roberts</name>
488
+ <party>R</party>
489
+ <state>KS</state>
490
+ </member>
491
+ <member>
492
+ <id>R000361</id>
493
+ <name>Jay Rockefeller</name>
494
+ <party>D</party>
495
+ <state>WV</state>
496
+ </member>
497
+ <member>
498
+ <id>S000033</id>
499
+ <name>Bernie Sanders</name>
500
+ <party>I</party>
501
+ <state>VT</state>
502
+ </member>
503
+ <member>
504
+ <id>S000148</id>
505
+ <name>Charles Schumer</name>
506
+ <party>D</party>
507
+ <state>NY</state>
508
+ </member>
509
+ <member>
510
+ <id>S000320</id>
511
+ <name>Richard Shelby</name>
512
+ <party>R</party>
513
+ <state>AL</state>
514
+ </member>
515
+ <member>
516
+ <id>S000663</id>
517
+ <name>Olympia Snowe</name>
518
+ <party>R</party>
519
+ <state>ME</state>
520
+ </member>
521
+ <member>
522
+ <id>S000709</id>
523
+ <name>Arlen Specter</name>
524
+ <party>R</party>
525
+ <state>PA</state>
526
+ </member>
527
+ <member>
528
+ <id>S000770</id>
529
+ <name>Debbie Stabenow</name>
530
+ <party>D</party>
531
+ <state>MI</state>
532
+ </member>
533
+ <member>
534
+ <id>S000888</id>
535
+ <name>Ted Stevens</name>
536
+ <party>R</party>
537
+ <state>AK</state>
538
+ </member>
539
+ <member>
540
+ <id>S001078</id>
541
+ <name>John Sununu</name>
542
+ <party>R</party>
543
+ <state>NH</state>
544
+ </member>
545
+ <member>
546
+ <id>S001141</id>
547
+ <name>Jeff Sessions</name>
548
+ <party>R</party>
549
+ <state>AL</state>
550
+ </member>
551
+ <member>
552
+ <id>S001142</id>
553
+ <name>Gordon Smith</name>
554
+ <party>R</party>
555
+ <state>OR</state>
556
+ </member>
557
+ <member>
558
+ <id>S001163</id>
559
+ <name>Ken Salazar</name>
560
+ <party>D</party>
561
+ <state>CO</state>
562
+ </member>
563
+ <member>
564
+ <id>T000162</id>
565
+ <name>Craig Thomas</name>
566
+ <party>R</party>
567
+ <state>WY</state>
568
+ </member>
569
+ <member>
570
+ <id>T000250</id>
571
+ <name>John Thune</name>
572
+ <party>R</party>
573
+ <state>SD</state>
574
+ </member>
575
+ <member>
576
+ <id>T000464</id>
577
+ <name>Jon Tester</name>
578
+ <party>D</party>
579
+ <state>MT</state>
580
+ </member>
581
+ <member>
582
+ <id>V000126</id>
583
+ <name>George Voinovich</name>
584
+ <party>R</party>
585
+ <state>OH</state>
586
+ </member>
587
+ <member>
588
+ <id>V000127</id>
589
+ <name>David Vitter</name>
590
+ <party>R</party>
591
+ <state>LA</state>
592
+ </member>
593
+ <member>
594
+ <id>W000154</id>
595
+ <name>John Warner</name>
596
+ <party>R</party>
597
+ <state>VA</state>
598
+ </member>
599
+ <member>
600
+ <id>W000437</id>
601
+ <name>Roger Wicker</name>
602
+ <party>R</party>
603
+ <state>MS</state>
604
+ </member>
605
+ <member>
606
+ <id>W000779</id>
607
+ <name>Ron Wyden</name>
608
+ <party>D</party>
609
+ <state>OR</state>
610
+ </member>
611
+ <member>
612
+ <id>W000802</id>
613
+ <name>Sheldon Whitehouse</name>
614
+ <party>D</party>
615
+ <state>RI</state>
616
+ </member>
617
+ <member>
618
+ <id>W000803</id>
619
+ <name>Jim Webb</name>
620
+ <party>D</party>
621
+ <state>VA</state>
622
+ </member>
623
+ </members>
624
+ </results>
625
+ </result_set>