Class: Narou::API

Inherits:
Object
  • Object
show all
Defined in:
lib/narou/api.rb

Overview

小説家になろうデベロッパーAPI操作クラス

Instance Method Summary collapse

Constructor Details

#initialize(setting, of) ⇒ API

なろうデベロッパーAPIから情報を取得

setting: なろうの SiteSetting of: 出力パラメータ(dev.syosetu.com/man/api/#of_parm 参照)



21
22
23
24
25
26
# File 'lib/narou/api.rb', line 21

def initialize(setting, of)
  @setting = setting
  @api_url = @setting["narou_api_url"]
  @ncode = @setting["ncode"]
  request_api(of)
end

Instance Method Details

#[](key) ⇒ Object



28
29
30
# File 'lib/narou/api.rb', line 28

def [](key)
  @api_result[key]
end

#request_api(of, gzip = 5) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/narou/api.rb', line 32

def request_api(of, gzip = 5)
  # Ruby 2.0 以上だと gzip 自動デコード
  gzip_opt = RUBY_VERSION >= "2.0.0" ? "gzip=#{gzip}&" : ""
  url = "#{@api_url}?#{gzip_opt}ncode=#{@ncode}&of=#{of}"
  open(url) do |fp|
    result = YAML.load(fp.read.force_encoding(Encoding::UTF_8))
    if result[0]["allcount"] == 1
      @api_result = result[1]
      if of.length > 0
        @api_result["novel_type"] = @api_result["noveltype"]
        # なろうAPIが返すデータが数値の場合があるため強制変換
        @api_result["writer"] = @api_result["writer"].to_s
        stat_end = @api_result["end"]
        if stat_end
          @api_result["end"] = stat_end == 0
        end
      end
    else
      # なろうAPIからデータを取得出来なかった
      # 開示設定が検索から除外に設定されるとAPIからはアクセスできなくなる
      result = NovelInfo.load(@setting)
      unless result
        error "小説家になろうからデータを取得出来ませんでした"
        exit Narou::EXIT_ERROR_CODE
      end
      @api_result = result
    end
  end
end