lunker 0.0.4
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/lunker/paged_resource.rb +37 -0
- data/lib/lunker/utils.rb +8 -0
- data/lib/lunker.rb +69 -0
- metadata +58 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
3
|
+
module Lunker
|
4
|
+
module PagedResource
|
5
|
+
def get_paged_resource(url, limit=nil)
|
6
|
+
res = HTTParty.get url
|
7
|
+
|
8
|
+
raise 'bad get request' unless valid?(res)
|
9
|
+
|
10
|
+
data = []
|
11
|
+
page = 1
|
12
|
+
|
13
|
+
data = data.concat res['items']
|
14
|
+
while res['has_more']
|
15
|
+
|
16
|
+
res = HTTParty.get "#{url}&page=#{page}"
|
17
|
+
|
18
|
+
if valid?(res)
|
19
|
+
page += 1
|
20
|
+
data = data.concat res['items']
|
21
|
+
end
|
22
|
+
|
23
|
+
if limit && data.length > limit
|
24
|
+
break
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
Lunker.requests_remaining = res['quota_remaining']
|
29
|
+
|
30
|
+
data
|
31
|
+
end
|
32
|
+
|
33
|
+
def valid?(response)
|
34
|
+
response.kind_of?(Hash) && !response.has_key?('error')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/lunker/utils.rb
ADDED
data/lib/lunker.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'lunker/paged_resource'
|
3
|
+
require 'lunker/utils'
|
4
|
+
|
5
|
+
|
6
|
+
module Lunker
|
7
|
+
SO_URL = 'http://api.stackexchange.com/2.0'
|
8
|
+
|
9
|
+
class << self
|
10
|
+
attr_accessor :configuration, :requests_remaining
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.configure
|
14
|
+
self.configuration ||= Configuration.new
|
15
|
+
self.requests_remaining = 10000
|
16
|
+
yield(configuration) if block_given?
|
17
|
+
end
|
18
|
+
|
19
|
+
class Configuration
|
20
|
+
attr_accessor :api_key, :filter
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
@api_key = "bb855F7mbVFTS9Jwe69THg(("
|
24
|
+
# Default filter: we want the titles and bodies of questions, answers, comments
|
25
|
+
@filter = "!T5FUCxHumN2QdgS1Nc"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class StackOverflow
|
30
|
+
include Lunker::PagedResource
|
31
|
+
include Lunker::Utils
|
32
|
+
|
33
|
+
def initialize
|
34
|
+
end
|
35
|
+
|
36
|
+
def users(size_limit, parameters={:sort=>'reputation',:order =>'desc',:min =>'100000'})
|
37
|
+
parameters = {
|
38
|
+
:pagesize => "100",
|
39
|
+
:key => Lunker.configuration.api_key,
|
40
|
+
:site => "stackoverflow",
|
41
|
+
:filter => Lunker.configuration.filter
|
42
|
+
}.merge(parameters)
|
43
|
+
encoded_parameters = parameterize parameters
|
44
|
+
|
45
|
+
get_paged_resource "#{SO_URL}/users?#{encoded_parameters}", size_limit
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class User
|
50
|
+
include Lunker::PagedResource
|
51
|
+
def initialize(id)
|
52
|
+
@id = id
|
53
|
+
end
|
54
|
+
|
55
|
+
%w(answers questions comments).each do |meth|
|
56
|
+
define_method(meth) do |*sort|
|
57
|
+
url = "#{SO_URL}/users/#{@id}/#{meth}?pagesize=100&key=#{Lunker.configuration.api_key}&site=stackoverflow&filter=#{Lunker.configuration.filter}"
|
58
|
+
# Horribleness to allo an optional sort parameter
|
59
|
+
unless sort.empty?
|
60
|
+
url = "#{url}&sort=#{sort[0]}"
|
61
|
+
end
|
62
|
+
get_paged_resource url
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Set up defaults
|
69
|
+
Lunker.configure
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lunker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jamison Dance
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-29 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: httparty
|
16
|
+
requirement: &70317175589580 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70317175589580
|
25
|
+
description: See the summary.
|
26
|
+
email: jergason@gmail.com
|
27
|
+
executables: []
|
28
|
+
extensions: []
|
29
|
+
extra_rdoc_files: []
|
30
|
+
files:
|
31
|
+
- lib/lunker.rb
|
32
|
+
- lib/lunker/paged_resource.rb
|
33
|
+
- lib/lunker/utils.rb
|
34
|
+
homepage: https://github.com/jergason/lunker.git
|
35
|
+
licenses: []
|
36
|
+
post_install_message:
|
37
|
+
rdoc_options: []
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.9'
|
46
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
requirements: []
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 1.8.17
|
55
|
+
signing_key:
|
56
|
+
specification_version: 3
|
57
|
+
summary: A wrapper for the StackExchange API.
|
58
|
+
test_files: []
|