ahl_scraper 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +85 -0
  5. data/.ruby-version +1 -0
  6. data/.solargraph.yml +15 -0
  7. data/.travis.yml +6 -0
  8. data/.vscode/settings.json +11 -0
  9. data/CODE_OF_CONDUCT.md +74 -0
  10. data/Gemfile +25 -0
  11. data/Gemfile.lock +114 -0
  12. data/LICENSE.txt +21 -0
  13. data/README.md +235 -0
  14. data/Rakefile +8 -0
  15. data/ahl_scraper.gemspec +27 -0
  16. data/bin/console +16 -0
  17. data/bin/setup +8 -0
  18. data/lib/ahl_scraper.rb +55 -0
  19. data/lib/ahl_scraper/fetchers/division_data_fetcher.rb +19 -0
  20. data/lib/ahl_scraper/fetchers/game_data_fetcher.rb +29 -0
  21. data/lib/ahl_scraper/fetchers/game_event_data_fetcher.rb +19 -0
  22. data/lib/ahl_scraper/fetchers/player_data_fetcher.rb +25 -0
  23. data/lib/ahl_scraper/fetchers/player_games/data_fetcher.rb +30 -0
  24. data/lib/ahl_scraper/fetchers/playoff_bracket_data_fetcher.rb +19 -0
  25. data/lib/ahl_scraper/fetchers/season_data_fetcher.rb +15 -0
  26. data/lib/ahl_scraper/fetchers/season_end_date_fetcher.rb +34 -0
  27. data/lib/ahl_scraper/fetchers/season_game_ids_fetcher.rb +21 -0
  28. data/lib/ahl_scraper/fetchers/season_start_date_fetcher.rb +30 -0
  29. data/lib/ahl_scraper/fetchers/season_type_fetcher.rb +33 -0
  30. data/lib/ahl_scraper/fetchers/team_data_fetcher.rb +19 -0
  31. data/lib/ahl_scraper/fetchers/team_games/data_fetcher.rb +22 -0
  32. data/lib/ahl_scraper/fetchers/team_roster_data_fetcher.rb +67 -0
  33. data/lib/ahl_scraper/fixed_games/1001050.json +2182 -0
  34. data/lib/ahl_scraper/fixed_games/1018774.json +2573 -0
  35. data/lib/ahl_scraper/fixed_games/1020527.json +2483 -0
  36. data/lib/ahl_scraper/games.rb +46 -0
  37. data/lib/ahl_scraper/games/events.rb +8 -0
  38. data/lib/ahl_scraper/helpers/birthdate_helper.rb +27 -0
  39. data/lib/ahl_scraper/helpers/elapsed_time_helper.rb +24 -0
  40. data/lib/ahl_scraper/helpers/ice_time_helper.rb +18 -0
  41. data/lib/ahl_scraper/helpers/parameterize_helper.rb +35 -0
  42. data/lib/ahl_scraper/helpers/period_time_helper.rb +25 -0
  43. data/lib/ahl_scraper/helpers/season_dates_helper.rb +14 -0
  44. data/lib/ahl_scraper/player_games.rb +19 -0
  45. data/lib/ahl_scraper/players.rb +12 -0
  46. data/lib/ahl_scraper/playoff_brackets.rb +17 -0
  47. data/lib/ahl_scraper/resource.rb +38 -0
  48. data/lib/ahl_scraper/resources/game.rb +373 -0
  49. data/lib/ahl_scraper/resources/game_list_item.rb +57 -0
  50. data/lib/ahl_scraper/resources/games/coach.rb +23 -0
  51. data/lib/ahl_scraper/resources/games/events/shot.rb +10 -0
  52. data/lib/ahl_scraper/resources/games/goal.rb +161 -0
  53. data/lib/ahl_scraper/resources/games/goalie.rb +106 -0
  54. data/lib/ahl_scraper/resources/games/info.rb +83 -0
  55. data/lib/ahl_scraper/resources/games/on_ice_skater.rb +35 -0
  56. data/lib/ahl_scraper/resources/games/overtime.rb +48 -0
  57. data/lib/ahl_scraper/resources/games/penalty.rb +101 -0
  58. data/lib/ahl_scraper/resources/games/penalty_shot.rb +82 -0
  59. data/lib/ahl_scraper/resources/games/period.rb +31 -0
  60. data/lib/ahl_scraper/resources/games/referee.rb +23 -0
  61. data/lib/ahl_scraper/resources/games/shootout_attempt.rb +61 -0
  62. data/lib/ahl_scraper/resources/games/skater.rb +94 -0
  63. data/lib/ahl_scraper/resources/games/star.rb +47 -0
  64. data/lib/ahl_scraper/resources/games/team.rb +85 -0
  65. data/lib/ahl_scraper/resources/goalie_game_list_item.rb +69 -0
  66. data/lib/ahl_scraper/resources/player.rb +71 -0
  67. data/lib/ahl_scraper/resources/playoff_bracket.rb +21 -0
  68. data/lib/ahl_scraper/resources/playoff_brackets/game.rb +43 -0
  69. data/lib/ahl_scraper/resources/playoff_brackets/round.rb +31 -0
  70. data/lib/ahl_scraper/resources/playoff_brackets/series.rb +73 -0
  71. data/lib/ahl_scraper/resources/playoff_brackets/team.rb +39 -0
  72. data/lib/ahl_scraper/resources/roster_player.rb +71 -0
  73. data/lib/ahl_scraper/resources/season.rb +93 -0
  74. data/lib/ahl_scraper/resources/season_list_item.rb +30 -0
  75. data/lib/ahl_scraper/resources/seasons/team.rb +77 -0
  76. data/lib/ahl_scraper/resources/skater_game_list_item.rb +65 -0
  77. data/lib/ahl_scraper/resources/team_game_list_item.rb +64 -0
  78. data/lib/ahl_scraper/resources/team_list_item.rb +20 -0
  79. data/lib/ahl_scraper/roster_players.rb +11 -0
  80. data/lib/ahl_scraper/seasons.rb +31 -0
  81. data/lib/ahl_scraper/services/games/create_skaters_service.rb +72 -0
  82. data/lib/ahl_scraper/services/games/on_ice_statlines_service.rb +117 -0
  83. data/lib/ahl_scraper/services/games/penalty_shot_statlines_service.rb +38 -0
  84. data/lib/ahl_scraper/services/games/penalty_shots_service.rb +30 -0
  85. data/lib/ahl_scraper/services/games/penalty_statlines_service.rb +62 -0
  86. data/lib/ahl_scraper/services/games/scoring_statlines_service.rb +115 -0
  87. data/lib/ahl_scraper/services/games/shootout_statlines_service.rb +42 -0
  88. data/lib/ahl_scraper/services/games/team_on_ice_goals_service.rb +152 -0
  89. data/lib/ahl_scraper/services/games/time_splits_service.rb +70 -0
  90. data/lib/ahl_scraper/services/seasons/teams_service.rb +20 -0
  91. data/lib/ahl_scraper/team_games.rb +17 -0
  92. data/lib/ahl_scraper/teams.rb +11 -0
  93. data/lib/ahl_scraper/version.rb +5 -0
  94. metadata +138 -0
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/ahl_scraper/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "ahl_scraper"
7
+ spec.version = AhlScraper::VERSION
8
+ spec.authors = ["jefftcraig"]
9
+ spec.email = ["jeffcraig35@gmail.com"]
10
+
11
+ spec.summary = "Scrape data from the AHL website"
12
+ spec.description = "Allows users to gather game, season, and player data from the AHL website"
13
+ spec.homepage = "http://www.ahltracker.com"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
16
+
17
+ spec.metadata["homepage_uri"] = "https://github.com/notnotjeff/ahl_scraper"
18
+ spec.metadata["source_code_uri"] = "https://github.com/notnotjeff/ahl_scraper"
19
+ spec.metadata["changelog_uri"] = "https://github.com/notnotjeff/ahl_scraper"
20
+
21
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
22
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
23
+ end
24
+ spec.bindir = "exe"
25
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
+ spec.require_paths = ["lib"]
27
+ end
data/bin/console ADDED
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ # !/usr/bin/env ruby
4
+
5
+ require "bundler/setup"
6
+ require "ahl_scraper"
7
+
8
+ # You can add fixtures and/or initialization code here to make experimenting
9
+ # with your gem easier. You can also use a different console, if you like.
10
+
11
+ # (If you use this, don't forget to add pry to your Gemfile!)
12
+ # require "pry"
13
+ # Pry.start
14
+
15
+ require "irb"
16
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "nokogiri"
5
+ require "open-uri"
6
+ require "bigdecimal"
7
+
8
+ require "ahl_scraper/version"
9
+
10
+ require "ahl_scraper/fetchers/division_data_fetcher"
11
+ require "ahl_scraper/fetchers/game_data_fetcher"
12
+ require "ahl_scraper/fetchers/game_event_data_fetcher"
13
+ require "ahl_scraper/fetchers/player_data_fetcher"
14
+ require "ahl_scraper/fetchers/playoff_bracket_data_fetcher"
15
+ require "ahl_scraper/fetchers/season_data_fetcher"
16
+ require "ahl_scraper/fetchers/season_end_date_fetcher"
17
+ require "ahl_scraper/fetchers/season_game_ids_fetcher"
18
+ require "ahl_scraper/fetchers/season_start_date_fetcher"
19
+ require "ahl_scraper/fetchers/season_type_fetcher"
20
+ require "ahl_scraper/fetchers/team_data_fetcher"
21
+ require "ahl_scraper/fetchers/team_roster_data_fetcher"
22
+
23
+ require "ahl_scraper/helpers/birthdate_helper"
24
+ require "ahl_scraper/helpers/elapsed_time_helper"
25
+ require "ahl_scraper/helpers/ice_time_helper"
26
+ require "ahl_scraper/helpers/parameterize_helper"
27
+ require "ahl_scraper/helpers/period_time_helper"
28
+ require "ahl_scraper/helpers/season_dates_helper"
29
+
30
+ require "ahl_scraper/resource"
31
+
32
+ require "ahl_scraper/resources/game"
33
+ require "ahl_scraper/resources/playoff_bracket"
34
+ require "ahl_scraper/resources/season"
35
+ require "ahl_scraper/resources/team_list_item"
36
+ require "ahl_scraper/resources/team_game_list_item"
37
+ require "ahl_scraper/resources/game_list_item"
38
+ require "ahl_scraper/resources/goalie_game_list_item"
39
+ require "ahl_scraper/resources/season_list_item"
40
+ require "ahl_scraper/resources/skater_game_list_item"
41
+ require "ahl_scraper/resources/roster_player"
42
+ require "ahl_scraper/resources/player"
43
+
44
+ require "ahl_scraper/games"
45
+ require "ahl_scraper/seasons"
46
+ require "ahl_scraper/team_games"
47
+ require "ahl_scraper/teams"
48
+ require "ahl_scraper/player_games"
49
+ require "ahl_scraper/players"
50
+ require "ahl_scraper/playoff_brackets"
51
+ require "ahl_scraper/roster_players"
52
+
53
+ module AhlScraper
54
+ class Error < StandardError; end
55
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class DivisionDataFetcher
5
+ def initialize(season_id)
6
+ @season_id = season_id
7
+ end
8
+
9
+ def call
10
+ JSON.parse(Nokogiri::HTML(URI.parse(url).open).text[5..-2], symbolize_names: true)&.first&.dig(:sections)
11
+ end
12
+
13
+ private
14
+
15
+ def url
16
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=teams&groupTeamsBy=division&site_id=1&season=#{@season_id}&key=50c2cd9b5e18e390&client_code=ahl&league_id=4&callback=json" # rubocop:disable Layout/LineLength
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class GameDataFetcher
5
+ BROKEN_GAMES = [1_018_774, 1_001_050, 1_020_527].freeze
6
+
7
+ def initialize(game_id)
8
+ @game_id = game_id
9
+ end
10
+
11
+ def call
12
+ return fixed_game if BROKEN_GAMES.include? @game_id
13
+
14
+ JSON.parse(Nokogiri::HTML(URI.parse(url).open).text[5..-2], symbolize_names: true)
15
+ end
16
+
17
+ private
18
+
19
+ def fixed_game
20
+ path = File.join(File.dirname(__FILE__), "../fixed_games/#{@game_id}.json")
21
+ file = File.read(path)
22
+ JSON.parse(file, symbolize_names: true)
23
+ end
24
+
25
+ def url
26
+ "http://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=gameSummary&game_id=#{@game_id}&key=50c2cd9b5e18e390&site_id=1&client_code=ahl&lang=en&league_id=&callback=json" # rubocop:disable Layout/LineLength
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class GameEventDataFetcher
5
+ def initialize(game_id)
6
+ @game_id = game_id
7
+ end
8
+
9
+ def call
10
+ JSON.parse(Nokogiri::HTML(URI.parse(url).open).text[5..-2], symbolize_names: true)
11
+ end
12
+
13
+ private
14
+
15
+ def url
16
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=gameCenterPlayByPlay&game_id=#{@game_id}&key=50c2cd9b5e18e390&client_code=ahl&lang=en&league_id=&callback=json" # rubocop:disable Layout/LineLength
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class PlayerDataFetcher
5
+ def initialize(player_id)
6
+ @player_id = player_id
7
+ end
8
+
9
+ def call
10
+ JSON.parse(player_data_without_bio, symbolize_names: true)
11
+ end
12
+
13
+ private
14
+
15
+ def url
16
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=player&player_id=#{@player_id}&season_id=&site_id=3&key=ccb91f29d6744675&client_code=ahl&league_id=&lang=en&statsType=standard&callback=json" # rubocop:disable Layout/LineLength
17
+ end
18
+
19
+ def player_data_without_bio
20
+ data = Nokogiri::HTML(URI.parse(url).open).text[5..-2]
21
+ bio = data[/\"bio"\:(.*?)\,\"teamName/m, 1]
22
+ data.gsub(bio, "\"\"")
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ module PlayerGames
5
+ class DataFetcher
6
+ def initialize(player_id, season_id)
7
+ @player_id = player_id
8
+ @season_id = season_id
9
+ end
10
+
11
+ def call
12
+ player_data = JSON.parse(player_data_without_bio, symbolize_names: true)
13
+
14
+ player_data&.dig(:gameByGame, 0, :sections, 0, :data)&.map { |data| { **data, position: player_data[:info][:position] } }
15
+ end
16
+
17
+ private
18
+
19
+ def url
20
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=player&player_id=#{@player_id}&season_id=#{@season_id}&site_id=3&key=ccb91f29d6744675&client_code=ahl&league_id=&lang=en&statsType=standard&callback=json" # rubocop:disable Layout/LineLength
21
+ end
22
+
23
+ def player_data_without_bio
24
+ data = Nokogiri::HTML(URI.parse(url).open).text[5..-2]
25
+ bio = data[/\"bio"\:(.*?)\,\"teamName/m, 1]
26
+ data.gsub(bio, "\"\"")
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class PlayoffBracketDataFetcher
5
+ def initialize(season_id)
6
+ @season_id = season_id
7
+ end
8
+
9
+ def call
10
+ JSON.parse(Nokogiri::HTML(URI.parse(url).open).text[5..-2], symbolize_names: true).dig(:SiteKit, :Brackets)
11
+ end
12
+
13
+ private
14
+
15
+ def url
16
+ "https://lscluster.hockeytech.com/feed/index.php?feed=modulekit&view=brackets&fmt=json&season_id=#{@season_id}&key=ccb91f29d6744675&client_code=ahl&site_id=3&lang=en&league_id=&callback=json" # rubocop:disable Layout/LineLength
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class SeasonDataFetcher
5
+ def call
6
+ JSON.parse(Nokogiri::HTML(URI.parse(url).open).text[5..-2], symbolize_names: true)&.dig(:seasons)
7
+ end
8
+
9
+ private
10
+
11
+ def url
12
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=bootstrap&season=latest&pageName=schedule&key=50c2cd9b5e18e390&client_code=ahl&site_id=1&league_id=&league_code=&lang=en&callback=json" # rubocop:disable Layout/LineLength
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class SeasonEndDateFetcher
5
+ def initialize(season_id, season_type)
6
+ @season_id = season_id
7
+ @season_type = season_type
8
+ end
9
+
10
+ def call
11
+ return if %i[all_star_game exhibition].include? @season_type
12
+
13
+ return SeasonDatesHelper::DATE_EXCEPTIONS[@season_id][:end_date] if SeasonDatesHelper::DATE_EXCEPTIONS.keys.include? @season_id
14
+
15
+ JSON.parse(Nokogiri::HTML(URI.parse(url).open).text[5..-2], symbolize_names: true)
16
+ &.first
17
+ &.dig(:sections)
18
+ &.first
19
+ &.dig(:data)
20
+ &.last
21
+ &.dig(:row, :date_with_day)
22
+ end
23
+
24
+ private
25
+
26
+ def end_month
27
+ SeasonDatesHelper::SEASON_MONTH_KEY[@season_type.to_sym][:end_month]
28
+ end
29
+
30
+ def url
31
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=schedule&team=-1&season=#{@season_id}&month=#{@end_month}&location=homeaway&key=50c2cd9b5e18e390&client_code=ahl&site_id=1&league_id=4&division_id=-1&lang=en&callback=json"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class SeasonGameIdsFetcher
5
+ def initialize(season_id)
6
+ @season_id = season_id
7
+ end
8
+
9
+ def call
10
+ JSON.parse(Nokogiri::HTML(URI.parse(url).open)
11
+ .text[5..-2], symbolize_names: true)
12
+ .dig(0, :sections, 0, :data)
13
+ end
14
+
15
+ private
16
+
17
+ def url
18
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=schedule&team=-1&season=#{@season_id}&month=-1&location=homeaway&key=ccb91f29d6744675&client_code=ahl&site_id=3&league_id=4&division_id=-1&lang=en&callback=json"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class SeasonStartDateFetcher
5
+ def initialize(season_id, season_type)
6
+ @season_id = season_id
7
+ @season_type = season_type
8
+ end
9
+
10
+ def call
11
+ return if %i[all_star_game exhibition].include? @season_type
12
+
13
+ return SeasonDatesHelper::DATE_EXCEPTIONS[@season_id][:start_date] if SeasonDatesHelper::DATE_EXCEPTIONS.keys.include? @season_id
14
+
15
+ JSON.parse(Nokogiri::HTML(URI.parse(url).open).text[5..-2], symbolize_names: true)
16
+ &.first
17
+ &.dig(:sections)
18
+ &.first
19
+ &.dig(:data)
20
+ &.first
21
+ &.dig(:row, :date_with_day)
22
+ end
23
+
24
+ private
25
+
26
+ def url
27
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=schedule&team=-1&season=#{@season_id}&month=#{@start_month}&location=homeaway&key=50c2cd9b5e18e390&client_code=ahl&site_id=1&callback=json"
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class SeasonTypeFetcher
5
+ def initialize(season_id)
6
+ @season_id = season_id
7
+ end
8
+
9
+ def call
10
+ season = JSON.parse(Nokogiri::HTML(URI.parse(url).open).text[5..-2], symbolize_names: true)
11
+ .dig(:seasons)
12
+ &.find { |s| s[:id].to_i == @season_id.to_i }
13
+ return nil unless season
14
+
15
+ case season[:name]
16
+ when /Regular/
17
+ :regular
18
+ when /All-Star/
19
+ :all_star
20
+ when /Playoffs/
21
+ :playoffs
22
+ when /Exhibition/
23
+ :exhibition
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def url
30
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=bootstrap&season=latest&pageName=schedule&key=50c2cd9b5e18e390&client_code=ahl&site_id=1&league_id=&league_code=&lang=en&callback=json"
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ class TeamDataFetcher
5
+ def initialize(season_id)
6
+ @season_id = season_id
7
+ end
8
+
9
+ def call
10
+ JSON.parse(Nokogiri::HTML(URI.parse(url).open).text[5..-2], symbolize_names: true)&.first&.dig(:sections)&.map { |t| t[:data] }&.flatten
11
+ end
12
+
13
+ private
14
+
15
+ def url
16
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=teams&groupTeamsBy=division&site_id=1&season=#{@season_id}&key=50c2cd9b5e18e390&client_code=ahl&league_id=4&callback=json" # rubocop:disable Layout/LineLength
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AhlScraper
4
+ module TeamGames
5
+ class DataFetcher
6
+ def initialize(team_id, season_id)
7
+ @team_id = team_id
8
+ @season_id = season_id
9
+ end
10
+
11
+ def call
12
+ JSON.parse(Nokogiri::HTML(URI.parse(url).open).text[5..-2], symbolize_names: true)&.dig(0, :sections, 0, :data)
13
+ end
14
+
15
+ private
16
+
17
+ def url
18
+ "https://lscluster.hockeytech.com/feed/index.php?feed=statviewfeed&view=schedule&team=#{@team_id}&season=#{@season_id}&month=-1&location=homeaway&key=ccb91f29d6744675&client_code=ahl&site_id=3&league_id=4&division_id=-1&lang=en&callback=json" # rubocop:disable Layout/LineLength
19
+ end
20
+ end
21
+ end
22
+ end