pilha 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/pilha.rb +7 -10
- data/lib/pilha/stack_overflow/answer.rb +7 -8
- data/lib/pilha/stack_overflow/badge.rb +8 -6
- data/lib/pilha/stack_overflow/base.rb +27 -0
- data/lib/pilha/stack_overflow/comment.rb +21 -9
- data/lib/pilha/stack_overflow/question.rb +41 -0
- data/lib/pilha/stack_overflow/statistics.rb +7 -6
- data/lib/pilha/stack_overflow/user.rb +5 -8
- data/pilha.gemspec +8 -21
- data/spec/fixtures/answer_comments.json +37 -0
- data/spec/fixtures/answers_by_question_id.json +430 -0
- data/spec/fixtures/answers_by_question_id.json.gz +0 -0
- data/spec/fixtures/badges_name.json +400 -0
- data/spec/fixtures/badges_name.json.gz +0 -0
- data/spec/fixtures/comments_by_mentioned_user_id.json +117 -0
- data/spec/fixtures/comments_by_mentioned_user_id.json.gz +0 -0
- data/spec/fixtures/comments_by_question_id.json +22 -0
- data/spec/fixtures/comments_by_question_id.json.gz +0 -0
- data/spec/fixtures/comments_by_user_id.json +464 -0
- data/spec/fixtures/comments_by_user_id.json.gz +0 -0
- data/spec/fixtures/comments_by_user_id_to_mentioned_user_id.json.gz +0 -0
- data/spec/fixtures/comments_by_user_to_mentioned_user.json +29 -0
- data/spec/fixtures/comments_by_user_to_mentioned_user.json.gz +0 -0
- data/spec/fixtures/comments_by_user_to_mentioned_user_id.json.gz +0 -0
- data/spec/fixtures/question_by_id.json +162 -0
- data/spec/fixtures/question_by_id.json.gz +0 -0
- data/spec/fixtures/question_by_id_with_body.json +169 -0
- data/spec/fixtures/question_by_id_with_body.json.gz +0 -0
- data/spec/fixtures/question_by_user_id.json.gz +0 -0
- data/spec/fixtures/questions.json +1773 -0
- data/spec/fixtures/questions.json.gz +0 -0
- data/spec/fixtures/questions.part +859 -0
- data/spec/fixtures/questions_by_user_id.json +35 -0
- data/spec/fixtures/questions_by_user_id.json.gz +0 -0
- data/spec/fixtures/users.json +983 -0
- data/spec/fixtures/users_by_id.json +40 -0
- data/spec/fixtures/users_by_id.json.gz +0 -0
- data/spec/pilha/stack_overflow/badge_spec.rb +3 -3
- data/spec/pilha/stack_overflow/comment_spec.rb +52 -1
- data/spec/pilha/stack_overflow/question_spec.rb +63 -0
- data/spec/pilha/stack_overflow/stack_overflow_spec.rb +2 -4
- data/spec/spec_helper.rb +7 -1
- metadata +53 -22
data/lib/pilha.rb
CHANGED
@@ -13,6 +13,7 @@ require 'pilha/stack_overflow/badge'
|
|
13
13
|
require 'pilha/stack_overflow/user'
|
14
14
|
require 'pilha/stack_overflow/answer'
|
15
15
|
require 'pilha/stack_overflow/comment'
|
16
|
+
require 'pilha/stack_overflow/question'
|
16
17
|
|
17
18
|
module StackExchange
|
18
19
|
|
@@ -31,7 +32,7 @@ module StackExchange
|
|
31
32
|
yield options if block_given?
|
32
33
|
|
33
34
|
client = Client.new(options)
|
34
|
-
include_client(client, Badge, Statistics, User, Answer, Comment)
|
35
|
+
include_client(client, Badge, Statistics, User, Answer, Comment, Question)
|
35
36
|
end
|
36
37
|
|
37
38
|
def include_client(client, *classes)
|
@@ -48,7 +49,7 @@ module StackExchange
|
|
48
49
|
end
|
49
50
|
|
50
51
|
def api_method_path(pattern, options = {})
|
51
|
-
pattern
|
52
|
+
pattern = normalize(pattern)
|
52
53
|
parts = pattern.split('/').select { |part| part =~ /^:/ }
|
53
54
|
|
54
55
|
parts.each do |part|
|
@@ -66,7 +67,7 @@ module StackExchange
|
|
66
67
|
|
67
68
|
def get(url)
|
68
69
|
stream = open(url) { |stream| Zlib::GzipReader.new(stream).read }
|
69
|
-
JSON.parse
|
70
|
+
JSON.parse(stream)
|
70
71
|
end
|
71
72
|
|
72
73
|
def root_path
|
@@ -74,18 +75,14 @@ module StackExchange
|
|
74
75
|
end
|
75
76
|
|
76
77
|
def request(path, options)
|
77
|
-
get
|
78
|
+
get api_method_url(path, options)
|
78
79
|
end
|
79
80
|
|
80
81
|
private
|
81
|
-
def key?
|
82
|
-
!!@api_key
|
83
|
-
end
|
84
|
-
|
85
82
|
def query_string(options)
|
86
|
-
params = options[:query]
|
87
|
-
if params
|
83
|
+
if params = options[:query]
|
88
84
|
params = params.sort_by { |k, v| k.to_s }
|
85
|
+
|
89
86
|
'?' + params.inject([]) do |arr, (key, value)|
|
90
87
|
arr << "#{key}=#{value}"
|
91
88
|
end.join('&')
|
@@ -22,15 +22,14 @@ module StackExchange
|
|
22
22
|
request('/questions/:id/answers', id, options)
|
23
23
|
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
parse_with_class(answer, 'owner', User)
|
30
|
-
end
|
31
|
-
parse_with_class(response, 'answers', Answer)
|
32
|
-
OpenStruct.new response
|
25
|
+
def parse(response)
|
26
|
+
response['answers'].each do |answer|
|
27
|
+
parse_with_class(answer, 'comments', Comment)
|
28
|
+
parse_with_class(answer, 'owner', User)
|
33
29
|
end
|
30
|
+
parse_with_class(response, 'answers', Answer)
|
31
|
+
OpenStruct.new response
|
32
|
+
end
|
34
33
|
end
|
35
34
|
|
36
35
|
def initialize(hash)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module StackExchange
|
2
2
|
module StackOverflow
|
3
|
-
class Badge
|
3
|
+
class Badge < Base
|
4
4
|
|
5
5
|
extend Forwardable
|
6
6
|
|
@@ -11,16 +11,19 @@ module StackExchange
|
|
11
11
|
attr_reader :client
|
12
12
|
|
13
13
|
def all(options = {})
|
14
|
-
method = select_method
|
15
|
-
|
16
|
-
badges = response['badges']
|
17
|
-
badges.map { |badge| Badge.new badge }
|
14
|
+
method = select_method(options)
|
15
|
+
request(method, nil, options)
|
18
16
|
end
|
19
17
|
|
20
18
|
def select_method(options)
|
21
19
|
tag_based = options[:tag_based] || options['tag_based']
|
22
20
|
tag_based ? '/badges/tags' : '/badges'
|
23
21
|
end
|
22
|
+
|
23
|
+
def parse(response)
|
24
|
+
response['badges'] = response['badges'].map { |badge| Badge.new badge }
|
25
|
+
OpenStruct.new response
|
26
|
+
end
|
24
27
|
end
|
25
28
|
|
26
29
|
def initialize(hash)
|
@@ -30,7 +33,6 @@ module StackExchange
|
|
30
33
|
def id
|
31
34
|
@struct.badge_id
|
32
35
|
end
|
33
|
-
|
34
36
|
end
|
35
37
|
end
|
36
38
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module StackExchange
|
2
|
+
module StackOverflow
|
3
|
+
class Base
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def parse_with_class(hash, key, klass)
|
7
|
+
case hash[key]
|
8
|
+
when Hash
|
9
|
+
hash[key] = klass.new(hash[key])
|
10
|
+
when Array
|
11
|
+
hash[key] = hash[key].map { |value| klass.new(value) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def request(path_pattern, id, options)
|
16
|
+
options.merge! :id => id if id
|
17
|
+
parse client.request(path_pattern, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def client
|
21
|
+
StackExchange::StackOverflow::Client.config unless @client
|
22
|
+
@client
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -9,7 +9,7 @@ module StackExchange
|
|
9
9
|
class << self
|
10
10
|
attr_reader :client
|
11
11
|
|
12
|
-
def
|
12
|
+
def find(id, options = {})
|
13
13
|
request('/comments/:id/', id, options)
|
14
14
|
end
|
15
15
|
|
@@ -18,17 +18,25 @@ module StackExchange
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def find_by_user_id(id, options = {})
|
21
|
-
|
21
|
+
if options[:to_user]
|
22
|
+
request('/users/:id/comments/:to_user', id, options)
|
23
|
+
else
|
24
|
+
request('/users/:id/comments', id, options)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_by_mentioned_user_id(id, options = {})
|
29
|
+
request('/users/:id/mentioned', id, options)
|
22
30
|
end
|
23
31
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
parse_with_class(response, 'comments', Comment)
|
30
|
-
OpenStruct.new response
|
32
|
+
def parse(response)
|
33
|
+
response['comments'].each do |comment|
|
34
|
+
parse_with_class(comment, 'owner', User)
|
35
|
+
parse_with_class(comment, 'reply_to_user', User)
|
31
36
|
end
|
37
|
+
parse_with_class(response, 'comments', Comment)
|
38
|
+
OpenStruct.new response
|
39
|
+
end
|
32
40
|
end
|
33
41
|
|
34
42
|
def initialize(hash)
|
@@ -38,6 +46,10 @@ module StackExchange
|
|
38
46
|
def id
|
39
47
|
@struct.comment_id
|
40
48
|
end
|
49
|
+
|
50
|
+
def mentioned_user
|
51
|
+
@struct.reply_to_user
|
52
|
+
end
|
41
53
|
end
|
42
54
|
end
|
43
55
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module StackExchange
|
2
|
+
module StackOverflow
|
3
|
+
class Question < Base
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
def_delegators :@struct, :question_id, :tags, :creation_date, :last_activity_date,
|
7
|
+
:up_vote_count, :down_vote_count, :view_count, :score,
|
8
|
+
:community_owned, :title, :body, :answers, :answer_count,
|
9
|
+
:accepted_answer_id, :favorite_count, :question_timeline_url,
|
10
|
+
:question_comments_url, :question_answers_url, :owner
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr_reader :client
|
14
|
+
|
15
|
+
def find(id, options = {})
|
16
|
+
request('/questions/:id/', id, options).questions.first
|
17
|
+
end
|
18
|
+
|
19
|
+
def find_by_user_id(id, options = {})
|
20
|
+
request('/users/:id/questions', id, options)
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse(response)
|
24
|
+
response['questions'].each do |comment|
|
25
|
+
parse_with_class(comment, 'owner', User)
|
26
|
+
end
|
27
|
+
parse_with_class(response, 'questions', Question)
|
28
|
+
OpenStruct.new response
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(hash)
|
33
|
+
@struct = OpenStruct.new hash
|
34
|
+
end
|
35
|
+
|
36
|
+
def id
|
37
|
+
@struct.question_id
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module StackExchange
|
2
2
|
module StackOverflow
|
3
|
-
|
4
|
-
class Statistics
|
3
|
+
class Statistics < Base
|
5
4
|
|
6
5
|
extend Forwardable
|
7
6
|
|
@@ -18,12 +17,14 @@ module StackExchange
|
|
18
17
|
attr_reader :client
|
19
18
|
|
20
19
|
def all(options = {})
|
21
|
-
|
22
|
-
stats = response['statistics'].first
|
23
|
-
Statistics.new stats
|
20
|
+
request('/stats', nil, options)
|
24
21
|
end
|
25
|
-
end
|
26
22
|
|
23
|
+
private
|
24
|
+
def parse(response)
|
25
|
+
Statistics.new response['statistics'].first
|
26
|
+
end
|
27
|
+
end
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module StackExchange
|
2
2
|
module StackOverflow
|
3
|
-
|
4
3
|
class User < Base
|
5
4
|
extend Forwardable
|
6
5
|
|
@@ -18,7 +17,7 @@ module StackExchange
|
|
18
17
|
attr_reader :client
|
19
18
|
|
20
19
|
def all(options = {})
|
21
|
-
|
20
|
+
request('/users', nil, options)
|
22
21
|
end
|
23
22
|
|
24
23
|
def find_by_badge_id(id, options = {})
|
@@ -29,12 +28,10 @@ module StackExchange
|
|
29
28
|
request('/users/:id', id, options).users.first
|
30
29
|
end
|
31
30
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
OpenStruct.new response
|
37
|
-
end
|
31
|
+
def parse(response)
|
32
|
+
parse_with_class(response, 'users', User)
|
33
|
+
OpenStruct.new response
|
34
|
+
end
|
38
35
|
end
|
39
36
|
|
40
37
|
def initialize(hash)
|
data/pilha.gemspec
CHANGED
@@ -1,43 +1,30 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = "pilha"
|
3
|
-
gem.version = "0.1.
|
3
|
+
gem.version = "0.1.6"
|
4
4
|
gem.authors = ["Dalto Curvelano Junior"]
|
5
5
|
gem.description = "A ruby wrapper to the Stack Exchange (Stack Overflow and friends) API."
|
6
6
|
gem.summary = "A ruby wrapper to the Stack Exchange (Stack Overflow and friends) API."
|
7
|
+
fixture_files = Dir["spec/fixtures/*"]
|
7
8
|
gem.files = [
|
8
9
|
"pilha.gemspec",
|
10
|
+
"lib/pilha.rb",
|
9
11
|
"lib/pilha/stack_overflow/badge.rb",
|
10
12
|
"lib/pilha/stack_overflow/statistics.rb",
|
11
13
|
"lib/pilha/stack_overflow/user.rb",
|
12
14
|
"lib/pilha/stack_overflow/comment.rb",
|
13
15
|
"lib/pilha/stack_overflow/answer.rb",
|
14
|
-
"lib/pilha.rb",
|
15
|
-
"
|
16
|
-
"spec/fixtures/stats.json.gz",
|
17
|
-
"spec/fixtures/badges.json",
|
18
|
-
"spec/fixtures/badges.json.gz",
|
19
|
-
"spec/fixtures/badges_by_id.json",
|
20
|
-
"spec/fixtures/badges_by_id.json.gz",
|
21
|
-
"spec/fixtures/badges_by_id_page2.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",
|
16
|
+
"lib/pilha/stack_overflow/question.rb",
|
17
|
+
"lib/pilha/stack_overflow/base.rb",
|
33
18
|
"spec/pilha/stack_overflow/badge_spec.rb",
|
34
19
|
"spec/pilha/stack_overflow/stack_overflow_spec.rb",
|
35
20
|
"spec/pilha/stack_overflow/statistics_spec.rb",
|
36
21
|
"spec/pilha/stack_overflow/user_spec.rb",
|
37
22
|
"spec/pilha/stack_overflow/comment_spec.rb",
|
38
23
|
"spec/pilha/stack_overflow/answer_spec.rb",
|
24
|
+
"spec/pilha/stack_overflow/question_spec.rb",
|
39
25
|
"spec/spec.opts",
|
40
|
-
"spec/spec_helper.rb"
|
26
|
+
"spec/spec_helper.rb",
|
27
|
+
*fixture_files
|
41
28
|
]
|
42
29
|
gem.homepage = "http://github.com/dlt/pilha"
|
43
30
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"total": 2,
|
3
|
+
"page": 1,
|
4
|
+
"pagesize": 30,
|
5
|
+
"comments": [
|
6
|
+
{
|
7
|
+
"comment_id": 303010,
|
8
|
+
"creation_date": 1233120361,
|
9
|
+
"owner": {
|
10
|
+
"user_id": 26,
|
11
|
+
"user_type": "registered",
|
12
|
+
"display_name": "Shawn Simon",
|
13
|
+
"reputation": 4848,
|
14
|
+
"email_hash": "f878a55e08bacee0af48852c29a02dc7"
|
15
|
+
},
|
16
|
+
"post_id": 555,
|
17
|
+
"post_type": "answer",
|
18
|
+
"score": 0,
|
19
|
+
"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"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"comment_id": 278816,
|
23
|
+
"creation_date": 1232410823,
|
24
|
+
"owner": {
|
25
|
+
"user_id": 13834,
|
26
|
+
"user_type": "registered",
|
27
|
+
"display_name": "Kevin Loney",
|
28
|
+
"reputation": 1971,
|
29
|
+
"email_hash": "10f6e15abcf7ed8ca175fd8507e3c19b"
|
30
|
+
},
|
31
|
+
"post_id": 555,
|
32
|
+
"post_type": "answer",
|
33
|
+
"score": 0,
|
34
|
+
"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."
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
@@ -0,0 +1,430 @@
|
|
1
|
+
{
|
2
|
+
"total": 20,
|
3
|
+
"page": 1,
|
4
|
+
"pagesize": 30,
|
5
|
+
"answers": [
|
6
|
+
{
|
7
|
+
"answer_id": 2801312,
|
8
|
+
"accepted": false,
|
9
|
+
"answer_comments_url": "/answers/2801312/comments",
|
10
|
+
"question_id": 549,
|
11
|
+
"owner": {
|
12
|
+
"user_id": 97162,
|
13
|
+
"user_type": "registered",
|
14
|
+
"display_name": "Manabenz",
|
15
|
+
"reputation": 28,
|
16
|
+
"email_hash": "f8ba829f1f8b4530dedf3d03e05996dc"
|
17
|
+
},
|
18
|
+
"creation_date": 1273480517,
|
19
|
+
"last_activity_date": 1273480517,
|
20
|
+
"up_vote_count": 0,
|
21
|
+
"down_vote_count": 0,
|
22
|
+
"view_count": 5384,
|
23
|
+
"score": 0,
|
24
|
+
"community_owned": true,
|
25
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"answer_id": 552,
|
29
|
+
"accepted": false,
|
30
|
+
"answer_comments_url": "/answers/552/comments",
|
31
|
+
"question_id": 549,
|
32
|
+
"owner": {
|
33
|
+
"user_id": 136,
|
34
|
+
"user_type": "registered",
|
35
|
+
"display_name": "Michiel de Mare",
|
36
|
+
"reputation": 3758,
|
37
|
+
"email_hash": "7c45f63f61e478233f0c2ad3006b178c"
|
38
|
+
},
|
39
|
+
"creation_date": 1217707505,
|
40
|
+
"last_edit_date": 1263840731,
|
41
|
+
"last_activity_date": 1263840731,
|
42
|
+
"up_vote_count": 16,
|
43
|
+
"down_vote_count": 3,
|
44
|
+
"view_count": 5384,
|
45
|
+
"score": 13,
|
46
|
+
"community_owned": false,
|
47
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"answer_id": 555,
|
51
|
+
"accepted": false,
|
52
|
+
"answer_comments_url": "/answers/555/comments",
|
53
|
+
"question_id": 549,
|
54
|
+
"owner": {
|
55
|
+
"user_id": 136,
|
56
|
+
"user_type": "registered",
|
57
|
+
"display_name": "Michiel de Mare",
|
58
|
+
"reputation": 3758,
|
59
|
+
"email_hash": "7c45f63f61e478233f0c2ad3006b178c"
|
60
|
+
},
|
61
|
+
"creation_date": 1217709645,
|
62
|
+
"last_edit_date": 1236727932,
|
63
|
+
"last_activity_date": 1236727932,
|
64
|
+
"up_vote_count": 23,
|
65
|
+
"down_vote_count": 0,
|
66
|
+
"view_count": 5384,
|
67
|
+
"score": 23,
|
68
|
+
"community_owned": true,
|
69
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
70
|
+
},
|
71
|
+
{
|
72
|
+
"answer_id": 477579,
|
73
|
+
"accepted": false,
|
74
|
+
"answer_comments_url": "/answers/477579/comments",
|
75
|
+
"question_id": 549,
|
76
|
+
"owner": {
|
77
|
+
"user_id": 57068,
|
78
|
+
"user_type": "registered",
|
79
|
+
"display_name": "Jens Roland",
|
80
|
+
"reputation": 4900,
|
81
|
+
"email_hash": "eafc9ff73a64e9d0d6f949c77d6135b7"
|
82
|
+
},
|
83
|
+
"creation_date": 1232882907,
|
84
|
+
"last_edit_date": 1234515755,
|
85
|
+
"last_activity_date": 1234515755,
|
86
|
+
"up_vote_count": 13,
|
87
|
+
"down_vote_count": 0,
|
88
|
+
"view_count": 5384,
|
89
|
+
"score": 13,
|
90
|
+
"community_owned": false,
|
91
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
92
|
+
},
|
93
|
+
{
|
94
|
+
"answer_id": 477586,
|
95
|
+
"accepted": false,
|
96
|
+
"answer_comments_url": "/answers/477586/comments",
|
97
|
+
"question_id": 549,
|
98
|
+
"owner": {
|
99
|
+
"user_id": 57068,
|
100
|
+
"user_type": "registered",
|
101
|
+
"display_name": "Jens Roland",
|
102
|
+
"reputation": 4900,
|
103
|
+
"email_hash": "eafc9ff73a64e9d0d6f949c77d6135b7"
|
104
|
+
},
|
105
|
+
"creation_date": 1232883064,
|
106
|
+
"last_edit_date": 1234457020,
|
107
|
+
"last_activity_date": 1234457020,
|
108
|
+
"up_vote_count": 4,
|
109
|
+
"down_vote_count": 0,
|
110
|
+
"view_count": 5384,
|
111
|
+
"score": 4,
|
112
|
+
"community_owned": false,
|
113
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
114
|
+
},
|
115
|
+
{
|
116
|
+
"answer_id": 477585,
|
117
|
+
"accepted": false,
|
118
|
+
"answer_comments_url": "/answers/477585/comments",
|
119
|
+
"question_id": 549,
|
120
|
+
"owner": {
|
121
|
+
"user_id": 57068,
|
122
|
+
"user_type": "registered",
|
123
|
+
"display_name": "Jens Roland",
|
124
|
+
"reputation": 4900,
|
125
|
+
"email_hash": "eafc9ff73a64e9d0d6f949c77d6135b7"
|
126
|
+
},
|
127
|
+
"creation_date": 1232883019,
|
128
|
+
"last_edit_date": 1234456963,
|
129
|
+
"last_activity_date": 1234456963,
|
130
|
+
"up_vote_count": 11,
|
131
|
+
"down_vote_count": 0,
|
132
|
+
"view_count": 5384,
|
133
|
+
"score": 11,
|
134
|
+
"community_owned": false,
|
135
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
136
|
+
},
|
137
|
+
{
|
138
|
+
"answer_id": 477584,
|
139
|
+
"accepted": false,
|
140
|
+
"answer_comments_url": "/answers/477584/comments",
|
141
|
+
"question_id": 549,
|
142
|
+
"owner": {
|
143
|
+
"user_id": 57068,
|
144
|
+
"user_type": "registered",
|
145
|
+
"display_name": "Jens Roland",
|
146
|
+
"reputation": 4900,
|
147
|
+
"email_hash": "eafc9ff73a64e9d0d6f949c77d6135b7"
|
148
|
+
},
|
149
|
+
"creation_date": 1232882995,
|
150
|
+
"last_edit_date": 1234456912,
|
151
|
+
"last_activity_date": 1234456912,
|
152
|
+
"up_vote_count": 8,
|
153
|
+
"down_vote_count": 0,
|
154
|
+
"view_count": 5384,
|
155
|
+
"score": 8,
|
156
|
+
"community_owned": false,
|
157
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
158
|
+
},
|
159
|
+
{
|
160
|
+
"answer_id": 477583,
|
161
|
+
"accepted": false,
|
162
|
+
"answer_comments_url": "/answers/477583/comments",
|
163
|
+
"question_id": 549,
|
164
|
+
"owner": {
|
165
|
+
"user_id": 57068,
|
166
|
+
"user_type": "registered",
|
167
|
+
"display_name": "Jens Roland",
|
168
|
+
"reputation": 4900,
|
169
|
+
"email_hash": "eafc9ff73a64e9d0d6f949c77d6135b7"
|
170
|
+
},
|
171
|
+
"creation_date": 1232882960,
|
172
|
+
"last_edit_date": 1234456725,
|
173
|
+
"last_activity_date": 1234456725,
|
174
|
+
"up_vote_count": 9,
|
175
|
+
"down_vote_count": 0,
|
176
|
+
"view_count": 5384,
|
177
|
+
"score": 9,
|
178
|
+
"community_owned": false,
|
179
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
180
|
+
},
|
181
|
+
{
|
182
|
+
"answer_id": 477580,
|
183
|
+
"accepted": false,
|
184
|
+
"answer_comments_url": "/answers/477580/comments",
|
185
|
+
"question_id": 549,
|
186
|
+
"owner": {
|
187
|
+
"user_id": 57068,
|
188
|
+
"user_type": "registered",
|
189
|
+
"display_name": "Jens Roland",
|
190
|
+
"reputation": 4900,
|
191
|
+
"email_hash": "eafc9ff73a64e9d0d6f949c77d6135b7"
|
192
|
+
},
|
193
|
+
"creation_date": 1232882928,
|
194
|
+
"last_edit_date": 1234456607,
|
195
|
+
"last_activity_date": 1234456607,
|
196
|
+
"up_vote_count": 11,
|
197
|
+
"down_vote_count": 0,
|
198
|
+
"view_count": 5384,
|
199
|
+
"score": 11,
|
200
|
+
"community_owned": false,
|
201
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
202
|
+
},
|
203
|
+
{
|
204
|
+
"answer_id": 477578,
|
205
|
+
"accepted": true,
|
206
|
+
"answer_comments_url": "/answers/477578/comments",
|
207
|
+
"question_id": 549,
|
208
|
+
"owner": {
|
209
|
+
"user_id": 57068,
|
210
|
+
"user_type": "registered",
|
211
|
+
"display_name": "Jens Roland",
|
212
|
+
"reputation": 4900,
|
213
|
+
"email_hash": "eafc9ff73a64e9d0d6f949c77d6135b7"
|
214
|
+
},
|
215
|
+
"creation_date": 1232882866,
|
216
|
+
"last_edit_date": 1234456201,
|
217
|
+
"last_activity_date": 1234456201,
|
218
|
+
"up_vote_count": 29,
|
219
|
+
"down_vote_count": 0,
|
220
|
+
"view_count": 5384,
|
221
|
+
"score": 29,
|
222
|
+
"community_owned": false,
|
223
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
224
|
+
},
|
225
|
+
{
|
226
|
+
"answer_id": 477576,
|
227
|
+
"accepted": false,
|
228
|
+
"answer_comments_url": "/answers/477576/comments",
|
229
|
+
"question_id": 549,
|
230
|
+
"owner": {
|
231
|
+
"user_id": 57068,
|
232
|
+
"user_type": "registered",
|
233
|
+
"display_name": "Jens Roland",
|
234
|
+
"reputation": 4900,
|
235
|
+
"email_hash": "eafc9ff73a64e9d0d6f949c77d6135b7"
|
236
|
+
},
|
237
|
+
"creation_date": 1232882798,
|
238
|
+
"last_activity_date": 1232882798,
|
239
|
+
"up_vote_count": 5,
|
240
|
+
"down_vote_count": 0,
|
241
|
+
"view_count": 5384,
|
242
|
+
"score": 5,
|
243
|
+
"community_owned": false,
|
244
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
245
|
+
},
|
246
|
+
{
|
247
|
+
"answer_id": 100522,
|
248
|
+
"accepted": false,
|
249
|
+
"answer_comments_url": "/answers/100522/comments",
|
250
|
+
"question_id": 549,
|
251
|
+
"owner": {
|
252
|
+
"user_id": 18642,
|
253
|
+
"user_type": "registered",
|
254
|
+
"display_name": "VP",
|
255
|
+
"reputation": 1319,
|
256
|
+
"email_hash": "ac35f0b2f290c9e5bfdcdd79f7126d9b"
|
257
|
+
},
|
258
|
+
"creation_date": 1221813500,
|
259
|
+
"last_activity_date": 1221813500,
|
260
|
+
"up_vote_count": 0,
|
261
|
+
"down_vote_count": 0,
|
262
|
+
"view_count": 5384,
|
263
|
+
"score": 0,
|
264
|
+
"community_owned": false,
|
265
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
266
|
+
},
|
267
|
+
{
|
268
|
+
"answer_id": 96101,
|
269
|
+
"accepted": false,
|
270
|
+
"answer_comments_url": "/answers/96101/comments",
|
271
|
+
"question_id": 549,
|
272
|
+
"owner": {
|
273
|
+
"user_id": 15467,
|
274
|
+
"user_type": "registered",
|
275
|
+
"display_name": "ja",
|
276
|
+
"reputation": 1399,
|
277
|
+
"email_hash": "357a20e8c56e69d6f9734d23ef9517e8"
|
278
|
+
},
|
279
|
+
"creation_date": 1221766512,
|
280
|
+
"last_activity_date": 1221766512,
|
281
|
+
"up_vote_count": 2,
|
282
|
+
"down_vote_count": 2,
|
283
|
+
"view_count": 5384,
|
284
|
+
"score": 0,
|
285
|
+
"community_owned": false,
|
286
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
287
|
+
},
|
288
|
+
{
|
289
|
+
"answer_id": 83980,
|
290
|
+
"accepted": false,
|
291
|
+
"answer_comments_url": "/answers/83980/comments",
|
292
|
+
"question_id": 549,
|
293
|
+
"owner": {
|
294
|
+
"user_id": 16023,
|
295
|
+
"user_type": "registered",
|
296
|
+
"display_name": "Asgeir S. Nilsen",
|
297
|
+
"reputation": 494,
|
298
|
+
"email_hash": "d9bd6d3fb9b5846e88e7677418a4d466"
|
299
|
+
},
|
300
|
+
"creation_date": 1221662587,
|
301
|
+
"last_activity_date": 1221662587,
|
302
|
+
"up_vote_count": 1,
|
303
|
+
"down_vote_count": 1,
|
304
|
+
"view_count": 5384,
|
305
|
+
"score": 0,
|
306
|
+
"community_owned": false,
|
307
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
308
|
+
},
|
309
|
+
{
|
310
|
+
"answer_id": 80838,
|
311
|
+
"accepted": false,
|
312
|
+
"answer_comments_url": "/answers/80838/comments",
|
313
|
+
"question_id": 549,
|
314
|
+
"creation_date": 1221636990,
|
315
|
+
"last_activity_date": 1221636990,
|
316
|
+
"up_vote_count": 3,
|
317
|
+
"down_vote_count": 0,
|
318
|
+
"view_count": 5384,
|
319
|
+
"score": 3,
|
320
|
+
"community_owned": false,
|
321
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
322
|
+
},
|
323
|
+
{
|
324
|
+
"answer_id": 54510,
|
325
|
+
"accepted": false,
|
326
|
+
"answer_comments_url": "/answers/54510/comments",
|
327
|
+
"question_id": 549,
|
328
|
+
"owner": {
|
329
|
+
"user_id": 4534,
|
330
|
+
"user_type": "registered",
|
331
|
+
"display_name": "hendry",
|
332
|
+
"reputation": 588,
|
333
|
+
"email_hash": "29ab3f223a10c7b19916ea38141da74d"
|
334
|
+
},
|
335
|
+
"creation_date": 1221062271,
|
336
|
+
"last_activity_date": 1221062271,
|
337
|
+
"up_vote_count": 2,
|
338
|
+
"down_vote_count": 0,
|
339
|
+
"view_count": 5384,
|
340
|
+
"score": 2,
|
341
|
+
"community_owned": false,
|
342
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
343
|
+
},
|
344
|
+
{
|
345
|
+
"answer_id": 50510,
|
346
|
+
"accepted": false,
|
347
|
+
"answer_comments_url": "/answers/50510/comments",
|
348
|
+
"question_id": 549,
|
349
|
+
"owner": {
|
350
|
+
"user_id": 3583,
|
351
|
+
"user_type": "registered",
|
352
|
+
"display_name": "Dmitry Shechtman",
|
353
|
+
"reputation": 656,
|
354
|
+
"email_hash": "3969f4d5c78f177c233b5335e7db29a7"
|
355
|
+
},
|
356
|
+
"creation_date": 1220903204,
|
357
|
+
"last_edit_date": 1220903743,
|
358
|
+
"last_activity_date": 1220903743,
|
359
|
+
"up_vote_count": 1,
|
360
|
+
"down_vote_count": 1,
|
361
|
+
"view_count": 5384,
|
362
|
+
"score": 0,
|
363
|
+
"community_owned": false,
|
364
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
365
|
+
},
|
366
|
+
{
|
367
|
+
"answer_id": 49347,
|
368
|
+
"accepted": false,
|
369
|
+
"answer_comments_url": "/answers/49347/comments",
|
370
|
+
"question_id": 549,
|
371
|
+
"owner": {
|
372
|
+
"user_id": 5058,
|
373
|
+
"user_type": "registered",
|
374
|
+
"display_name": "Bobby Jack",
|
375
|
+
"reputation": 2130,
|
376
|
+
"email_hash": "9b5c260dc8b7374186b3bebc28b08ce7"
|
377
|
+
},
|
378
|
+
"creation_date": 1220865017,
|
379
|
+
"last_activity_date": 1220865017,
|
380
|
+
"up_vote_count": 3,
|
381
|
+
"down_vote_count": 3,
|
382
|
+
"view_count": 5384,
|
383
|
+
"score": 0,
|
384
|
+
"community_owned": false,
|
385
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
386
|
+
},
|
387
|
+
{
|
388
|
+
"answer_id": 38933,
|
389
|
+
"accepted": false,
|
390
|
+
"answer_comments_url": "/answers/38933/comments",
|
391
|
+
"question_id": 549,
|
392
|
+
"owner": {
|
393
|
+
"user_id": 2976,
|
394
|
+
"user_type": "registered",
|
395
|
+
"display_name": "paan",
|
396
|
+
"reputation": 1636,
|
397
|
+
"email_hash": "f1f12dce3a058f3da675546821f1fff1"
|
398
|
+
},
|
399
|
+
"creation_date": 1220337424,
|
400
|
+
"last_activity_date": 1220337424,
|
401
|
+
"up_vote_count": 2,
|
402
|
+
"down_vote_count": 2,
|
403
|
+
"view_count": 5384,
|
404
|
+
"score": 0,
|
405
|
+
"community_owned": false,
|
406
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
407
|
+
},
|
408
|
+
{
|
409
|
+
"answer_id": 37014,
|
410
|
+
"accepted": false,
|
411
|
+
"answer_comments_url": "/answers/37014/comments",
|
412
|
+
"question_id": 549,
|
413
|
+
"owner": {
|
414
|
+
"user_id": 2443,
|
415
|
+
"user_type": "registered",
|
416
|
+
"display_name": "Allain Lalonde",
|
417
|
+
"reputation": 10034,
|
418
|
+
"email_hash": "2076f150ee7934e4033b0ab7c1a9c73f"
|
419
|
+
},
|
420
|
+
"creation_date": 1220207249,
|
421
|
+
"last_activity_date": 1220207249,
|
422
|
+
"up_vote_count": 10,
|
423
|
+
"down_vote_count": 6,
|
424
|
+
"view_count": 5384,
|
425
|
+
"score": 4,
|
426
|
+
"community_owned": false,
|
427
|
+
"title": "The Definitive Guide To Website Authentication (beta)"
|
428
|
+
}
|
429
|
+
]
|
430
|
+
}
|