npb_api 0.0.0 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1edf1f518b34e6e2784da3b144d9e446ed572e05
4
- data.tar.gz: 6b7a548373ce03aa220cf055cc38002417892ff0
3
+ metadata.gz: 59a8470140637af96fe66cf5016765f3f35a8229
4
+ data.tar.gz: 04aac7d0ff3209d5609ace9b770e3fa430ce8395
5
5
  SHA512:
6
- metadata.gz: 4083201f47771bbc6f6707ceff92319a83b84cdffe183499e937db6f4061bc00723759eee1c7a314dd58a1a707110e148cb610073abc584079750ad996be9f8f
7
- data.tar.gz: 555e5389a32740a3633bec4d6cd51ac9028459cb60077c98b80c847390b12dadd86fb84b7971e5228c6488b31e56c3847ea23634e9faf15d682faa258162c70f
6
+ metadata.gz: 79cdc14c4b89ac5e67ee828aa1db0bb3124eacea0257c77a0943c5d43c3004e14e71588cbe56e7a82002e542f5a6c403bbb30742c2a1e666d10010e948dae752
7
+ data.tar.gz: 2007b2b3ba30317f91d6b37a18abfc1c0a16728b1a30baae1efee8e64324c1b9dc804d3fa1b9cff403d63d4a5ac6234609dc644e8f8df291461ebf41cf3472cd
@@ -0,0 +1,23 @@
1
+ require './lib/npb_api/table_extraction'
2
+
3
+ class NpbApi::Base
4
+ def initialize(team: '', year: '', league: '')
5
+ @team = team
6
+ @year = year
7
+ @league = league
8
+ end
9
+
10
+ def table
11
+ raise NotImplementedError
12
+ end
13
+
14
+ private
15
+
16
+ def extracted_table
17
+ raise NotImplementedError
18
+ end
19
+
20
+ def url
21
+ raise NotImplementedError
22
+ end
23
+ end
@@ -0,0 +1,89 @@
1
+ require './lib/npb_api/base'
2
+
3
+ module NpbApi
4
+ class Fielding < Base
5
+ def table
6
+ position = ''
7
+ extracted_table.map do |values|
8
+ if values[0] =~ /\A【(.+)】\z/
9
+ position = human_position($1)
10
+ next
11
+ end
12
+ values.unshift(@year, @team, @league, position)
13
+ _hash(keys, values).map do |key, value|
14
+ case key
15
+ when :throw
16
+ [key, _throw(value)]
17
+ when :year, :team, :league, :position, :player
18
+ [key, value]
19
+ when :fielding_percentage
20
+ [key, value.to_f]
21
+ when :passed_balls
22
+ [key, (value.empty? ? 'NULL' : value.to_i)]
23
+ else
24
+ [key, value.to_i]
25
+ end
26
+ end.to_h
27
+ end.compact
28
+ end
29
+
30
+ private
31
+
32
+ def extracted_table
33
+ table = TableExtraction.new(url: url).tables.first
34
+ table.delete_at(0)
35
+ table
36
+ end
37
+
38
+ def url
39
+ case @league
40
+ when 'CL', 'PL'
41
+ "http://npb.jp/bis/#{@year}/stats/idf1_#{@team.downcase}.html"
42
+ when 'WL', 'EL'
43
+ "http://npb.jp/bis/#{@year}/stats/idf2_#{@team.downcase}.html"
44
+ end
45
+ end
46
+
47
+ def keys
48
+ [
49
+ :year,
50
+ :team,
51
+ :league,
52
+ :position,
53
+ :throw,
54
+ :player,
55
+ :games,
56
+ :putout,
57
+ :assists,
58
+ :errors,
59
+ :double_plays,
60
+ :passed_balls,
61
+ :fielding_percentage
62
+ ]
63
+ end
64
+
65
+ def human_position(position)
66
+ case position
67
+ when '一塁手' then '1B'
68
+ when '二塁手' then '2B'
69
+ when '三塁手' then '3B'
70
+ when '遊撃手' then 'SS'
71
+ when '外野手' then 'OF'
72
+ when '捕手' then 'C'
73
+ when '投手' then 'P'
74
+ end
75
+ end
76
+
77
+ def _hash(keys, values)
78
+ Hash[*[keys, values].transpose.flatten]
79
+ end
80
+
81
+ def _throw(value)
82
+ case value
83
+ when '' then 'R'
84
+ when '*' then 'L'
85
+ when '+' then 'S'
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,81 @@
1
+ require './lib/npb_api/base'
2
+
3
+ module NpbApi
4
+ class Hitting < Base
5
+ def table
6
+ extracted_table.map do |values|
7
+ values.unshift(@year, @team, @league)
8
+ hash = Hash[*[keys, values].transpose.flatten]
9
+ hash.map do |key, value|
10
+ case key
11
+ when :bat
12
+ [key, bat(value)]
13
+ when :year, :team, :league, :player
14
+ [key, value]
15
+ when :batting_average, :slugging_percentage, :on_base_percentage
16
+ [key, value.to_f]
17
+ else
18
+ [key, value.to_i]
19
+ end
20
+ end.to_h
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def bat(column)
27
+ case column
28
+ when '' then 'R'
29
+ when '*' then 'L'
30
+ when '+' then 'S'
31
+ end
32
+ end
33
+
34
+ def extracted_table
35
+ table = TableExtraction.new(url: url).tables.first
36
+ table.slice!(0..1)
37
+ table
38
+ end
39
+
40
+ def url
41
+ case @league
42
+ when 'CL', 'PL'
43
+ "http://npb.jp/bis/#{@year}/stats/idb1_#{@team.downcase}.html"
44
+ when 'WL', 'EL'
45
+ "http://npb.jp/bis/#{@year}/stats/idb2_#{@team.downcase}.html"
46
+ end
47
+ end
48
+
49
+ def keys
50
+ [
51
+ :year,
52
+ :team,
53
+ :league,
54
+ :bat,
55
+ :player,
56
+ :games,
57
+ :plate_appearances,
58
+ :at_bats,
59
+ :runs,
60
+ :hits,
61
+ :doubles,
62
+ :triples,
63
+ :home_runs,
64
+ :total_bases,
65
+ :runs_batted_in,
66
+ :stolen_bases,
67
+ :caught_stealing,
68
+ :sacrifice_bunts,
69
+ :sacrifice_flies,
70
+ :bases_on_balls,
71
+ :intentional_bases_on_balls,
72
+ :hit_by_pitch,
73
+ :strikeouts,
74
+ :grounded_into_double_playes,
75
+ :batting_average,
76
+ :slugging_percentage,
77
+ :on_base_percentage
78
+ ]
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,108 @@
1
+ require './lib/npb_api/base'
2
+
3
+ module NpbApi
4
+ class Pitching < Base
5
+ def table
6
+ extracted_table.map do |values|
7
+ values.unshift(@year, @team, @league)
8
+ hash = Hash[*[keys, values].transpose.flatten]
9
+ hash = hash.map do |key, value|
10
+ case key
11
+ when :year, :team, :league, :player
12
+ [key, value]
13
+ when :throw
14
+ [key, _throw(value)]
15
+ when :winning_percentage
16
+ [key, value.to_f]
17
+ when :innings_pitched
18
+ [key, innings_pitched(value, hash[:innings_pitched_2])]
19
+ when :earned_run_average
20
+ [key, earned_run_average(value)]
21
+ else
22
+ [key, value.to_i]
23
+ end
24
+ end.to_h
25
+ hash.delete(:innings_pitched_2) # 投球回が2列で表現していたため、一箇所にまとめて小数点の部分を削除
26
+ hash.merge!(hold: 'NULL', hold_points: 'NULL') if farm?
27
+ hash
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ # ruby の帯域脱出の throw と名前が重複するのでアンダースコアをつけている
34
+ def _throw(column)
35
+ case column
36
+ when '' then 'R'
37
+ when '*' then 'L'
38
+ when '+' then 'S'
39
+ end
40
+ end
41
+
42
+ def innings_pitched(innings_pitched_1, innings_pitched_2)
43
+ return innings_pitched_1.to_i if innings_pitched_2.empty?
44
+ "#{innings_pitched_1}#{innings_pitched_2}".to_f
45
+ end
46
+
47
+ # 無限大の時は-1を返すようにする
48
+ def earned_run_average(column)
49
+ return -1 if column == '----'
50
+ column.to_f
51
+ end
52
+
53
+ def extracted_table
54
+ table = TableExtraction.new(url: url).tables.first
55
+ table.slice!(0..1)
56
+ table
57
+ end
58
+
59
+ def url
60
+ case @league
61
+ when 'CL', 'PL'
62
+ "http://npb.jp/bis/#{@year}/stats/idp1_#{@team.downcase}.html"
63
+ when 'WL', 'EL'
64
+ "http://npb.jp/bis/#{@year}/stats/idp2_#{@team.downcase}.html"
65
+ end
66
+ end
67
+
68
+ def keys
69
+ keys = [
70
+ :year,
71
+ :team,
72
+ :league,
73
+ :throw,
74
+ :player,
75
+ :games,
76
+ :wins,
77
+ :loses,
78
+ :saves,
79
+ :hold,
80
+ :hold_points,
81
+ :complete_games,
82
+ :shutouts,
83
+ :no_bases_on_balls,
84
+ :winning_percentage,
85
+ :total_batters_faced,
86
+ :innings_pitched,
87
+ :innings_pitched_2,
88
+ :hits,
89
+ :home_runs,
90
+ :bases_on_balls,
91
+ :intentional_bases_on_balls,
92
+ :hit_batsmen,
93
+ :strikeouts,
94
+ :wild_pitches,
95
+ :balks,
96
+ :runs,
97
+ :earned_runs,
98
+ :earned_run_average
99
+ ]
100
+ keys.delete_if { |key| %i(hold hold_points).include?(key) } if farm?
101
+ keys
102
+ end
103
+
104
+ def farm?
105
+ %w(EL WL).include?(@league)
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,25 @@
1
+ require 'open-uri'
2
+ require 'nokogiri'
3
+
4
+ module NpbApi
5
+ class TableExtraction
6
+ def initialize(url: '')
7
+ @url = url
8
+ end
9
+
10
+ def tables
11
+ tables = Nokogiri::HTML(open(@url)).css('table')
12
+ tables.inject([]) { |arr, table| arr << table_arr(table) }
13
+ end
14
+
15
+ private
16
+
17
+ def table_arr(table)
18
+ table.css('tr').inject([]) { |arr, row| arr << row_arr(row) }
19
+ end
20
+
21
+ def row_arr(row)
22
+ row.css('th', 'td').inject([]) { |arr, column| arr << column.content }
23
+ end
24
+ end
25
+ end
metadata CHANGED
@@ -1,66 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: npb_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ohtsuka Takahiro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-21 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: table_extraction
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '11'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '11'
41
- - !ruby/object:Gem::Dependency
42
- name: minitest
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '5'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '5'
55
- description: npbのデータを取得する
11
+ date: 2016-03-21 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: npb_api
56
14
  email: t.o.0526@gmail.com
57
15
  executables: []
58
16
  extensions: []
59
17
  extra_rdoc_files: []
60
18
  files:
61
- - lib/npb_api.rb
62
- - lib/npb_api/game.rb
63
- homepage: https://github.com/to0526/npb_api
19
+ - lib/npb_api/base.rb
20
+ - lib/npb_api/fielding.rb
21
+ - lib/npb_api/hitting.rb
22
+ - lib/npb_api/pitching.rb
23
+ - lib/npb_api/table_extraction.rb
24
+ homepage: http://rubygems.org/gems/npb_api
64
25
  licenses:
65
26
  - MIT
66
27
  metadata: {}
@@ -80,8 +41,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
41
  version: '0'
81
42
  requirements: []
82
43
  rubyforge_project:
83
- rubygems_version: 2.5.1
44
+ rubygems_version: 2.6.2
84
45
  signing_key:
85
46
  specification_version: 4
86
- summary: npbのデータを取得する
47
+ summary: npb_api
87
48
  test_files: []
data/lib/npb_api/game.rb DELETED
@@ -1,72 +0,0 @@
1
- class NpbApi::Game
2
- def self.all(date: '')
3
- ('01'..'06').to_a.each_with_object([]) do |id, arr|
4
- begin
5
- arr << new(date: date, id: id)
6
- rescue OpenURI::HTTPError
7
- next
8
- end
9
- end
10
- end
11
-
12
- def initialize(date: '', id: '')
13
- @date = date
14
- game_id = date.year.to_s + format('%02d', date.month) + format('%02d', date.day) + id
15
- @doc = Nokogiri::HTML(open("http://baseball.yahoo.co.jp/npb/game/#{game_id}/top"))
16
- end
17
-
18
- def status
19
- @doc.css('.column-center em').text
20
- end
21
-
22
- def away
23
- @doc.css('.column-right.clearfix i').text
24
- end
25
-
26
- def away_score
27
- return nil if status == '試合前中止'
28
- @doc.css('tr#tb1 td.sum').text.to_i
29
- end
30
-
31
- def away_result
32
- return nil if status.include?('中止')
33
-
34
- if away_score > home_score
35
- 'win'
36
- elsif away_score < home_score
37
- 'lose'
38
- else
39
- 'draw'
40
- end
41
- end
42
-
43
- def home
44
- @doc.css('.column-left.clearfix i').text
45
- end
46
-
47
- def home_score
48
- return nil if status == '試合前中止'
49
- @doc.css('tr#tb2 td.sum').text.to_i
50
- end
51
-
52
- def home_result
53
- return nil if status.include?('中止')
54
-
55
- if home_score > away_score
56
- 'win'
57
- elsif home_score < away_score
58
- 'lose'
59
- else
60
- 'draw'
61
- end
62
- end
63
-
64
- def datetime
65
- hour, minute = @doc.css('p.stadium').children[2].text.split(':').map(&:to_i)
66
- DateTime.new(@date.year, @date.month, @date.day, hour, minute)
67
- end
68
-
69
- def ballpark
70
- @doc.css('p.stadium').children[0].text.strip
71
- end
72
- end
data/lib/npb_api.rb DELETED
@@ -1,6 +0,0 @@
1
- require 'table_extraction'
2
-
3
- class NpbApi
4
- end
5
-
6
- require 'npb_api/game'