dotapedia 0.0.1b
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.
- checksums.yaml +7 -0
- data/lib/dota_object.rb +8 -0
- data/lib/dotapedia.rb +87 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e15df7e668bc349982fc621b1ed6f4ccedcb46bf9cd43917018665b1d0cda6f6
|
4
|
+
data.tar.gz: d0aff35be74550174b862d2af629c58188b1c8c8b8916e709348518118d12b2a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b982fa24987a6cc95ac5425f57204540734e6e8e14bccdf5164f71830ec985386b8f16ebcf5d06e963c09baf2840d2170aa3f639ee04c24b0738dbb4817fbeb4
|
7
|
+
data.tar.gz: 309a4cc5599d6631dc80deab634c7e4986b3eb05a1c89205c70e785455e054871a9d2867f2d9ae4b830aa85a8b8fa9ff2b29a68243c9856f5d634e70ba816399
|
data/lib/dota_object.rb
ADDED
data/lib/dotapedia.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
class Dotapedia
|
2
|
+
require "net/http"
|
3
|
+
require "json"
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + "/dota_object")
|
5
|
+
|
6
|
+
def initialize(base_url: "https://api.opendota.com/api")
|
7
|
+
@base_url = base_url
|
8
|
+
end
|
9
|
+
|
10
|
+
def teams(query = {})
|
11
|
+
request = api_request('/teams')
|
12
|
+
json_data = request[:json]
|
13
|
+
struct_name = 'Team'
|
14
|
+
create_dota_object_struct(struct_name, json_data[0].keys)
|
15
|
+
result = create_struct(struct_name, json_data)
|
16
|
+
filter_struct(result, query)
|
17
|
+
result
|
18
|
+
end
|
19
|
+
|
20
|
+
def pro_players(query = {})
|
21
|
+
request = api_request('/proPlayers')
|
22
|
+
json_data = request[:json]
|
23
|
+
struct_name = 'ProPlayer'
|
24
|
+
create_dota_object_struct(struct_name, json_data[0].keys)
|
25
|
+
result = create_struct(struct_name, json_data)
|
26
|
+
filter_struct(result, query)
|
27
|
+
result
|
28
|
+
end
|
29
|
+
|
30
|
+
def request(url)
|
31
|
+
api_request(url)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def create_dota_object_struct(struct_name, keys)
|
37
|
+
DotaObject.define_struct(struct_name, keys)
|
38
|
+
end
|
39
|
+
|
40
|
+
def create_struct(struct_name, json_data)
|
41
|
+
object = DotaObject.const_get struct_name
|
42
|
+
filtered_json = json_data
|
43
|
+
filtered_json.map do |json|
|
44
|
+
object.new(*json.values)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def filter_struct(structs, query)
|
49
|
+
query.each do |key, value|
|
50
|
+
structs.reject! { |x| x.send(key) != value }
|
51
|
+
end
|
52
|
+
structs
|
53
|
+
end
|
54
|
+
|
55
|
+
def api_request(url)
|
56
|
+
uri = URI.parse(@base_url + url)
|
57
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
58
|
+
initheader = {'Content-Type' => 'application/json'}
|
59
|
+
http.use_ssl = true if @base_url =~ /^https/
|
60
|
+
request = Net::HTTP::Get.new(uri.path, initheader)
|
61
|
+
response = http.request(request)
|
62
|
+
if response.body
|
63
|
+
begin
|
64
|
+
{:status => response.code, :json => recursive_symbolize_keys(JSON.load(response.body))}
|
65
|
+
rescue
|
66
|
+
response.body
|
67
|
+
end
|
68
|
+
else
|
69
|
+
response.code
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def recursive_symbolize_keys(data)
|
74
|
+
case data
|
75
|
+
when Hash
|
76
|
+
Hash[
|
77
|
+
data.map do |k, v|
|
78
|
+
[ k.respond_to?(:to_sym) ? k.to_sym : k, recursive_symbolize_keys(v) ]
|
79
|
+
end
|
80
|
+
]
|
81
|
+
when Enumerable
|
82
|
+
data.map { |v| recursive_symbolize_keys(v) }
|
83
|
+
else
|
84
|
+
data
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dotapedia
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1b
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Irfandi Achmad
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-12-21 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Dota 2 api sdk for opendota.com
|
14
|
+
email: irfandiofficial32@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/dota_object.rb
|
20
|
+
- lib/dotapedia.rb
|
21
|
+
homepage: http://rubygems.org/gems/dotapedia
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">"
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: 1.3.1
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.7.6
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: Dotapedia[beta]
|
45
|
+
test_files: []
|