pilha 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/pilha.rb CHANGED
@@ -1,13 +1,16 @@
1
1
  path = File.expand_path(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
3
3
 
4
- require 'open-uri'
4
+ require 'zlib'
5
5
  require 'json'
6
+ require 'open-uri'
6
7
  require 'forwardable'
7
8
 
8
9
  require 'pilha/stack_overflow/statistics'
9
10
  require 'pilha/stack_overflow/badge'
10
11
  require 'pilha/stack_overflow/user'
12
+ require 'pilha/stack_overflow/answer'
13
+ require 'pilha/stack_overflow/comment'
11
14
 
12
15
  module StackExchange
13
16
 
@@ -22,10 +25,11 @@ module StackExchange
22
25
 
23
26
  class << self
24
27
  def config &block
25
- options = {}
28
+ options = OpenStruct.new
26
29
  yield options if block_given?
27
- client = new(options)
28
- include_client(client, Badge, Statistics, User)
30
+
31
+ client = Client.new(options)
32
+ include_client(client, Badge, Statistics, User, Answer, Comment)
29
33
  end
30
34
 
31
35
  def include_client(client, *classes)
@@ -35,10 +39,10 @@ module StackExchange
35
39
  end
36
40
  end
37
41
 
38
- def initialize(options = {})
39
- @url = normalize(options[:url] || URL )
40
- @api_version = options[:api_version] || options[:version] || API_VERSION
41
- @api_key = options[:api_key] || options[:key]
42
+ def initialize(options = OpenStruct.new)
43
+ @url = normalize(options.url || URL )
44
+ @api_version = options.api_version || API_VERSION
45
+ @api_key = options.api_key
42
46
  end
43
47
 
44
48
  def api_method_path(pattern, options = {})
@@ -48,7 +52,6 @@ module StackExchange
48
52
  parts.each do |part|
49
53
  key = part.sub(':', '').intern
50
54
  pattern.sub!(part, options[key].to_s)
51
- options.delete key
52
55
  end
53
56
 
54
57
  pattern
@@ -60,7 +63,7 @@ module StackExchange
60
63
  end
61
64
 
62
65
  def get(url)
63
- stream = open(url) { |stream| stream.read }
66
+ stream = open(url) { |stream| Zlib::GzipReader.new(stream).read }
64
67
  JSON.parse stream
65
68
  end
66
69
 
@@ -68,6 +71,10 @@ module StackExchange
68
71
  url + api_version
69
72
  end
70
73
 
74
+ def request(path, options)
75
+ get(api_method_url(path, options))
76
+ end
77
+
71
78
  private
72
79
  def key?
73
80
  !!@api_key
@@ -76,6 +83,7 @@ module StackExchange
76
83
  def query_string(options)
77
84
  params = options[:query]
78
85
  if params
86
+ params = params.sort_by { |k, v| k.to_s }
79
87
  '?' + params.inject([]) do |arr, (key, value)|
80
88
  arr << "#{key}=#{value}"
81
89
  end.join('&')
@@ -0,0 +1,69 @@
1
+ module StackExchange
2
+ module StackOverflow
3
+ class Answer
4
+ extend Forwardable
5
+
6
+ def_delegators :@struct, :answer_id, :accepted, :answer_comments_url, :question_id,
7
+ :owner, :creation_date, :last_activity_date, :up_vote_count, :down_vote_count,
8
+ :view_count, :score, :community_owned, :title, :comments
9
+
10
+ class << self
11
+ attr_reader :client
12
+
13
+ def find_by_id(id, options = {})
14
+ options.merge! :id => id
15
+ response = client.request('/answers/:id', options)
16
+ OpenStruct.new(parse response)
17
+ end
18
+
19
+ def find_by_user_id(id, options = {})
20
+ options.merge! :id => id
21
+ response = client.request('/users/:id/answers', options)
22
+ OpenStruct.new(parse response)
23
+ end
24
+
25
+ private
26
+ def setup_associations!(response, hash)
27
+ setup_comments! hash
28
+ setup_owner! hash
29
+ end
30
+
31
+ def setup_comments!(hash)
32
+ if hash['comments']
33
+ hash['comments'] = hash['comments'].map {|c| Comment.new c }
34
+ end
35
+ end
36
+
37
+ def setup_owner!(hash)
38
+ if hash['owner']
39
+ hash['owner'] = User.new(hash['owner'])
40
+ end
41
+ end
42
+
43
+ def setup_answers!(response)
44
+ if response['answers']
45
+ response['answers'] = response['answers'].map { |a| Answer.new a }
46
+ end
47
+ end
48
+
49
+ def parse(response)
50
+ response['answers'].each do |answer_hash|
51
+ setup_associations!(response, answer_hash)
52
+ end
53
+ setup_answers! response
54
+ response
55
+ end
56
+ end
57
+
58
+ def initialize(hash)
59
+ @struct = OpenStruct.new hash
60
+ end
61
+
62
+ def id
63
+ @struct.answer_id
64
+ end
65
+
66
+ end
67
+ end
68
+ end
69
+
@@ -10,11 +10,17 @@ module StackExchange
10
10
  class << self
11
11
  attr_reader :client
12
12
 
13
- def all
14
- response = client.get client.api_method_url('/badges')
13
+ def all(options = {})
14
+ method = select_method options
15
+ response = client.request(method, options)
15
16
  badges = response['badges']
16
17
  badges.map { |badge| Badge.new badge }
17
18
  end
19
+
20
+ def select_method(options)
21
+ tag_based = options[:tag_based] || options['tag_based']
22
+ tag_based ? '/badges/tags' : '/badges'
23
+ end
18
24
  end
19
25
 
20
26
  def initialize(hash)
@@ -24,6 +30,7 @@ module StackExchange
24
30
  def id
25
31
  @struct.badge_id
26
32
  end
33
+
27
34
  end
28
35
  end
29
36
  end
@@ -0,0 +1,32 @@
1
+ module StackExchange
2
+ module StackOverflow
3
+ class Comment
4
+ extend Forwardable
5
+
6
+ def_delegators :@struct, :comment_id, :creation_date, :owner, :post_id,
7
+ :post_type, :score, :body
8
+
9
+ class << self
10
+ attr_reader :client
11
+
12
+ def find_by_id(id, options = {})
13
+ options.merge! :id => id
14
+ response = client.request('/comments/:id/', options)
15
+
16
+ comment = Comment.new(response['comments'].first)
17
+ response['comments'] = [comment]
18
+
19
+ OpenStruct.new response
20
+ end
21
+ end
22
+
23
+ def initialize(hash)
24
+ @struct = OpenStruct.new hash
25
+ end
26
+
27
+ def id
28
+ @struct.comment_id
29
+ end
30
+ end
31
+ end
32
+ end
@@ -17,8 +17,8 @@ module StackExchange
17
17
  class << self
18
18
  attr_reader :client
19
19
 
20
- def all
21
- response = client.get client.api_method_url('/stats')
20
+ def all(options = {})
21
+ response = client.request('/stats', options)
22
22
  stats = response['statistics'].first
23
23
  Statistics.new stats
24
24
  end
@@ -17,12 +17,17 @@ module StackExchange
17
17
  @struct = OpenStruct.new hash
18
18
  end
19
19
 
20
+ def id
21
+ @struct.user_id
22
+ end
23
+
20
24
  class << self
21
25
 
22
26
  attr_reader :client
23
27
 
24
- def find_by_badge_id(id, query_options = {})
25
- response = client.get client.api_method_url('/badges/:id', :id => id, :query => query_options)
28
+ def find_by_badge_id(id, options = {})
29
+ options.merge! :id => id
30
+ response = client.request('/badges/:id', options)
26
31
  users = response['users'].map { |user| User.new(user) }
27
32
  response['users'] = users
28
33
  OpenStruct.new response
data/pilha.gemspec CHANGED
@@ -1,26 +1,43 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "pilha"
3
- gem.version = "0.1.1"
3
+ gem.version = "0.1.2"
4
4
  gem.authors = ["Dalto Curvelano Junior"]
5
- gem.description = "A ruby wrapper to the StackExchange (StackOverflow and friends) API."
6
- gem.summary = "A ruby wrapper to the StackExchange (StackOverflow and friends) API."
5
+ gem.description = "A ruby wrapper to the Stack Exchange (Stack Overflow and friends) API."
6
+ gem.summary = "A ruby wrapper to the Stack Exchange (Stack Overflow and friends) API."
7
7
  gem.files = [
8
8
  "pilha.gemspec",
9
9
  "lib/pilha/stack_overflow/badge.rb",
10
10
  "lib/pilha/stack_overflow/statistics.rb",
11
11
  "lib/pilha/stack_overflow/user.rb",
12
+ "lib/pilha/stack_overflow/comment.rb",
13
+ "lib/pilha/stack_overflow/answer.rb",
12
14
  "lib/pilha.rb",
15
+ "spec/fixtures/stats.json",
16
+ "spec/fixtures/stats.json.gz",
13
17
  "spec/fixtures/badges.json",
18
+ "spec/fixtures/badges.json.gz",
14
19
  "spec/fixtures/badges_by_id.json",
20
+ "spec/fixtures/badges_by_id.json.gz",
15
21
  "spec/fixtures/badges_by_id_page2.json",
16
- "spec/fixtures/badges_name.json",
17
- "spec/fixtures/stats.json",
22
+ "spec/fixtures/badges_by_id_page2.json.gz",
23
+ "spec/fixtures/badges_tag_based.json",
24
+ "spec/fixtures/badges_tag_based.json.gz",
25
+ "spec/fixtures/answers_by_id.json",
26
+ "spec/fixtures/answers_by_id.json.gz",
27
+ "spec/fixtures/answer_with_comments.json",
28
+ "spec/fixtures/answer_with_comments.json.gz",
29
+ "spec/fixtures/comments.json",
30
+ "spec/fixtures/comments.json.gz",
31
+ "spec/fixtures/users_answers.json",
32
+ "spec/fixtures/users_answers.json.gz",
18
33
  "spec/pilha/stack_overflow/badge_spec.rb",
19
34
  "spec/pilha/stack_overflow/stack_overflow_spec.rb",
20
35
  "spec/pilha/stack_overflow/statistics_spec.rb",
21
36
  "spec/pilha/stack_overflow/user_spec.rb",
37
+ "spec/pilha/stack_overflow/comment_spec.rb",
38
+ "spec/pilha/stack_overflow/answer_spec.rb",
22
39
  "spec/spec.opts",
23
40
  "spec/spec_helper.rb"
24
41
  ]
25
- gem.homepage = "http://github.com/dlt/stack_exchange"
42
+ gem.homepage = "http://github.com/dlt/pilha"
26
43
  end
@@ -0,0 +1,61 @@
1
+ {
2
+ "total": 1,
3
+ "page": 1,
4
+ "pagesize": 30,
5
+ "answers": [
6
+ {
7
+ "answer_id": 555,
8
+ "accepted": false,
9
+ "answer_comments_url": "/answers/555/comments",
10
+ "question_id": 549,
11
+ "owner": {
12
+ "user_id": 136,
13
+ "user_type": "registered",
14
+ "display_name": "Michiel de Mare",
15
+ "reputation": 3758,
16
+ "email_hash": "7c45f63f61e478233f0c2ad3006b178c"
17
+ },
18
+ "creation_date": 1217709645,
19
+ "last_edit_date": 1236727932,
20
+ "last_activity_date": 1236727932,
21
+ "up_vote_count": 23,
22
+ "down_vote_count": 0,
23
+ "view_count": 5380,
24
+ "score": 23,
25
+ "community_owned": true,
26
+ "title": "The Definitive Guide To Website Authentication (beta)",
27
+ "comments": [
28
+ {
29
+ "comment_id": 278816,
30
+ "creation_date": 1232410823,
31
+ "owner": {
32
+ "user_id": 13834,
33
+ "user_type": "registered",
34
+ "display_name": "Kevin Loney",
35
+ "reputation": 1971,
36
+ "email_hash": "10f6e15abcf7ed8ca175fd8507e3c19b"
37
+ },
38
+ "post_id": 555,
39
+ "post_type": "answer",
40
+ "score": 0,
41
+ "body": "Given the recent MITM vulnerability surrounding signed SSL certificates (<a href=\"https://blog.startcom.org/?p=145\" rel=\"nofollow\">blog.startcom.org/?p=145</a>) so a combination of SSL and some kind of Challenge response authentication (There are alternatives to SRP) is probably a better solution."
42
+ },
43
+ {
44
+ "comment_id": 303010,
45
+ "creation_date": 1233120361,
46
+ "owner": {
47
+ "user_id": 26,
48
+ "user_type": "registered",
49
+ "display_name": "Shawn Simon",
50
+ "reputation": 4848,
51
+ "email_hash": "f878a55e08bacee0af48852c29a02dc7"
52
+ },
53
+ "post_id": 555,
54
+ "post_type": "answer",
55
+ "score": 0,
56
+ "body": "a lot of this stuff is situational. i tend not to use session cookies at all. cookies getting hijacked is almost always the servers fault. man in the middle / packet sniffing arent that common"
57
+ }
58
+ ]
59
+ }
60
+ ]
61
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "total": 1,
3
+ "page": 1,
4
+ "pagesize": 30,
5
+ "answers": [
6
+ {
7
+ "answer_id": 666,
8
+ "accepted": false,
9
+ "answer_comments_url": "/answers/666/comments",
10
+ "question_id": 664,
11
+ "owner": {
12
+ "user_id": 58,
13
+ "user_type": "registered",
14
+ "display_name": "cmcculloh",
15
+ "reputation": 2903,
16
+ "email_hash": "298e0497aa6b76a573f17e6a2bb22dec"
17
+ },
18
+ "creation_date": 1217766782,
19
+ "last_activity_date": 1217766782,
20
+ "up_vote_count": 21,
21
+ "down_vote_count": 0,
22
+ "view_count": 1028,
23
+ "score": 21,
24
+ "community_owned": false,
25
+ "title": "What level of programming should I have to contribute to open source?"
26
+ }
27
+ ]
28
+ }
Binary file
Binary file
Binary file
@@ -0,0 +1,1372 @@
1
+ {
2
+ "badges": [
3
+ {
4
+ "badge_id": 204,
5
+ "rank": "silver",
6
+ "name": ".htaccess",
7
+ "description": "Earned 400 upvotes for answers in the .htaccess tag",
8
+ "award_count": 1,
9
+ "tag_based": true,
10
+ "badges_recipients_url": "/badges/204"
11
+ },
12
+ {
13
+ "badge_id": 41,
14
+ "rank": "silver",
15
+ "name": ".net",
16
+ "description": "Earned 400 upvotes for answers in the .net tag",
17
+ "award_count": 49,
18
+ "tag_based": true,
19
+ "badges_recipients_url": "/badges/41"
20
+ },
21
+ {
22
+ "badge_id": 43,
23
+ "rank": "gold",
24
+ "name": ".net",
25
+ "description": "Earned 1000 upvotes for answers in the .net tag",
26
+ "award_count": 12,
27
+ "tag_based": true,
28
+ "badges_recipients_url": "/badges/43"
29
+ },
30
+ {
31
+ "badge_id": 185,
32
+ "rank": "silver",
33
+ "name": ".net-3.5",
34
+ "description": "Earned 400 upvotes for answers in the .net-3.5 tag",
35
+ "award_count": 1,
36
+ "tag_based": true,
37
+ "badges_recipients_url": "/badges/185"
38
+ },
39
+ {
40
+ "badge_id": 140,
41
+ "rank": "silver",
42
+ "name": "algorithm",
43
+ "description": "Earned 400 upvotes for answers in the algorithm tag",
44
+ "award_count": 3,
45
+ "tag_based": true,
46
+ "badges_recipients_url": "/badges/140"
47
+ },
48
+ {
49
+ "badge_id": 151,
50
+ "rank": "silver",
51
+ "name": "android",
52
+ "description": "Earned 400 upvotes for answers in the android tag",
53
+ "award_count": 2,
54
+ "tag_based": true,
55
+ "badges_recipients_url": "/badges/151"
56
+ },
57
+ {
58
+ "badge_id": 178,
59
+ "rank": "gold",
60
+ "name": "android",
61
+ "description": "Earned 1000 upvotes for answers in the android tag",
62
+ "award_count": 1,
63
+ "tag_based": true,
64
+ "badges_recipients_url": "/badges/178"
65
+ },
66
+ {
67
+ "badge_id": 117,
68
+ "rank": "silver",
69
+ "name": "arrays",
70
+ "description": "Earned 400 upvotes for answers in the arrays tag",
71
+ "award_count": 2,
72
+ "tag_based": true,
73
+ "badges_recipients_url": "/badges/117"
74
+ },
75
+ {
76
+ "badge_id": 64,
77
+ "rank": "silver",
78
+ "name": "asp.net",
79
+ "description": "Earned 400 upvotes for answers in the asp.net tag",
80
+ "award_count": 15,
81
+ "tag_based": true,
82
+ "badges_recipients_url": "/badges/64"
83
+ },
84
+ {
85
+ "badge_id": 193,
86
+ "rank": "gold",
87
+ "name": "asp.net",
88
+ "description": "Earned 1000 upvotes for answers in the asp.net tag",
89
+ "award_count": 2,
90
+ "tag_based": true,
91
+ "badges_recipients_url": "/badges/193"
92
+ },
93
+ {
94
+ "badge_id": 126,
95
+ "rank": "gold",
96
+ "name": "asp.net-mvc",
97
+ "description": "Earned 1000 upvotes for answers in the asp.net-mvc tag",
98
+ "award_count": 1,
99
+ "tag_based": true,
100
+ "badges_recipients_url": "/badges/126"
101
+ },
102
+ {
103
+ "badge_id": 66,
104
+ "rank": "silver",
105
+ "name": "asp.net-mvc",
106
+ "description": "Earned 400 upvotes for answers in the asp.net-mvc tag",
107
+ "award_count": 6,
108
+ "tag_based": true,
109
+ "badges_recipients_url": "/badges/66"
110
+ },
111
+ {
112
+ "badge_id": 184,
113
+ "rank": "silver",
114
+ "name": "bash",
115
+ "description": "Earned 400 upvotes for answers in the bash tag",
116
+ "award_count": 2,
117
+ "tag_based": true,
118
+ "badges_recipients_url": "/badges/184"
119
+ },
120
+ {
121
+ "badge_id": 121,
122
+ "rank": "silver",
123
+ "name": "beginner",
124
+ "description": "Earned 400 upvotes for answers in the beginner tag",
125
+ "award_count": 4,
126
+ "tag_based": true,
127
+ "badges_recipients_url": "/badges/121"
128
+ },
129
+ {
130
+ "badge_id": 202,
131
+ "rank": "gold",
132
+ "name": "beginner",
133
+ "description": "Earned 1000 upvotes for answers in the beginner tag",
134
+ "award_count": 1,
135
+ "tag_based": true,
136
+ "badges_recipients_url": "/badges/202"
137
+ },
138
+ {
139
+ "badge_id": 57,
140
+ "rank": "silver",
141
+ "name": "best-practices",
142
+ "description": "Earned 400 upvotes for answers in the best-practices tag",
143
+ "award_count": 8,
144
+ "tag_based": true,
145
+ "badges_recipients_url": "/badges/57"
146
+ },
147
+ {
148
+ "badge_id": 107,
149
+ "rank": "gold",
150
+ "name": "best-practices",
151
+ "description": "Earned 1000 upvotes for answers in the best-practices tag",
152
+ "award_count": 1,
153
+ "tag_based": true,
154
+ "badges_recipients_url": "/badges/107"
155
+ },
156
+ {
157
+ "badge_id": 190,
158
+ "rank": "silver",
159
+ "name": "blackberry",
160
+ "description": "Earned 400 upvotes for answers in the blackberry tag",
161
+ "award_count": 1,
162
+ "tag_based": true,
163
+ "badges_recipients_url": "/badges/190"
164
+ },
165
+ {
166
+ "badge_id": 96,
167
+ "rank": "gold",
168
+ "name": "c",
169
+ "description": "Earned 1000 upvotes for answers in the c tag",
170
+ "award_count": 10,
171
+ "tag_based": true,
172
+ "badges_recipients_url": "/badges/96"
173
+ },
174
+ {
175
+ "badge_id": 52,
176
+ "rank": "silver",
177
+ "name": "c",
178
+ "description": "Earned 400 upvotes for answers in the c tag",
179
+ "award_count": 38,
180
+ "tag_based": true,
181
+ "badges_recipients_url": "/badges/52"
182
+ },
183
+ {
184
+ "badge_id": 39,
185
+ "rank": "silver",
186
+ "name": "c#",
187
+ "description": "Earned 400 upvotes for answers in the c# tag",
188
+ "award_count": 134,
189
+ "tag_based": true,
190
+ "badges_recipients_url": "/badges/39"
191
+ },
192
+ {
193
+ "badge_id": 40,
194
+ "rank": "gold",
195
+ "name": "c#",
196
+ "description": "Earned 1000 upvotes for answers in the c# tag",
197
+ "award_count": 42,
198
+ "tag_based": true,
199
+ "badges_recipients_url": "/badges/40"
200
+ },
201
+ {
202
+ "badge_id": 197,
203
+ "rank": "silver",
204
+ "name": "c#3.0",
205
+ "description": "Earned 400 upvotes for answers in the c#3.0 tag",
206
+ "award_count": 1,
207
+ "tag_based": true,
208
+ "badges_recipients_url": "/badges/197"
209
+ },
210
+ {
211
+ "badge_id": 48,
212
+ "rank": "silver",
213
+ "name": "c++",
214
+ "description": "Earned 400 upvotes for answers in the c++ tag",
215
+ "award_count": 95,
216
+ "tag_based": true,
217
+ "badges_recipients_url": "/badges/48"
218
+ },
219
+ {
220
+ "badge_id": 49,
221
+ "rank": "gold",
222
+ "name": "c++",
223
+ "description": "Earned 1000 upvotes for answers in the c++ tag",
224
+ "award_count": 32,
225
+ "tag_based": true,
226
+ "badges_recipients_url": "/badges/49"
227
+ },
228
+ {
229
+ "badge_id": 89,
230
+ "rank": "silver",
231
+ "name": "career-development",
232
+ "description": "Earned 400 upvotes for answers in the career-development tag",
233
+ "award_count": 1,
234
+ "tag_based": true,
235
+ "badges_recipients_url": "/badges/89"
236
+ },
237
+ {
238
+ "badge_id": 175,
239
+ "rank": "silver",
240
+ "name": "casting",
241
+ "description": "Earned 400 upvotes for answers in the casting tag",
242
+ "award_count": 1,
243
+ "tag_based": true,
244
+ "badges_recipients_url": "/badges/175"
245
+ },
246
+ {
247
+ "badge_id": 148,
248
+ "rank": "silver",
249
+ "name": "clojure",
250
+ "description": "Earned 400 upvotes for answers in the clojure tag",
251
+ "award_count": 2,
252
+ "tag_based": true,
253
+ "badges_recipients_url": "/badges/148"
254
+ },
255
+ {
256
+ "badge_id": 199,
257
+ "rank": "silver",
258
+ "name": "clr",
259
+ "description": "Earned 400 upvotes for answers in the clr tag",
260
+ "award_count": 1,
261
+ "tag_based": true,
262
+ "badges_recipients_url": "/badges/199"
263
+ },
264
+ {
265
+ "badge_id": 113,
266
+ "rank": "gold",
267
+ "name": "cocoa",
268
+ "description": "Earned 1000 upvotes for answers in the cocoa tag",
269
+ "award_count": 1,
270
+ "tag_based": true,
271
+ "badges_recipients_url": "/badges/113"
272
+ },
273
+ {
274
+ "badge_id": 69,
275
+ "rank": "silver",
276
+ "name": "cocoa",
277
+ "description": "Earned 400 upvotes for answers in the cocoa tag",
278
+ "award_count": 7,
279
+ "tag_based": true,
280
+ "badges_recipients_url": "/badges/69"
281
+ },
282
+ {
283
+ "badge_id": 115,
284
+ "rank": "silver",
285
+ "name": "cocoa-touch",
286
+ "description": "Earned 400 upvotes for answers in the cocoa-touch tag",
287
+ "award_count": 1,
288
+ "tag_based": true,
289
+ "badges_recipients_url": "/badges/115"
290
+ },
291
+ {
292
+ "badge_id": 150,
293
+ "rank": "silver",
294
+ "name": "collections",
295
+ "description": "Earned 400 upvotes for answers in the collections tag",
296
+ "award_count": 1,
297
+ "tag_based": true,
298
+ "badges_recipients_url": "/badges/150"
299
+ },
300
+ {
301
+ "badge_id": 131,
302
+ "rank": "silver",
303
+ "name": "compact-framework",
304
+ "description": "Earned 400 upvotes for answers in the compact-framework tag",
305
+ "award_count": 1,
306
+ "tag_based": true,
307
+ "badges_recipients_url": "/badges/131"
308
+ },
309
+ {
310
+ "badge_id": 116,
311
+ "rank": "silver",
312
+ "name": "css",
313
+ "description": "Earned 400 upvotes for answers in the css tag",
314
+ "award_count": 6,
315
+ "tag_based": true,
316
+ "badges_recipients_url": "/badges/116"
317
+ },
318
+ {
319
+ "badge_id": 124,
320
+ "rank": "silver",
321
+ "name": "database",
322
+ "description": "Earned 400 upvotes for answers in the database tag",
323
+ "award_count": 3,
324
+ "tag_based": true,
325
+ "badges_recipients_url": "/badges/124"
326
+ },
327
+ {
328
+ "badge_id": 192,
329
+ "rank": "silver",
330
+ "name": "datetime",
331
+ "description": "Earned 400 upvotes for answers in the datetime tag",
332
+ "award_count": 1,
333
+ "tag_based": true,
334
+ "badges_recipients_url": "/badges/192"
335
+ },
336
+ {
337
+ "badge_id": 120,
338
+ "rank": "silver",
339
+ "name": "delegates",
340
+ "description": "Earned 400 upvotes for answers in the delegates tag",
341
+ "award_count": 1,
342
+ "tag_based": true,
343
+ "badges_recipients_url": "/badges/120"
344
+ },
345
+ {
346
+ "badge_id": 122,
347
+ "rank": "gold",
348
+ "name": "delphi",
349
+ "description": "Earned 1000 upvotes for answers in the delphi tag",
350
+ "award_count": 3,
351
+ "tag_based": true,
352
+ "badges_recipients_url": "/badges/122"
353
+ },
354
+ {
355
+ "badge_id": 65,
356
+ "rank": "silver",
357
+ "name": "delphi",
358
+ "description": "Earned 400 upvotes for answers in the delphi tag",
359
+ "award_count": 15,
360
+ "tag_based": true,
361
+ "badges_recipients_url": "/badges/65"
362
+ },
363
+ {
364
+ "badge_id": 196,
365
+ "rank": "silver",
366
+ "name": "dictionary",
367
+ "description": "Earned 400 upvotes for answers in the dictionary tag",
368
+ "award_count": 1,
369
+ "tag_based": true,
370
+ "badges_recipients_url": "/badges/196"
371
+ },
372
+ {
373
+ "badge_id": 73,
374
+ "rank": "silver",
375
+ "name": "django",
376
+ "description": "Earned 400 upvotes for answers in the django tag",
377
+ "award_count": 6,
378
+ "tag_based": true,
379
+ "badges_recipients_url": "/badges/73"
380
+ },
381
+ {
382
+ "badge_id": 182,
383
+ "rank": "gold",
384
+ "name": "django",
385
+ "description": "Earned 1000 upvotes for answers in the django tag",
386
+ "award_count": 1,
387
+ "tag_based": true,
388
+ "badges_recipients_url": "/badges/182"
389
+ },
390
+ {
391
+ "badge_id": 156,
392
+ "rank": "gold",
393
+ "name": "eclipse",
394
+ "description": "Earned 1000 upvotes for answers in the eclipse tag",
395
+ "award_count": 1,
396
+ "tag_based": true,
397
+ "badges_recipients_url": "/badges/156"
398
+ },
399
+ {
400
+ "badge_id": 75,
401
+ "rank": "silver",
402
+ "name": "eclipse",
403
+ "description": "Earned 400 upvotes for answers in the eclipse tag",
404
+ "award_count": 1,
405
+ "tag_based": true,
406
+ "badges_recipients_url": "/badges/75"
407
+ },
408
+ {
409
+ "badge_id": 99,
410
+ "rank": "silver",
411
+ "name": "emacs",
412
+ "description": "Earned 400 upvotes for answers in the emacs tag",
413
+ "award_count": 1,
414
+ "tag_based": true,
415
+ "badges_recipients_url": "/badges/99"
416
+ },
417
+ {
418
+ "badge_id": 181,
419
+ "rank": "gold",
420
+ "name": "emacs",
421
+ "description": "Earned 1000 upvotes for answers in the emacs tag",
422
+ "award_count": 1,
423
+ "tag_based": true,
424
+ "badges_recipients_url": "/badges/181"
425
+ },
426
+ {
427
+ "badge_id": 171,
428
+ "rank": "silver",
429
+ "name": "entity-framework",
430
+ "description": "Earned 400 upvotes for answers in the entity-framework tag",
431
+ "award_count": 1,
432
+ "tag_based": true,
433
+ "badges_recipients_url": "/badges/171"
434
+ },
435
+ {
436
+ "badge_id": 180,
437
+ "rank": "silver",
438
+ "name": "enums",
439
+ "description": "Earned 400 upvotes for answers in the enums tag",
440
+ "award_count": 1,
441
+ "tag_based": true,
442
+ "badges_recipients_url": "/badges/180"
443
+ },
444
+ {
445
+ "badge_id": 195,
446
+ "rank": "silver",
447
+ "name": "events",
448
+ "description": "Earned 400 upvotes for answers in the events tag",
449
+ "award_count": 1,
450
+ "tag_based": true,
451
+ "badges_recipients_url": "/badges/195"
452
+ },
453
+ {
454
+ "badge_id": 137,
455
+ "rank": "silver",
456
+ "name": "exception",
457
+ "description": "Earned 400 upvotes for answers in the exception tag",
458
+ "award_count": 1,
459
+ "tag_based": true,
460
+ "badges_recipients_url": "/badges/137"
461
+ },
462
+ {
463
+ "badge_id": 152,
464
+ "rank": "gold",
465
+ "name": "f#",
466
+ "description": "Earned 1000 upvotes for answers in the f# tag",
467
+ "award_count": 1,
468
+ "tag_based": true,
469
+ "badges_recipients_url": "/badges/152"
470
+ },
471
+ {
472
+ "badge_id": 74,
473
+ "rank": "silver",
474
+ "name": "f#",
475
+ "description": "Earned 400 upvotes for answers in the f# tag",
476
+ "award_count": 3,
477
+ "tag_based": true,
478
+ "badges_recipients_url": "/badges/74"
479
+ },
480
+ {
481
+ "badge_id": 157,
482
+ "rank": "silver",
483
+ "name": "functional-programming",
484
+ "description": "Earned 400 upvotes for answers in the functional-programming tag",
485
+ "award_count": 1,
486
+ "tag_based": true,
487
+ "badges_recipients_url": "/badges/157"
488
+ },
489
+ {
490
+ "badge_id": 46,
491
+ "rank": "silver",
492
+ "name": "generics",
493
+ "description": "Earned 400 upvotes for answers in the generics tag",
494
+ "award_count": 3,
495
+ "tag_based": true,
496
+ "badges_recipients_url": "/badges/46"
497
+ },
498
+ {
499
+ "badge_id": 104,
500
+ "rank": "gold",
501
+ "name": "generics",
502
+ "description": "Earned 1000 upvotes for answers in the generics tag",
503
+ "award_count": 1,
504
+ "tag_based": true,
505
+ "badges_recipients_url": "/badges/104"
506
+ },
507
+ {
508
+ "badge_id": 80,
509
+ "rank": "silver",
510
+ "name": "git",
511
+ "description": "Earned 400 upvotes for answers in the git tag",
512
+ "award_count": 4,
513
+ "tag_based": true,
514
+ "badges_recipients_url": "/badges/80"
515
+ },
516
+ {
517
+ "badge_id": 161,
518
+ "rank": "gold",
519
+ "name": "git",
520
+ "description": "Earned 1000 upvotes for answers in the git tag",
521
+ "award_count": 1,
522
+ "tag_based": true,
523
+ "badges_recipients_url": "/badges/161"
524
+ },
525
+ {
526
+ "badge_id": 125,
527
+ "rank": "silver",
528
+ "name": "google-app-engine",
529
+ "description": "Earned 400 upvotes for answers in the google-app-engine tag",
530
+ "award_count": 2,
531
+ "tag_based": true,
532
+ "badges_recipients_url": "/badges/125"
533
+ },
534
+ {
535
+ "badge_id": 127,
536
+ "rank": "silver",
537
+ "name": "haskell",
538
+ "description": "Earned 400 upvotes for answers in the haskell tag",
539
+ "award_count": 3,
540
+ "tag_based": true,
541
+ "badges_recipients_url": "/badges/127"
542
+ },
543
+ {
544
+ "badge_id": 194,
545
+ "rank": "silver",
546
+ "name": "hibernate",
547
+ "description": "Earned 400 upvotes for answers in the hibernate tag",
548
+ "award_count": 1,
549
+ "tag_based": true,
550
+ "badges_recipients_url": "/badges/194"
551
+ },
552
+ {
553
+ "badge_id": 134,
554
+ "rank": "gold",
555
+ "name": "html",
556
+ "description": "Earned 1000 upvotes for answers in the html tag",
557
+ "award_count": 2,
558
+ "tag_based": true,
559
+ "badges_recipients_url": "/badges/134"
560
+ },
561
+ {
562
+ "badge_id": 84,
563
+ "rank": "silver",
564
+ "name": "html",
565
+ "description": "Earned 400 upvotes for answers in the html tag",
566
+ "award_count": 11,
567
+ "tag_based": true,
568
+ "badges_recipients_url": "/badges/84"
569
+ },
570
+ {
571
+ "badge_id": 147,
572
+ "rank": "silver",
573
+ "name": "inheritance",
574
+ "description": "Earned 400 upvotes for answers in the inheritance tag",
575
+ "award_count": 1,
576
+ "tag_based": true,
577
+ "badges_recipients_url": "/badges/147"
578
+ },
579
+ {
580
+ "badge_id": 191,
581
+ "rank": "silver",
582
+ "name": "interview-questions",
583
+ "description": "Earned 400 upvotes for answers in the interview-questions tag",
584
+ "award_count": 1,
585
+ "tag_based": true,
586
+ "badges_recipients_url": "/badges/191"
587
+ },
588
+ {
589
+ "badge_id": 172,
590
+ "rank": "gold",
591
+ "name": "iphone",
592
+ "description": "Earned 1000 upvotes for answers in the iphone tag",
593
+ "award_count": 2,
594
+ "tag_based": true,
595
+ "badges_recipients_url": "/badges/172"
596
+ },
597
+ {
598
+ "badge_id": 67,
599
+ "rank": "silver",
600
+ "name": "iphone",
601
+ "description": "Earned 400 upvotes for answers in the iphone tag",
602
+ "award_count": 15,
603
+ "tag_based": true,
604
+ "badges_recipients_url": "/badges/67"
605
+ },
606
+ {
607
+ "badge_id": 44,
608
+ "rank": "gold",
609
+ "name": "java",
610
+ "description": "Earned 1000 upvotes for answers in the java tag",
611
+ "award_count": 24,
612
+ "tag_based": true,
613
+ "badges_recipients_url": "/badges/44"
614
+ },
615
+ {
616
+ "badge_id": 42,
617
+ "rank": "silver",
618
+ "name": "java",
619
+ "description": "Earned 400 upvotes for answers in the java tag",
620
+ "award_count": 78,
621
+ "tag_based": true,
622
+ "badges_recipients_url": "/badges/42"
623
+ },
624
+ {
625
+ "badge_id": 59,
626
+ "rank": "silver",
627
+ "name": "javascript",
628
+ "description": "Earned 400 upvotes for answers in the javascript tag",
629
+ "award_count": 35,
630
+ "tag_based": true,
631
+ "badges_recipients_url": "/badges/59"
632
+ },
633
+ {
634
+ "badge_id": 78,
635
+ "rank": "gold",
636
+ "name": "javascript",
637
+ "description": "Earned 1000 upvotes for answers in the javascript tag",
638
+ "award_count": 7,
639
+ "tag_based": true,
640
+ "badges_recipients_url": "/badges/78"
641
+ },
642
+ {
643
+ "badge_id": 79,
644
+ "rank": "gold",
645
+ "name": "jquery",
646
+ "description": "Earned 1000 upvotes for answers in the jquery tag",
647
+ "award_count": 7,
648
+ "tag_based": true,
649
+ "badges_recipients_url": "/badges/79"
650
+ },
651
+ {
652
+ "badge_id": 61,
653
+ "rank": "silver",
654
+ "name": "jquery",
655
+ "description": "Earned 400 upvotes for answers in the jquery tag",
656
+ "award_count": 20,
657
+ "tag_based": true,
658
+ "badges_recipients_url": "/badges/61"
659
+ },
660
+ {
661
+ "badge_id": 186,
662
+ "rank": "silver",
663
+ "name": "jsf",
664
+ "description": "Earned 400 upvotes for answers in the jsf tag",
665
+ "award_count": 1,
666
+ "tag_based": true,
667
+ "badges_recipients_url": "/badges/186"
668
+ },
669
+ {
670
+ "badge_id": 173,
671
+ "rank": "silver",
672
+ "name": "jsp",
673
+ "description": "Earned 400 upvotes for answers in the jsp tag",
674
+ "award_count": 1,
675
+ "tag_based": true,
676
+ "badges_recipients_url": "/badges/173"
677
+ },
678
+ {
679
+ "badge_id": 179,
680
+ "rank": "silver",
681
+ "name": "lambda",
682
+ "description": "Earned 400 upvotes for answers in the lambda tag",
683
+ "award_count": 1,
684
+ "tag_based": true,
685
+ "badges_recipients_url": "/badges/179"
686
+ },
687
+ {
688
+ "badge_id": 70,
689
+ "rank": "silver",
690
+ "name": "language-agnostic",
691
+ "description": "Earned 400 upvotes for answers in the language-agnostic tag",
692
+ "award_count": 1,
693
+ "tag_based": true,
694
+ "badges_recipients_url": "/badges/70"
695
+ },
696
+ {
697
+ "badge_id": 47,
698
+ "rank": "silver",
699
+ "name": "linq",
700
+ "description": "Earned 400 upvotes for answers in the linq tag",
701
+ "award_count": 6,
702
+ "tag_based": true,
703
+ "badges_recipients_url": "/badges/47"
704
+ },
705
+ {
706
+ "badge_id": 85,
707
+ "rank": "gold",
708
+ "name": "linq",
709
+ "description": "Earned 1000 upvotes for answers in the linq tag",
710
+ "award_count": 2,
711
+ "tag_based": true,
712
+ "badges_recipients_url": "/badges/85"
713
+ },
714
+ {
715
+ "badge_id": 102,
716
+ "rank": "silver",
717
+ "name": "linq-to-sql",
718
+ "description": "Earned 400 upvotes for answers in the linq-to-sql tag",
719
+ "award_count": 2,
720
+ "tag_based": true,
721
+ "badges_recipients_url": "/badges/102"
722
+ },
723
+ {
724
+ "badge_id": 165,
725
+ "rank": "silver",
726
+ "name": "linux",
727
+ "description": "Earned 400 upvotes for answers in the linux tag",
728
+ "award_count": 1,
729
+ "tag_based": true,
730
+ "badges_recipients_url": "/badges/165"
731
+ },
732
+ {
733
+ "badge_id": 141,
734
+ "rank": "silver",
735
+ "name": "lisp",
736
+ "description": "Earned 400 upvotes for answers in the lisp tag",
737
+ "award_count": 1,
738
+ "tag_based": true,
739
+ "badges_recipients_url": "/badges/141"
740
+ },
741
+ {
742
+ "badge_id": 169,
743
+ "rank": "gold",
744
+ "name": "matlab",
745
+ "description": "Earned 1000 upvotes for answers in the matlab tag",
746
+ "award_count": 1,
747
+ "tag_based": true,
748
+ "badges_recipients_url": "/badges/169"
749
+ },
750
+ {
751
+ "badge_id": 103,
752
+ "rank": "silver",
753
+ "name": "matlab",
754
+ "description": "Earned 400 upvotes for answers in the matlab tag",
755
+ "award_count": 2,
756
+ "tag_based": true,
757
+ "badges_recipients_url": "/badges/103"
758
+ },
759
+ {
760
+ "badge_id": 110,
761
+ "rank": "silver",
762
+ "name": "maven-2",
763
+ "description": "Earned 400 upvotes for answers in the maven-2 tag",
764
+ "award_count": 2,
765
+ "tag_based": true,
766
+ "badges_recipients_url": "/badges/110"
767
+ },
768
+ {
769
+ "badge_id": 201,
770
+ "rank": "gold",
771
+ "name": "maven-2",
772
+ "description": "Earned 1000 upvotes for answers in the maven-2 tag",
773
+ "award_count": 1,
774
+ "tag_based": true,
775
+ "badges_recipients_url": "/badges/201"
776
+ },
777
+ {
778
+ "badge_id": 188,
779
+ "rank": "silver",
780
+ "name": "mercurial",
781
+ "description": "Earned 400 upvotes for answers in the mercurial tag",
782
+ "award_count": 1,
783
+ "tag_based": true,
784
+ "badges_recipients_url": "/badges/188"
785
+ },
786
+ {
787
+ "badge_id": 162,
788
+ "rank": "silver",
789
+ "name": "mod-rewrite",
790
+ "description": "Earned 400 upvotes for answers in the mod-rewrite tag",
791
+ "award_count": 1,
792
+ "tag_based": true,
793
+ "badges_recipients_url": "/badges/162"
794
+ },
795
+ {
796
+ "badge_id": 108,
797
+ "rank": "silver",
798
+ "name": "mono",
799
+ "description": "Earned 400 upvotes for answers in the mono tag",
800
+ "award_count": 1,
801
+ "tag_based": true,
802
+ "badges_recipients_url": "/badges/108"
803
+ },
804
+ {
805
+ "badge_id": 143,
806
+ "rank": "silver",
807
+ "name": "ms-access",
808
+ "description": "Earned 400 upvotes for answers in the ms-access tag",
809
+ "award_count": 2,
810
+ "tag_based": true,
811
+ "badges_recipients_url": "/badges/143"
812
+ },
813
+ {
814
+ "badge_id": 129,
815
+ "rank": "gold",
816
+ "name": "multithreading",
817
+ "description": "Earned 1000 upvotes for answers in the multithreading tag",
818
+ "award_count": 1,
819
+ "tag_based": true,
820
+ "badges_recipients_url": "/badges/129"
821
+ },
822
+ {
823
+ "badge_id": 92,
824
+ "rank": "silver",
825
+ "name": "multithreading",
826
+ "description": "Earned 400 upvotes for answers in the multithreading tag",
827
+ "award_count": 2,
828
+ "tag_based": true,
829
+ "badges_recipients_url": "/badges/92"
830
+ },
831
+ {
832
+ "badge_id": 56,
833
+ "rank": "silver",
834
+ "name": "mysql",
835
+ "description": "Earned 400 upvotes for answers in the mysql tag",
836
+ "award_count": 8,
837
+ "tag_based": true,
838
+ "badges_recipients_url": "/badges/56"
839
+ },
840
+ {
841
+ "badge_id": 123,
842
+ "rank": "gold",
843
+ "name": "mysql",
844
+ "description": "Earned 1000 upvotes for answers in the mysql tag",
845
+ "award_count": 2,
846
+ "tag_based": true,
847
+ "badges_recipients_url": "/badges/123"
848
+ },
849
+ {
850
+ "badge_id": 174,
851
+ "rank": "gold",
852
+ "name": "objective-c",
853
+ "description": "Earned 1000 upvotes for answers in the objective-c tag",
854
+ "award_count": 4,
855
+ "tag_based": true,
856
+ "badges_recipients_url": "/badges/174"
857
+ },
858
+ {
859
+ "badge_id": 100,
860
+ "rank": "silver",
861
+ "name": "objective-c",
862
+ "description": "Earned 400 upvotes for answers in the objective-c tag",
863
+ "award_count": 13,
864
+ "tag_based": true,
865
+ "badges_recipients_url": "/badges/100"
866
+ },
867
+ {
868
+ "badge_id": 114,
869
+ "rank": "silver",
870
+ "name": "oop",
871
+ "description": "Earned 400 upvotes for answers in the oop tag",
872
+ "award_count": 1,
873
+ "tag_based": true,
874
+ "badges_recipients_url": "/badges/114"
875
+ },
876
+ {
877
+ "badge_id": 132,
878
+ "rank": "silver",
879
+ "name": "optimization",
880
+ "description": "Earned 400 upvotes for answers in the optimization tag",
881
+ "award_count": 1,
882
+ "tag_based": true,
883
+ "badges_recipients_url": "/badges/132"
884
+ },
885
+ {
886
+ "badge_id": 81,
887
+ "rank": "silver",
888
+ "name": "oracle",
889
+ "description": "Earned 400 upvotes for answers in the oracle tag",
890
+ "award_count": 7,
891
+ "tag_based": true,
892
+ "badges_recipients_url": "/badges/81"
893
+ },
894
+ {
895
+ "badge_id": 198,
896
+ "rank": "silver",
897
+ "name": "orm",
898
+ "description": "Earned 400 upvotes for answers in the orm tag",
899
+ "award_count": 1,
900
+ "tag_based": true,
901
+ "badges_recipients_url": "/badges/198"
902
+ },
903
+ {
904
+ "badge_id": 68,
905
+ "rank": "silver",
906
+ "name": "performance",
907
+ "description": "Earned 400 upvotes for answers in the performance tag",
908
+ "award_count": 1,
909
+ "tag_based": true,
910
+ "badges_recipients_url": "/badges/68"
911
+ },
912
+ {
913
+ "badge_id": 170,
914
+ "rank": "gold",
915
+ "name": "performance",
916
+ "description": "Earned 1000 upvotes for answers in the performance tag",
917
+ "award_count": 1,
918
+ "tag_based": true,
919
+ "badges_recipients_url": "/badges/170"
920
+ },
921
+ {
922
+ "badge_id": 60,
923
+ "rank": "gold",
924
+ "name": "perl",
925
+ "description": "Earned 1000 upvotes for answers in the perl tag",
926
+ "award_count": 6,
927
+ "tag_based": true,
928
+ "badges_recipients_url": "/badges/60"
929
+ },
930
+ {
931
+ "badge_id": 53,
932
+ "rank": "silver",
933
+ "name": "perl",
934
+ "description": "Earned 400 upvotes for answers in the perl tag",
935
+ "award_count": 26,
936
+ "tag_based": true,
937
+ "badges_recipients_url": "/badges/53"
938
+ },
939
+ {
940
+ "badge_id": 54,
941
+ "rank": "silver",
942
+ "name": "php",
943
+ "description": "Earned 400 upvotes for answers in the php tag",
944
+ "award_count": 44,
945
+ "tag_based": true,
946
+ "badges_recipients_url": "/badges/54"
947
+ },
948
+ {
949
+ "badge_id": 93,
950
+ "rank": "gold",
951
+ "name": "php",
952
+ "description": "Earned 1000 upvotes for answers in the php tag",
953
+ "award_count": 12,
954
+ "tag_based": true,
955
+ "badges_recipients_url": "/badges/93"
956
+ },
957
+ {
958
+ "badge_id": 163,
959
+ "rank": "silver",
960
+ "name": "pointers",
961
+ "description": "Earned 400 upvotes for answers in the pointers tag",
962
+ "award_count": 2,
963
+ "tag_based": true,
964
+ "badges_recipients_url": "/badges/163"
965
+ },
966
+ {
967
+ "badge_id": 160,
968
+ "rank": "silver",
969
+ "name": "powershell",
970
+ "description": "Earned 400 upvotes for answers in the powershell tag",
971
+ "award_count": 1,
972
+ "tag_based": true,
973
+ "badges_recipients_url": "/badges/160"
974
+ },
975
+ {
976
+ "badge_id": 183,
977
+ "rank": "silver",
978
+ "name": "programming-languages",
979
+ "description": "Earned 400 upvotes for answers in the programming-languages tag",
980
+ "award_count": 1,
981
+ "tag_based": true,
982
+ "badges_recipients_url": "/badges/183"
983
+ },
984
+ {
985
+ "badge_id": 50,
986
+ "rank": "silver",
987
+ "name": "python",
988
+ "description": "Earned 400 upvotes for answers in the python tag",
989
+ "award_count": 58,
990
+ "tag_based": true,
991
+ "badges_recipients_url": "/badges/50"
992
+ },
993
+ {
994
+ "badge_id": 51,
995
+ "rank": "gold",
996
+ "name": "python",
997
+ "description": "Earned 1000 upvotes for answers in the python tag",
998
+ "award_count": 10,
999
+ "tag_based": true,
1000
+ "badges_recipients_url": "/badges/51"
1001
+ },
1002
+ {
1003
+ "badge_id": 135,
1004
+ "rank": "silver",
1005
+ "name": "r",
1006
+ "description": "Earned 400 upvotes for answers in the r tag",
1007
+ "award_count": 2,
1008
+ "tag_based": true,
1009
+ "badges_recipients_url": "/badges/135"
1010
+ },
1011
+ {
1012
+ "badge_id": 86,
1013
+ "rank": "silver",
1014
+ "name": "reflection",
1015
+ "description": "Earned 400 upvotes for answers in the reflection tag",
1016
+ "award_count": 2,
1017
+ "tag_based": true,
1018
+ "badges_recipients_url": "/badges/86"
1019
+ },
1020
+ {
1021
+ "badge_id": 97,
1022
+ "rank": "silver",
1023
+ "name": "regex",
1024
+ "description": "Earned 400 upvotes for answers in the regex tag",
1025
+ "award_count": 6,
1026
+ "tag_based": true,
1027
+ "badges_recipients_url": "/badges/97"
1028
+ },
1029
+ {
1030
+ "badge_id": 133,
1031
+ "rank": "gold",
1032
+ "name": "regex",
1033
+ "description": "Earned 1000 upvotes for answers in the regex tag",
1034
+ "award_count": 2,
1035
+ "tag_based": true,
1036
+ "badges_recipients_url": "/badges/133"
1037
+ },
1038
+ {
1039
+ "badge_id": 106,
1040
+ "rank": "silver",
1041
+ "name": "ruby",
1042
+ "description": "Earned 400 upvotes for answers in the ruby tag",
1043
+ "award_count": 6,
1044
+ "tag_based": true,
1045
+ "badges_recipients_url": "/badges/106"
1046
+ },
1047
+ {
1048
+ "badge_id": 90,
1049
+ "rank": "silver",
1050
+ "name": "ruby-on-rails",
1051
+ "description": "Earned 400 upvotes for answers in the ruby-on-rails tag",
1052
+ "award_count": 3,
1053
+ "tag_based": true,
1054
+ "badges_recipients_url": "/badges/90"
1055
+ },
1056
+ {
1057
+ "badge_id": 111,
1058
+ "rank": "silver",
1059
+ "name": "scala",
1060
+ "description": "Earned 400 upvotes for answers in the scala tag",
1061
+ "award_count": 4,
1062
+ "tag_based": true,
1063
+ "badges_recipients_url": "/badges/111"
1064
+ },
1065
+ {
1066
+ "badge_id": 168,
1067
+ "rank": "gold",
1068
+ "name": "scala",
1069
+ "description": "Earned 1000 upvotes for answers in the scala tag",
1070
+ "award_count": 1,
1071
+ "tag_based": true,
1072
+ "badges_recipients_url": "/badges/168"
1073
+ },
1074
+ {
1075
+ "badge_id": 176,
1076
+ "rank": "silver",
1077
+ "name": "serialization",
1078
+ "description": "Earned 400 upvotes for answers in the serialization tag",
1079
+ "award_count": 1,
1080
+ "tag_based": true,
1081
+ "badges_recipients_url": "/badges/176"
1082
+ },
1083
+ {
1084
+ "badge_id": 189,
1085
+ "rank": "silver",
1086
+ "name": "servlets",
1087
+ "description": "Earned 400 upvotes for answers in the servlets tag",
1088
+ "award_count": 1,
1089
+ "tag_based": true,
1090
+ "badges_recipients_url": "/badges/189"
1091
+ },
1092
+ {
1093
+ "badge_id": 119,
1094
+ "rank": "silver",
1095
+ "name": "sharepoint",
1096
+ "description": "Earned 400 upvotes for answers in the sharepoint tag",
1097
+ "award_count": 1,
1098
+ "tag_based": true,
1099
+ "badges_recipients_url": "/badges/119"
1100
+ },
1101
+ {
1102
+ "badge_id": 177,
1103
+ "rank": "silver",
1104
+ "name": "silverlight",
1105
+ "description": "Earned 400 upvotes for answers in the silverlight tag",
1106
+ "award_count": 1,
1107
+ "tag_based": true,
1108
+ "badges_recipients_url": "/badges/177"
1109
+ },
1110
+ {
1111
+ "badge_id": 167,
1112
+ "rank": "silver",
1113
+ "name": "spring",
1114
+ "description": "Earned 400 upvotes for answers in the spring tag",
1115
+ "award_count": 1,
1116
+ "tag_based": true,
1117
+ "badges_recipients_url": "/badges/167"
1118
+ },
1119
+ {
1120
+ "badge_id": 82,
1121
+ "rank": "gold",
1122
+ "name": "sql",
1123
+ "description": "Earned 1000 upvotes for answers in the sql tag",
1124
+ "award_count": 5,
1125
+ "tag_based": true,
1126
+ "badges_recipients_url": "/badges/82"
1127
+ },
1128
+ {
1129
+ "badge_id": 55,
1130
+ "rank": "silver",
1131
+ "name": "sql",
1132
+ "description": "Earned 400 upvotes for answers in the sql tag",
1133
+ "award_count": 25,
1134
+ "tag_based": true,
1135
+ "badges_recipients_url": "/badges/55"
1136
+ },
1137
+ {
1138
+ "badge_id": 88,
1139
+ "rank": "silver",
1140
+ "name": "sql-server",
1141
+ "description": "Earned 400 upvotes for answers in the sql-server tag",
1142
+ "award_count": 16,
1143
+ "tag_based": true,
1144
+ "badges_recipients_url": "/badges/88"
1145
+ },
1146
+ {
1147
+ "badge_id": 118,
1148
+ "rank": "gold",
1149
+ "name": "sql-server",
1150
+ "description": "Earned 1000 upvotes for answers in the sql-server tag",
1151
+ "award_count": 4,
1152
+ "tag_based": true,
1153
+ "badges_recipients_url": "/badges/118"
1154
+ },
1155
+ {
1156
+ "badge_id": 128,
1157
+ "rank": "silver",
1158
+ "name": "sql-server-2005",
1159
+ "description": "Earned 400 upvotes for answers in the sql-server-2005 tag",
1160
+ "award_count": 4,
1161
+ "tag_based": true,
1162
+ "badges_recipients_url": "/badges/128"
1163
+ },
1164
+ {
1165
+ "badge_id": 158,
1166
+ "rank": "silver",
1167
+ "name": "stl",
1168
+ "description": "Earned 400 upvotes for answers in the stl tag",
1169
+ "award_count": 2,
1170
+ "tag_based": true,
1171
+ "badges_recipients_url": "/badges/158"
1172
+ },
1173
+ {
1174
+ "badge_id": 87,
1175
+ "rank": "silver",
1176
+ "name": "string",
1177
+ "description": "Earned 400 upvotes for answers in the string tag",
1178
+ "award_count": 1,
1179
+ "tag_based": true,
1180
+ "badges_recipients_url": "/badges/87"
1181
+ },
1182
+ {
1183
+ "badge_id": 77,
1184
+ "rank": "gold",
1185
+ "name": "subjective",
1186
+ "description": "Earned 1000 upvotes for answers in the subjective tag",
1187
+ "award_count": 2,
1188
+ "tag_based": true,
1189
+ "badges_recipients_url": "/badges/77"
1190
+ },
1191
+ {
1192
+ "badge_id": 45,
1193
+ "rank": "silver",
1194
+ "name": "subjective",
1195
+ "description": "Earned 400 upvotes for answers in the subjective tag",
1196
+ "award_count": 13,
1197
+ "tag_based": true,
1198
+ "badges_recipients_url": "/badges/45"
1199
+ },
1200
+ {
1201
+ "badge_id": 159,
1202
+ "rank": "silver",
1203
+ "name": "subsonic",
1204
+ "description": "Earned 400 upvotes for answers in the subsonic tag",
1205
+ "award_count": 1,
1206
+ "tag_based": true,
1207
+ "badges_recipients_url": "/badges/159"
1208
+ },
1209
+ {
1210
+ "badge_id": 98,
1211
+ "rank": "silver",
1212
+ "name": "svn",
1213
+ "description": "Earned 400 upvotes for answers in the svn tag",
1214
+ "award_count": 2,
1215
+ "tag_based": true,
1216
+ "badges_recipients_url": "/badges/98"
1217
+ },
1218
+ {
1219
+ "badge_id": 109,
1220
+ "rank": "silver",
1221
+ "name": "templates",
1222
+ "description": "Earned 400 upvotes for answers in the templates tag",
1223
+ "award_count": 1,
1224
+ "tag_based": true,
1225
+ "badges_recipients_url": "/badges/109"
1226
+ },
1227
+ {
1228
+ "badge_id": 139,
1229
+ "rank": "silver",
1230
+ "name": "tsql",
1231
+ "description": "Earned 400 upvotes for answers in the tsql tag",
1232
+ "award_count": 4,
1233
+ "tag_based": true,
1234
+ "badges_recipients_url": "/badges/139"
1235
+ },
1236
+ {
1237
+ "badge_id": 200,
1238
+ "rank": "gold",
1239
+ "name": "tsql",
1240
+ "description": "Earned 1000 upvotes for answers in the tsql tag",
1241
+ "award_count": 1,
1242
+ "tag_based": true,
1243
+ "badges_recipients_url": "/badges/200"
1244
+ },
1245
+ {
1246
+ "badge_id": 130,
1247
+ "rank": "silver",
1248
+ "name": "unit-testing",
1249
+ "description": "Earned 400 upvotes for answers in the unit-testing tag",
1250
+ "award_count": 3,
1251
+ "tag_based": true,
1252
+ "badges_recipients_url": "/badges/130"
1253
+ },
1254
+ {
1255
+ "badge_id": 154,
1256
+ "rank": "gold",
1257
+ "name": "vb.net",
1258
+ "description": "Earned 1000 upvotes for answers in the vb.net tag",
1259
+ "award_count": 1,
1260
+ "tag_based": true,
1261
+ "badges_recipients_url": "/badges/154"
1262
+ },
1263
+ {
1264
+ "badge_id": 58,
1265
+ "rank": "silver",
1266
+ "name": "vb.net",
1267
+ "description": "Earned 400 upvotes for answers in the vb.net tag",
1268
+ "award_count": 4,
1269
+ "tag_based": true,
1270
+ "badges_recipients_url": "/badges/58"
1271
+ },
1272
+ {
1273
+ "badge_id": 166,
1274
+ "rank": "silver",
1275
+ "name": "version-control",
1276
+ "description": "Earned 400 upvotes for answers in the version-control tag",
1277
+ "award_count": 2,
1278
+ "tag_based": true,
1279
+ "badges_recipients_url": "/badges/166"
1280
+ },
1281
+ {
1282
+ "badge_id": 101,
1283
+ "rank": "silver",
1284
+ "name": "visual-studio",
1285
+ "description": "Earned 400 upvotes for answers in the visual-studio tag",
1286
+ "award_count": 2,
1287
+ "tag_based": true,
1288
+ "badges_recipients_url": "/badges/101"
1289
+ },
1290
+ {
1291
+ "badge_id": 203,
1292
+ "rank": "silver",
1293
+ "name": "visual-studio-2008",
1294
+ "description": "Earned 400 upvotes for answers in the visual-studio-2008 tag",
1295
+ "award_count": 1,
1296
+ "tag_based": true,
1297
+ "badges_recipients_url": "/badges/203"
1298
+ },
1299
+ {
1300
+ "badge_id": 112,
1301
+ "rank": "silver",
1302
+ "name": "wcf",
1303
+ "description": "Earned 400 upvotes for answers in the wcf tag",
1304
+ "award_count": 1,
1305
+ "tag_based": true,
1306
+ "badges_recipients_url": "/badges/112"
1307
+ },
1308
+ {
1309
+ "badge_id": 187,
1310
+ "rank": "gold",
1311
+ "name": "wcf",
1312
+ "description": "Earned 1000 upvotes for answers in the wcf tag",
1313
+ "award_count": 1,
1314
+ "tag_based": true,
1315
+ "badges_recipients_url": "/badges/187"
1316
+ },
1317
+ {
1318
+ "badge_id": 138,
1319
+ "rank": "silver",
1320
+ "name": "windows-mobile",
1321
+ "description": "Earned 400 upvotes for answers in the windows-mobile tag",
1322
+ "award_count": 1,
1323
+ "tag_based": true,
1324
+ "badges_recipients_url": "/badges/138"
1325
+ },
1326
+ {
1327
+ "badge_id": 149,
1328
+ "rank": "silver",
1329
+ "name": "winforms",
1330
+ "description": "Earned 400 upvotes for answers in the winforms tag",
1331
+ "award_count": 2,
1332
+ "tag_based": true,
1333
+ "badges_recipients_url": "/badges/149"
1334
+ },
1335
+ {
1336
+ "badge_id": 164,
1337
+ "rank": "gold",
1338
+ "name": "wpf",
1339
+ "description": "Earned 1000 upvotes for answers in the wpf tag",
1340
+ "award_count": 1,
1341
+ "tag_based": true,
1342
+ "badges_recipients_url": "/badges/164"
1343
+ },
1344
+ {
1345
+ "badge_id": 76,
1346
+ "rank": "silver",
1347
+ "name": "wpf",
1348
+ "description": "Earned 400 upvotes for answers in the wpf tag",
1349
+ "award_count": 6,
1350
+ "tag_based": true,
1351
+ "badges_recipients_url": "/badges/76"
1352
+ },
1353
+ {
1354
+ "badge_id": 105,
1355
+ "rank": "silver",
1356
+ "name": "xml",
1357
+ "description": "Earned 400 upvotes for answers in the xml tag",
1358
+ "award_count": 4,
1359
+ "tag_based": true,
1360
+ "badges_recipients_url": "/badges/105"
1361
+ },
1362
+ {
1363
+ "badge_id": 153,
1364
+ "rank": "silver",
1365
+ "name": "xslt",
1366
+ "description": "Earned 400 upvotes for answers in the xslt tag",
1367
+ "award_count": 2,
1368
+ "tag_based": true,
1369
+ "badges_recipients_url": "/badges/153"
1370
+ }
1371
+ ]
1372
+ }