Class: GGXrd::Frames

Inherits:
Object
  • Object
show all
Defined in:
lib/ggxrd/frames.rb,
lib/ggxrd/frames/error.rb,
lib/ggxrd/frames/column.rb,
lib/ggxrd/frames/version.rb,
lib/ggxrd/frames/characters.rb

Defined Under Namespace

Classes: ScrapingError

Constant Summary collapse

COLUMN =
[
  'name',
  'damage',
  'tension',
  'attack_lv',
  'risc_lv',
  'prorate',
  'attribute',
  'startup',
  'active',
  'recovery',
  'frame_adv',
  'invincibility',
  'remarks',
]
VERSION =
"0.1.0"
CHARACTERS =
{
  :SO => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_1 table'},
  :SO_DI => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_2 table'},
  :KY => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_3 table'},
  :MA => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_4 table'},
  :MI => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_5 table'},
  :ZT => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_6 table'},
  :PO => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_7 table'},
  :CH => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_8 table'},
  :FA => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_9 table'},
  :AX => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_10 table'},
  :VE => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_11 table'},
  :SL => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_12 table'},
  :IN => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_13 table'},
  :BE => {url: 'http://www.4gamer.net/guide/ggxrd/031723018/', selector: 'div#table_result_14 table'},
  :RA => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_15 table'},
  :SI => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_16 table'},
  :EL => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_17 table'},
  :LE => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_18 table'},
  :JO => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_19 table'},
  :JC => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_20 table'},
  :JA => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_21 table'},
  :RV => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_22 table'},
  :KU => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_23 table'},
  :DI => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_24 table'},
  :BA => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_25 table'},
  :AS => {url: 'http://www.4gamer.net/guide/ggxrd/031723052/', selector: 'div#table_result_26 table'},
}

Instance Method Summary collapse

Instance Method Details

#frame_of(character) ⇒ Object

Raises:

  • (ArgumentError)


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ggxrd/frames.rb', line 9

def frame_of (character)

  raise ArgumentError.new('The argument must be a String or a Symbol') unless character.is_a?(String) || character.is_a?(Symbol)

  character = character.to_sym

  raise ArgumentError.new('The argument must be an abbrev of a character name, like "SO", "KY", ...') unless GGXrd::Frames::CHARACTERS[character]

  url = GGXrd::Frames::CHARACTERS[character][:url]
  res = Mechanize.new.get(url)

  # scraping
  table = res.at(GGXrd::Frames::CHARACTERS[character][:selector])
  raise GGXrd::Frames::ScrapingError.new('Frame data is "Download Complete", but failed to scrape it') unless table

  data = (
    table.search('tr').to_a.map do |row|
      row.search('td').to_a.map do |el|
        (el.at('img') ? el.at('img').attribute('alt') : '').to_s + el.content.strip
      end
    end
  )

  # screening
  data.select! {|row| row != []}

  # convert to hash
  data.map do |row|
    Hash[*([GGXrd::Frames::COLUMN, row].transpose.flatten)]
  end
end