gnugeek-congredi 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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>