open-nhl 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/lib/fetcher.rb +15 -0
  3. data/lib/open-nhl.rb +28 -0
  4. data/lib/parser.rb +59 -0
  5. metadata +46 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 87698ccacdc6dd5f306446ccd6a4190b0265b60d
4
+ data.tar.gz: ec8e9ef7f747f23bac21e2f97df8d1df7d07adac
5
+ SHA512:
6
+ metadata.gz: 78b5d8d3b2222eba01d65993968437ba287837219a789687d53b4c8704cfcecd3d1ada045ef3bf7f37198be48a45cb6aed86ae72d54de235e81d55c96dd0baf9
7
+ data.tar.gz: 940e7655f9e71a9248fac6c7b8aa2a34381a61806c147c75fcebb529ea64432a07ffc0cd25971070f472ec103042c8684c1dced9d1ce333492710184995499a4
data/lib/fetcher.rb ADDED
@@ -0,0 +1,15 @@
1
+ require 'open-uri'
2
+
3
+ module OpenNHL
4
+ module Fetcher
5
+ MAGIC_NHL_ID = 20000
6
+ NHL_URL_PREFIX = "http://www.nhl.com/scores/htmlreports/"
7
+
8
+ def self.play_by_play(options)
9
+ year = options[:year]
10
+ game_id = options[:game_id]
11
+ url = NHL_URL_PREFIX + "#{year}#{year + 1}/PL0#{MAGIC_NHL_ID + game_id}.HTM"
12
+ open(url)
13
+ end
14
+ end
15
+ end
data/lib/open-nhl.rb ADDED
@@ -0,0 +1,28 @@
1
+ require_relative 'fetcher.rb'
2
+ require_relative 'parser.rb'
3
+
4
+ module OpenNHL
5
+ SEASON_GAMES =
6
+ {
7
+ 2009 => 1230,
8
+ 2010 => 1230,
9
+ 2011 => 1230,
10
+ 2012 => 720,
11
+ 2013 => 1230,
12
+ 2014 => 1230,
13
+ 2015 => 1230,
14
+ }
15
+
16
+ def self.events(options)
17
+ file = OpenNHL::Fetcher::play_by_play(options)
18
+ OpenNHL::Parser::play_by_play(file)
19
+ end
20
+
21
+ def self.years
22
+ OpenNHL::SEASON_GAMES.keys
23
+ end
24
+
25
+ def self.games_count(year)
26
+ OpenNHL::SEASON_GAMES[year]
27
+ end
28
+ end
data/lib/parser.rb ADDED
@@ -0,0 +1,59 @@
1
+ require 'nokogiri'
2
+
3
+ module OpenNHL
4
+ module Parser
5
+ EVENT_CSS_SELECTOR = "tr[class='evenColor']"
6
+
7
+ def self.play_by_play(file)
8
+ page = Nokogiri::HTML(file)
9
+ page.css(EVENT_CSS_SELECTOR).map { |html| parse_event(html) }
10
+ end
11
+
12
+ private
13
+
14
+ def self.parse_event(html)
15
+ props = html.css('td')
16
+ time = props[3].text
17
+ pos = time.index(':')
18
+ event =
19
+ {
20
+ id: props[0].text.to_i,
21
+ period: props[1].text.to_i,
22
+ str: props[2].text,
23
+ time: time[0..pos + 2],
24
+ elapsed: time[pos + 3..-1],
25
+ type: props[4].text.downcase.to_sym,
26
+ desc: props[5].text,
27
+ }
28
+ players = parse_players(html)
29
+ event.merge!(players) if players
30
+ event
31
+ end
32
+
33
+ def self.parse_players(html)
34
+ tables = html.css('table')
35
+ return if tables.empty?
36
+ visitor_players = parse_players_table(tables[0])
37
+ home_players = parse_players_table(tables[visitor_players.size + 1])
38
+ {
39
+ players:
40
+ {
41
+ visitor: visitor_players,
42
+ home: home_players,
43
+ }
44
+ }
45
+ end
46
+
47
+ def self.parse_players_table(html)
48
+ return unless html
49
+ html.css('font').map do |player|
50
+ title = player['title'].split(' - ')
51
+ {
52
+ position: title[0].downcase.gsub(' ', '_').to_sym,
53
+ name: title[1],
54
+ number: player.text.to_i,
55
+ }
56
+ end
57
+ end
58
+ end
59
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: open-nhl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ivan Mironov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-28 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple gem to parse NHL HTML reports
14
+ email: ivan.mironov@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/fetcher.rb
20
+ - lib/open-nhl.rb
21
+ - lib/parser.rb
22
+ homepage: https://github.com/emzar/open-nhl
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.5.1
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Parses NHL HTML reports
46
+ test_files: []