npb_api 0.0.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 59a8470140637af96fe66cf5016765f3f35a8229
4
- data.tar.gz: 04aac7d0ff3209d5609ace9b770e3fa430ce8395
3
+ metadata.gz: 4e803a0b961d518feeeed96ca41a8054a88097af
4
+ data.tar.gz: 5350d4a294585a75bd8056e55e338c24065f15d0
5
5
  SHA512:
6
- metadata.gz: 79cdc14c4b89ac5e67ee828aa1db0bb3124eacea0257c77a0943c5d43c3004e14e71588cbe56e7a82002e542f5a6c403bbb30742c2a1e666d10010e948dae752
7
- data.tar.gz: 2007b2b3ba30317f91d6b37a18abfc1c0a16728b1a30baae1efee8e64324c1b9dc804d3fa1b9cff403d63d4a5ac6234609dc644e8f8df291461ebf41cf3472cd
6
+ metadata.gz: 0d4c2e2fb7a7fbf36e37b76aef97c8232b83a4b5ec0f82d9142089f79773564bbd1235ef89b99195e2d779e7641dec9d65019057000abe866d366ddd68f96d94
7
+ data.tar.gz: 891f85e1f161252cd9d1ae53d33d136198d73f3f97cb9d14f42bd5210c8045afcf29f6f00d7b985c69e27cd93d9728a3b7acea5d6af816b61bef23db9b8b286d
@@ -0,0 +1,80 @@
1
+ class NpbApi::Game
2
+ def initialize(date: '', id: '')
3
+ @date = date
4
+ @game_id = date.year.to_s + format('%02d', date.month) + format('%02d', date.day) + id
5
+ @doc = Nokogiri::HTML(open("http://baseball.yahoo.co.jp/npb/game/#{@game_id}/top"))
6
+ end
7
+
8
+ def away
9
+ {
10
+ game_id: @game_id,
11
+ status: status,
12
+ team: @doc.css('.column-right.clearfix i').text,
13
+ score: away_score,
14
+ result: away_result,
15
+ datetime: datetime,
16
+ ballpark: ballpark
17
+ }
18
+ end
19
+
20
+ def home
21
+ {
22
+ game_id: @game_id,
23
+ status: status,
24
+ team: @doc.css('.column-left.clearfix i').text,
25
+ score: home_score,
26
+ result: home_result,
27
+ datetime: datetime,
28
+ ballpark: ballpark
29
+ }
30
+ end
31
+
32
+ private
33
+
34
+ def status
35
+ @doc.css('.column-center em').text
36
+ end
37
+
38
+ def away_score
39
+ return nil if status == '試合前中止'
40
+ @doc.css('tr#tb1 td.sum').text.to_i
41
+ end
42
+
43
+ def away_result
44
+ return 'postponed' if status.include?('中止')
45
+
46
+ if away_score > home_score
47
+ 'win'
48
+ elsif away_score < home_score
49
+ 'lose'
50
+ else
51
+ 'draw'
52
+ end
53
+ end
54
+
55
+ def home_score
56
+ return nil if status == '試合前中止'
57
+ @doc.css('tr#tb2 td.sum').text.to_i
58
+ end
59
+
60
+ def home_result
61
+ return 'postponed' if status.include?('中止')
62
+
63
+ if home_score > away_score
64
+ 'win'
65
+ elsif home_score < away_score
66
+ 'lose'
67
+ else
68
+ 'draw'
69
+ end
70
+ end
71
+
72
+ def datetime
73
+ hour, minute = @doc.css('p.stadium').children[2].text.split(':').map(&:to_i)
74
+ DateTime.new(@date.year, @date.month, @date.day, hour, minute, 0, '+9')
75
+ end
76
+
77
+ def ballpark
78
+ @doc.css('p.stadium').children[0].text.strip
79
+ end
80
+ end
data/lib/npb_api.rb ADDED
@@ -0,0 +1,8 @@
1
+ require 'table_extraction'
2
+
3
+ class NpbApi
4
+ end
5
+
6
+ require 'npb_api/game'
7
+ require 'npb_api/hitting_stats'
8
+ require 'npb_api/pitching_stats'
metadata CHANGED
@@ -1,27 +1,66 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: npb_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.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-03-21 00:00:00.000000000 Z
12
- dependencies: []
13
- description: npb_api
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のデータを取得する
14
56
  email: t.o.0526@gmail.com
15
57
  executables: []
16
58
  extensions: []
17
59
  extra_rdoc_files: []
18
60
  files:
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
61
+ - lib/npb_api.rb
62
+ - lib/npb_api/game.rb
63
+ homepage: https://github.com/to0526/npb_api
25
64
  licenses:
26
65
  - MIT
27
66
  metadata: {}
@@ -41,8 +80,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
80
  version: '0'
42
81
  requirements: []
43
82
  rubyforge_project:
44
- rubygems_version: 2.6.2
83
+ rubygems_version: 2.5.1
45
84
  signing_key:
46
85
  specification_version: 4
47
- summary: npb_api
86
+ summary: npbのデータを取得する
48
87
  test_files: []
data/lib/npb_api/base.rb DELETED
@@ -1,23 +0,0 @@
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
@@ -1,89 +0,0 @@
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
@@ -1,81 +0,0 @@
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
@@ -1,108 +0,0 @@
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
@@ -1,25 +0,0 @@
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