admiral_stats_parser 0.1.0 → 0.1.1
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 +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
|