admiral_stats_parser 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -6
- data/lib/admiral_stats_parser/model/area_capture_info.rb +51 -4
- data/lib/admiral_stats_parser/model/character_list_info.rb +57 -0
- data/lib/admiral_stats_parser/model/equip_book_info.rb +1 -0
- data/lib/admiral_stats_parser/model/equip_list_info.rb +21 -9
- data/lib/admiral_stats_parser/model/personal_basic_info.rb +22 -2
- data/lib/admiral_stats_parser/model/tc_book_info.rb +1 -0
- data/lib/admiral_stats_parser/parser/personal_basic_info_parser.rb +23 -2
- data/lib/admiral_stats_parser/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc271aeb0bd7b05e05e5a2b7669d5b1fa0ad1608
|
4
|
+
data.tar.gz: 980774085dbc450097256409f8d3d90e5102de3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0c2fd5dff2512cb00aba64b976992f032c2b38bc25b63db24b1174bc29ac175a0060e5285fe84975bf807b9f6c9f09ed10e1eb450b609ec29244006e3e1a620
|
7
|
+
data.tar.gz: cfc325f69e5020f4c2885f83a2ead90ad12199ee91ac87f21de7f8fae7eee32f28fdad04d0964e065f1e59e7c23f6cfc4864c79a1e30f7293274dce9f8412ad7
|
data/README.md
CHANGED
@@ -21,12 +21,23 @@ Or install it yourself as:
|
|
21
21
|
## Usage
|
22
22
|
|
23
23
|
```
|
24
|
-
|
25
|
-
AdmiralStatsParser.
|
26
|
-
|
27
|
-
|
28
|
-
AdmiralStatsParser.
|
29
|
-
|
24
|
+
# 基本情報
|
25
|
+
AdmiralStatsParser.parse_personal_basic_info(json, api_version)
|
26
|
+
|
27
|
+
# 海域情報
|
28
|
+
AdmiralStatsParser.parse_area_capture_info(json, api_version)
|
29
|
+
|
30
|
+
# 艦娘図鑑
|
31
|
+
AdmiralStatsParser.parse_tc_book_info(json, api_version)
|
32
|
+
|
33
|
+
# 装備図鑑
|
34
|
+
AdmiralStatsParser.parse_equip_book_info(json, api_version)
|
35
|
+
|
36
|
+
# 艦娘一覧
|
37
|
+
AdmiralStatsParser.parse_character_list_info(json, api_version)
|
38
|
+
|
39
|
+
# 装備一覧
|
40
|
+
AdmiralStatsParser.parse_equip_list_info(json, api_version)
|
30
41
|
```
|
31
42
|
|
32
43
|
## Specification
|
@@ -1,10 +1,41 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# 海域情報
|
2
3
|
class AreaCaptureInfo
|
4
|
+
# 海域番号と海域名の対応関係
|
5
|
+
AREA_NAMES = {
|
6
|
+
1 => '鎮守府海域',
|
7
|
+
2 => '南西諸島海域',
|
8
|
+
3 => '北方海域',
|
9
|
+
4 => '西方海域',
|
10
|
+
}
|
11
|
+
|
12
|
+
# サブ海域番号と海域名の対応関係
|
13
|
+
AREA_SUB_NAMES = {
|
14
|
+
1 => {
|
15
|
+
1 => '鎮守府正面海域',
|
16
|
+
2 => '南西諸島沖',
|
17
|
+
3 => '製油所地帯沿岸',
|
18
|
+
4 => '南西諸島防衛戦',
|
19
|
+
},
|
20
|
+
2 => {
|
21
|
+
1 => 'カムラン半島',
|
22
|
+
2 => 'バシー島沖',
|
23
|
+
3 => '東部オリョール海',
|
24
|
+
4 => '沖ノ島海域',
|
25
|
+
},
|
26
|
+
3 => {
|
27
|
+
1 => 'モーレイ海哨戒',
|
28
|
+
2 => 'キス島撤退作戦',
|
29
|
+
3 => 'アルフォンシーノ方面進出',
|
30
|
+
4 => '北方海域艦隊決戦',
|
31
|
+
},
|
32
|
+
4 => {
|
33
|
+
1 => 'ジャム島攻略作戦',
|
34
|
+
2 => 'カレー洋制圧戦',
|
35
|
+
},
|
36
|
+
}
|
37
|
+
|
3
38
|
# 海域番号
|
4
|
-
# 1: 鎮守府海域
|
5
|
-
# 2: 南西諸島海域
|
6
|
-
# 3: 北方海域
|
7
|
-
# 4: 西方海域
|
8
39
|
attr_accessor :area_id
|
9
40
|
|
10
41
|
# サブ海域番号
|
@@ -57,4 +88,20 @@ class AreaCaptureInfo
|
|
57
88
|
# NOTCLEAR: 出撃可能だが未クリア
|
58
89
|
# NOOPEN: 出撃不可
|
59
90
|
attr_accessor :area_clear_state
|
91
|
+
|
92
|
+
# 海域を表す数値を、海域名に変換して返します。
|
93
|
+
def area_id_to_s
|
94
|
+
AREA_NAMES.include?(@area_id) ? AREA_NAMES[@area_id] : @area_id.to_s
|
95
|
+
end
|
96
|
+
|
97
|
+
# サブ海域を表す数値を、海域名に変換して返します。
|
98
|
+
def area_sub_id_to_s
|
99
|
+
return "#{@area_id}-#{@area_sub_id}" unless AREA_SUB_NAMES.include?(@area_id)
|
100
|
+
|
101
|
+
if AREA_SUB_NAMES[@area_id].include?(@area_sub_id)
|
102
|
+
AREA_SUB_NAMES[@area_id][@area_sub_id]
|
103
|
+
else
|
104
|
+
"#{@area_id}-#{@area_sub_id}"
|
105
|
+
end
|
106
|
+
end
|
60
107
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# 艦娘一覧
|
2
3
|
class CharacterListInfo
|
3
4
|
# 図鑑No.
|
4
5
|
attr_accessor :book_no
|
@@ -23,4 +24,60 @@ class CharacterListInfo
|
|
23
24
|
|
24
25
|
# 艦娘のステータス画像(横長の画像)のファイル名
|
25
26
|
attr_accessor :status_img
|
27
|
+
|
28
|
+
# 累計経験値表
|
29
|
+
EXP_TABLE = {
|
30
|
+
92 => 584500,
|
31
|
+
93 => 606500,
|
32
|
+
94 => 631500,
|
33
|
+
95 => 661500,
|
34
|
+
96 => 701500,
|
35
|
+
97 => 761500,
|
36
|
+
98 => 851500,
|
37
|
+
99 => 1000000,
|
38
|
+
}
|
39
|
+
|
40
|
+
# Lv を、これまでに取得した累計経験値に変換して返します。
|
41
|
+
# ただし、Lv をもとに計算する都合上、その Lv になってから取得した経験値は含みません。
|
42
|
+
# この累計経験値は、艦娘の経験値テーブルが、艦これの本家と同じと仮定して計算しています。
|
43
|
+
def lv_to_exp
|
44
|
+
case @lv
|
45
|
+
when 1..50
|
46
|
+
# Lv51までは、必要経験値が100ずつ増えていく
|
47
|
+
@lv * (@lv - 1) * 100 / 2
|
48
|
+
when 51..60
|
49
|
+
# Lv61までは、次レベルまでの必要経験値が200ずつ増えていく
|
50
|
+
a = 5000
|
51
|
+
d = 200
|
52
|
+
n = @lv - 50
|
53
|
+
# Lv50 までの累計経験値 = 122500
|
54
|
+
122500 + n * (2 * a + (n - 1) * d) / 2
|
55
|
+
when 61..70
|
56
|
+
# Lv71までは、次レベルまでの必要経験値が300ずつ増えていく
|
57
|
+
a = 7000
|
58
|
+
d = 300
|
59
|
+
n = @lv - 60
|
60
|
+
# Lv60 までの累計経験値 = 181500
|
61
|
+
181500 + n * (2 * a + (n - 1) * d) / 2
|
62
|
+
when 71..80
|
63
|
+
# Lv81までは、次レベルまでの必要経験値が400ずつ増えていく
|
64
|
+
a = 10000
|
65
|
+
d = 400
|
66
|
+
n = @lv - 70
|
67
|
+
# Lv70 までの累計経験値 = 265000
|
68
|
+
265000 + n * (2 * a + (n - 1) * d) / 2
|
69
|
+
when 81..91
|
70
|
+
# Lv91までは、次レベルまでの必要経験値が500ずつ増えていく
|
71
|
+
a = 14000
|
72
|
+
d = 500
|
73
|
+
n = @lv - 80
|
74
|
+
# Lv80 までの累計経験値 = 383000
|
75
|
+
383000 + n * (2 * a + (n - 1) * d) / 2
|
76
|
+
when 92..99
|
77
|
+
# Lv92以降は規則性がなくなるため、累計経験値表から取得
|
78
|
+
EXP_TABLE[@lv]
|
79
|
+
else
|
80
|
+
nil
|
81
|
+
end
|
82
|
+
end
|
26
83
|
end
|
@@ -1,14 +1,21 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# 装備一覧
|
2
3
|
class EquipListInfo
|
3
|
-
#
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
# 種別の文字列表記
|
5
|
+
TYPE_NAMES = {
|
6
|
+
1 => '主砲',
|
7
|
+
2 => '副砲・高角',
|
8
|
+
3 => '魚雷',
|
9
|
+
4 => '艦戦',
|
10
|
+
5 => '艦爆・艦攻',
|
11
|
+
6 => '偵察機',
|
12
|
+
7 => 'ソナー・爆雷',
|
13
|
+
8 => 'その他',
|
14
|
+
}
|
15
|
+
|
16
|
+
# 種別を表す数値
|
17
|
+
# 装備図鑑の種別のほうが細かいので、こちらを使うメリットはほとんどない。
|
18
|
+
# 強いて言えば、提督情報のページと同じ表現に揃えたい場合か。
|
12
19
|
attr_accessor :type
|
13
20
|
|
14
21
|
# 図鑑No.
|
@@ -22,4 +29,9 @@ class EquipListInfo
|
|
22
29
|
|
23
30
|
# アイコン画像のファイル名
|
24
31
|
attr_accessor :img
|
32
|
+
|
33
|
+
# 装備の種別を表す文字列を返します。
|
34
|
+
def type_to_s
|
35
|
+
TYPE_NAMES.include?(@type) ? TYPE_NAMES[@type] : @type.to_s
|
36
|
+
end
|
25
37
|
end
|
@@ -1,5 +1,22 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# 基本情報
|
2
3
|
class PersonalBasicInfo
|
4
|
+
# 階級を表す数値と、階級名の対応関係
|
5
|
+
# 新米少佐
|
6
|
+
# 中堅少佐
|
7
|
+
# 少佐
|
8
|
+
# 新米中佐
|
9
|
+
# 中佐
|
10
|
+
# 大佐
|
11
|
+
# 少将
|
12
|
+
# 7: 中将
|
13
|
+
# 大将
|
14
|
+
# 元帥
|
15
|
+
# 集計中
|
16
|
+
TITLES = {
|
17
|
+
7 => '中将',
|
18
|
+
}
|
19
|
+
|
3
20
|
# 提督名
|
4
21
|
attr_accessor :admiral_name
|
5
22
|
|
@@ -33,7 +50,6 @@ class PersonalBasicInfo
|
|
33
50
|
attr_accessor :rank
|
34
51
|
|
35
52
|
# 階級を表す数値 (From API version 2)
|
36
|
-
# 7: 中将
|
37
53
|
attr_accessor :title_id
|
38
54
|
|
39
55
|
# 最大備蓄可能各資源量 (From API version 2)
|
@@ -42,5 +58,9 @@ class PersonalBasicInfo
|
|
42
58
|
# 戦略ポイント (From API version 2)
|
43
59
|
attr_accessor :strategy_point
|
44
60
|
|
45
|
-
#
|
61
|
+
# 階級を表す数値を、階級を表す文字列に変換して返します。
|
62
|
+
# 数値と階級の対応関係を未調査のため、私が自分で確認できた範囲だけ、文字列にして返します。
|
63
|
+
def title_id_to_s
|
64
|
+
TITLES.include?(@title_id) ? TITLES[@title_id] : @title_id.to_s
|
65
|
+
end
|
46
66
|
end
|
@@ -5,7 +5,6 @@ require 'admiral_stats_parser/model/personal_basic_info'
|
|
5
5
|
module PersonalBasicInfoParser
|
6
6
|
MANDATORY_KEYS = {
|
7
7
|
1 => {
|
8
|
-
:admiral_name => String,
|
9
8
|
:fuel => Integer,
|
10
9
|
:ammo => Integer,
|
11
10
|
:steel => Integer,
|
@@ -15,7 +14,6 @@ module PersonalBasicInfoParser
|
|
15
14
|
:room_item_coin => Integer,
|
16
15
|
},
|
17
16
|
2 => {
|
18
|
-
:admiral_name => String,
|
19
17
|
:fuel => Integer,
|
20
18
|
:ammo => Integer,
|
21
19
|
:steel => Integer,
|
@@ -31,6 +29,16 @@ module PersonalBasicInfoParser
|
|
31
29
|
}
|
32
30
|
}
|
33
31
|
|
32
|
+
OPTIONAL_KEYS = {
|
33
|
+
1 => {
|
34
|
+
# 元のデータには必ず提督名が含まれるが、データ解析の上では不要のため、オプションとする
|
35
|
+
:admiral_name => String,
|
36
|
+
},
|
37
|
+
2 => {
|
38
|
+
:admiral_name => String,
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
34
42
|
def self.parse(json, api_version)
|
35
43
|
items = JSON.parse(json)
|
36
44
|
|
@@ -51,6 +59,19 @@ module PersonalBasicInfoParser
|
|
51
59
|
result.instance_variable_set("@#{key.to_s}", items[camel_case_key])
|
52
60
|
end
|
53
61
|
|
62
|
+
OPTIONAL_KEYS[api_version].each do |key, key_class|
|
63
|
+
# キーが含まれなければ、処理をスキップ
|
64
|
+
camel_case_key = key.to_s.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
|
65
|
+
next unless items.include?(camel_case_key)
|
66
|
+
|
67
|
+
# 結果のクラスが合わなければエラー
|
68
|
+
unless items[camel_case_key].is_a?(key_class)
|
69
|
+
raise "Optional key #{key} is not class #{key_class}"
|
70
|
+
end
|
71
|
+
|
72
|
+
result.instance_variable_set("@#{key.to_s}", items[camel_case_key])
|
73
|
+
end
|
74
|
+
|
54
75
|
result
|
55
76
|
end
|
56
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: admiral_stats_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masahiro Yoshizawa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|