pilha 0.1.1 → 0.1.2

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/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
+ }