Update GranblueWiki
This is an adaptation and cleanup of the original GranblueWiki class. We extracted the object-related code into a parser, and this class is now only responsible for requests and fetching common property maps.
This commit is contained in:
parent
2166ff5354
commit
b3caa1f1d3
1 changed files with 103 additions and 0 deletions
103
app/helpers/granblue_wiki.rb
Normal file
103
app/helpers/granblue_wiki.rb
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'httparty'
|
||||
|
||||
# GranblueWiki fetches and parses data from gbf.wiki
|
||||
class GranblueWiki
|
||||
class_attribute :base_uri
|
||||
|
||||
class_attribute :proficiencies
|
||||
class_attribute :elements
|
||||
class_attribute :rarities
|
||||
class_attribute :genders
|
||||
class_attribute :races
|
||||
class_attribute :boolean
|
||||
|
||||
self.base_uri = 'https://gbf.wiki/api.php'
|
||||
|
||||
self.proficiencies = {
|
||||
'Sabre' => 1,
|
||||
'Dagger' => 2,
|
||||
'Axe' => 3,
|
||||
'Spear' => 4,
|
||||
'Bow' => 5,
|
||||
'Staff' => 6,
|
||||
'Melee' => 7,
|
||||
'Harp' => 8,
|
||||
'Gun' => 9,
|
||||
'Katana' => 10
|
||||
}.freeze
|
||||
|
||||
self.elements = {
|
||||
'Wind' => 1,
|
||||
'Fire' => 2,
|
||||
'Water' => 3,
|
||||
'Earth' => 4,
|
||||
'Dark' => 5,
|
||||
'Light' => 6
|
||||
}.freeze
|
||||
|
||||
self.rarities = {
|
||||
'R' => 1,
|
||||
'SR' => 2,
|
||||
'SSR' => 3
|
||||
}.freeze
|
||||
|
||||
self.races = {
|
||||
'Other' => 0,
|
||||
'Human' => 1,
|
||||
'Erune' => 2,
|
||||
'Draph' => 3,
|
||||
'Harvin' => 4,
|
||||
'Primal' => 5
|
||||
}.freeze
|
||||
|
||||
self.genders = {
|
||||
'o' => 0,
|
||||
'm' => 1,
|
||||
'f' => 2,
|
||||
'mf' => 3
|
||||
}.freeze
|
||||
|
||||
self.boolean = {
|
||||
'yes' => true,
|
||||
'no' => false
|
||||
}.freeze
|
||||
|
||||
def fetch(page)
|
||||
query_params = params(page).map do |key, value|
|
||||
"#{key}=#{value}"
|
||||
end.join('&')
|
||||
|
||||
destination = "#{base_uri}?#{query_params}"
|
||||
response = HTTParty.get(destination)
|
||||
|
||||
handle_response(response, page)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def handle_response(response, page)
|
||||
case response.code
|
||||
when 200
|
||||
if response.key?('error')
|
||||
raise WikiError.new(code: response['error']['code'],
|
||||
message: response['error']['info'],
|
||||
page: page)
|
||||
end
|
||||
|
||||
response['parse']['wikitext']['*']
|
||||
when 404 then puts "Page #{page} not found"
|
||||
when 500...600 then puts "Server error: #{response.code}"
|
||||
end
|
||||
end
|
||||
|
||||
def params(page)
|
||||
{
|
||||
action: 'parse',
|
||||
format: 'json',
|
||||
page: page,
|
||||
prop: 'wikitext'
|
||||
}
|
||||
end
|
||||
end
|
||||
Loading…
Reference in a new issue