Sha256: e616092e86ab5bf12e0b85805bdb4355ae1c1cc39a8218c2919460732c9263e9
Contents?: true
Size: 1.45 KB
Versions: 1
Compression:
Stored size: 1.45 KB
Contents
module Simple2ch require 'socket' require 'open-uri' require 'time' require 'charwidth' require 'retryable' class BBS attr_reader :type_of_2ch, :boards, :updated_at def initialize(type_of_2ch) case type_of_2ch when :sc, :open @type_of_2ch = type_of_2ch else raise %{Invalid "type_of_2ch" given: #{type_of_2ch} (:sc or :open is correct.)} end @updated_at = Time.now end def root File.dirname __dir__ end # @option [Boolean] force_reload キャッシュを利用せず板リストを再取得する # @return [Array<Simple2ch::Board>] 板リスト def boards(force_reload: nil, bbsmenu_url: nil) if force_reload @boards = fetch_boards(bbsmenu_url) else @boards ||= fetch_boards(bbsmenu_url) end end private def fetch_boards(bbsmenu_url = nil) bbsmenu_urls = { sc: 'http://2ch.sc/bbsmenu.html', open: 'http://open2ch.net/bbsmenu.html' } bbsmenu_url = bbsmenu_urls[type_of_2ch] if bbsmenu_url.nil? data = Simple2ch.fetch(URI.parse(bbsmenu_url)) raise "Failed to fetch #{bbsmenu_url}" if data.empty? scaned_data = data.scan(Regex::BOARD_EXTRACT_REGEX).uniq raise "Failed to parse #{bbsmenu_url}" if scaned_data.empty? boards = scaned_data.map do |b| Simple2ch::Board.new("http://#{b[0]}.#{b[1]}2ch.#{b[2]}/#{b[3]}/", title: b[4]) end boards.compact end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
simple2ch-1.1.0 | lib/simple2ch/bbs.rb |