Module: Syobocalite

Defined in:
lib/syobocalite.rb,
lib/syobocalite/program.rb,
lib/syobocalite/version.rb,
lib/syobocalite/db_client.rb

Defined Under Namespace

Classes: DbClient, Program

Constant Summary collapse

MAX_RETRY_COUNT =
10
VERSION =
"1.2.0"

Class Method Summary collapse

Class Method Details

.search(start_at:, end_at:) ⇒ Array<Program>

Search programs between start_at and end_at

Parameters:

  • start_at (Time)
  • end_at (Time)

Returns:

See Also:



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/syobocalite.rb', line 17

def self.search(start_at:, end_at:)
  xml = fetch(start_at: start_at, end_at: end_at)
  response = MultiXml.parse(xml)
  prog_items = response["syobocal"]["ProgItems"]["ProgItem"]

  programs = prog_items.map { |prog_item| Syobocalite::Program.from_prog_item(prog_item) }

  programs.select do |program|
    (start_at...end_at).cover?(program.st_time)
  end
end

.user_agentString

Returns:

  • (String)


30
31
32
# File 'lib/syobocalite.rb', line 30

def self.user_agent
  "Syobocalite v#{Syobocalite::VERSION} (+https://github.com/sue445/syobocalite)"
end

.with_retryObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/syobocalite.rb', line 58

def self.with_retry
  retry_count ||= 0
  yield
rescue OpenURI::HTTPError => error
  status_code = error.io.status[0].to_i
  raise error unless status_code == 429

  retry_count += 1
  raise error if retry_count > MAX_RETRY_COUNT

  # 1, 2, 4, 8, 16 ...
  sleep_time = 2 ** (retry_count - 1)

  sleep sleep_time

  retry
end