class NpbApi::HittingStats
Public Class Methods
new(date: '', id: '')
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 2 def initialize(date: '', id: '') @date = date @game_id = (date.year.to_s + format('%02d', date.month) + format('%02d', date.day) + id).to_i @url = "http://baseball.yahoo.co.jp/npb/game/#{@game_id}/stats" @doc = TableExtraction.new(url: @url, klass: 'yjS').doc end
Public Instance Methods
away()
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 9 def away stats(:away) end
home()
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 13 def home stats(:home) end
Private Instance Methods
bases_on_balls(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 81 def bases_on_balls(row) details(row).values.count('四球') end
details(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 120 def details(row) hash = { first: row.children[27].text, second: row.children[28].text, third: row.children[29].text, fourth: row.children[30].text, fifth: row.children[31].text, sixth: row.children[32].text, seventh: row.children[33].text, eighth: row.children[34].text, ninth: row.children[35].text, } hash.merge!({ tenth: row.children[36].text }) if row.children[36] hash.merge!({ eleventh: row.children[37].text }) if row.children[37] hash.merge!({ twelfth: row.children[38].text }) if row.children[38] hash end
double_plays(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 97 def double_plays(row) details(row).values.count { |v| v.include?('併') } end
doubles(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 105 def doubles(row) details(row).values.count { |v| v.include?('2') } end
hit_by_pitch(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 89 def hit_by_pitch(row) details(row).values.count('死球') end
intentional_bases_on_balls(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 85 def intentional_bases_on_balls(row) details(row).values.count('敬遠') end
plate_appearances(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 101 def plate_appearances(row) details(row).values.reject { |v| v == '' }.count end
player_id(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 76 def player_id(row) row.children[3].css('a').attribute('href').value =~ /\A\/npb\/player\?id=(\d+)\z/ $1.to_i end
position(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 67 def position(row) if row.children[1].text.match(/\A\(.+\)\z/) row.children[1].text.match(/\A\((.+)\)\z/) $1 else row.children[1].text end end
sacrifice_flies(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 93 def sacrifice_flies(row) details(row).values.count { |v| v.include?('犠飛') } end
starting_lineup?(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 63 def starting_lineup?(row) row.children[1].text.match(/\A\(.+\)\z/) ? true : false end
stats(home_or_away)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 19 def stats(home_or_away) doc = case home_or_away when :home then @doc[1] when :away then @doc[0] end rows = doc.css('tr') rows.shift rows.pop order = 0 rows.each_with_object([]) do |row, arr| order += 1 if starting_lineup?(row) arr << { date: @date, game_id: @game_id, order: order, starting_lineup: starting_lineup?(row), position: position(row), player_id: player_id(row), batting_average: row.children[5].text.to_f, at_bats: row.children[7].text.to_i, runs: row.children[9].text.to_i, hits: row.children[11].text.to_i, runs_batted_in: row.children[13].text.to_i, strikeouts: row.children[15].text.to_i, sacrifice_hits: row.children[19].text.to_i, stolen_bases: row.children[21].text.to_i, errors: row.children[23].text.to_i, home_runs: row.children[25].text.to_i, bases_on_balls: bases_on_balls(row), intentional_bases_on_balls: intentional_bases_on_balls(row), hit_by_pitch: hit_by_pitch(row), sacrifice_flies: sacrifice_flies(row), double_plays: double_plays(row), plate_appearances: plate_appearances(row), doubles: doubles(row), triples: triples(row), total_bases: total_bases(row), details: details(row), team_id: team_id(home_or_away) } end end
team_id(home_or_away)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 138 def team_id(home_or_away) scoreboard = case home_or_away when :home TableExtraction.new(url: @url, klass: 'scoreboard').doc[1] when :away TableExtraction.new(url: @url, klass: 'scoreboard').doc[0] end scoreboard.css('td.tn').children[0].attribute('href').value =~ /\A\/npb\/teams\/(\d+)\/\z/ $1.to_i end
total_bases(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 113 def total_bases(row) bases = details(row).values.count { |v| v.include?('安') } bases += doubles(row) * 2 bases += triples(row) * 3 bases += details(row).values.count { |v| v.include?('本') } * 4 end
triples(row)
click to toggle source
# File lib/npb_api/hitting_stats.rb, line 109 def triples(row) details(row).values.count { |v| v.include?('3') } end