class Gwitch::Region::Asia

Constants

API_URL
QUERIES

Public Class Methods

games() click to toggle source
# File lib/gwitch/region/asia.rb, line 18
def games
  games = []
  uri = URI.parse(API_URL)
  page = 1

  loop do
    uri.query = URI.encode_www_form(QUERIES.merge(page: page))

    result = JSON.parse(uri.read)['result']

    total = result['total']
    games += result['items']
    page += 1

    break unless games.size < total
  end

  parse(games)
end

Private Class Methods

parse(raw) click to toggle source
# File lib/gwitch/region/asia.rb, line 40
def parse(raw)
  host = 'https://ec.nintendo.com/JP/ja/titles/'
  image_host = 'https://img-eshop.cdn.nintendo.net/i/'
  image_extension = '.jpg'

  raw.map do |game|
    modes = []
    modes += game['pmode']&.map { |mode| mode.delete_suffix('_MODE') } || []

    image_urls = []
    image_urls += game['sslurl']&.map { |id| image_host + id + image_extension } if game['sslurl']
    image_urls << image_host + game['iurl'] + image_extension if game['iurl']

    url = game['nsuid'] ? host + game['nsuid'] : nil

    {
      nsuid: game['nsuid'],
      code: game['icode'],
      title: game['title'],
      description: game['text'],
      categories: game['genre'],
      maker: game['maker'],
      player: game['player']&.first,
      languages: game['lang'],
      modes: modes,
      dlcs: game['cnsuid'] || [],
      region: 'Asia',
      images: image_urls,
      url: url,
      release_at: game['pdate']
    }
  end
end