###前提・実現したいこと
Ruby初心者ですが、
Rubyを使用して、ネットから株価情報を抜き出すシステムを作成しようとしております。
上場市場と売買株数を抜き出し、txtファイルとして保存したいです。
###発生している問題・エラーメッセージ
txtファイルは作成されますが、中身は空のままです。
また、エラーメッセージなどは表示されておりません。
###該当のソースコード
Ruby
1 2 3# coding: Windows-31J 4 5require "open-uri" 6 7# 日経の銘柄情報を取得し、銘柄リストを作るクラス 8# 証券コード、上場市場、単元株数・売買単位が含まれる 9 10class StockListMaker 11 12 attr_accessor :data_dir, :file_name 13 14 15 def initialize(market) 16 17 @market = market 18 @data_dir = "data" 19 @stock_info = [] 20 end 21 22 23 # 銘柄情報の取得 24 25 def get_stock_info(code) 26 page = open_page(code) 27 return unless page 28 text = page.read.encode("Windows-31J" , :undef => :replace) 29 30 data = parse(text) 31 data[:code] = code 32 return unless data[:matket_section] 33 puts code 34 @stock_info << data 35 end 36 37 38 # 銘柄情報の保存 39 40 def save_stock_list 41 File.open(@data_dir + "/" + @file_name, "w") do |file| 42 @stock_info.each do |data| 43 file.puts [data[:code], data[:market_section], data[:unit]].join(",") 44 end 45 end 46 end 47 48 49 private 50 51 # 銘柄情報ページを開く 52 53 def open_page(code) 54 begin 55 open("http://www.nikkei.com" + "/nkd/company/?scode=#{code}") 56 rescue OpenURI::HTTPError 57 return 58 end 59 end 60 61 62 # HTMLから銘柄情報を抜き出す 63 64def parse(text) 65 data = Hash.new 66 67 sections = [] 68 reg_market = /option_mk" >([^< ]+) ?</ 69 reg_unit = %r!<span class="m-stockInfo_detail_value">(\d|,)<span class="m-stockInfo_detail_unit"> 株</span>! 70 71 text.lines do |line| 72 if line = reg_market 73 sections << $+ 74 elsif line =~ reg_unit 75 data[:market_section] = sections[0] 76 data[:unit] = get_unit($+) 77 return data 78 end 79 end 80 data 81end 82 83 84 85# 単元株数を得る 86 87def get_unit(str) 88 if str == "---" 89 "1" 90 else 91 str.gsub(/,/,"") 92 end 93 end 94end 95
Ruby
1# codeing: Windows-31J 2 3require "B:/trade_simulator/lib/stocklistmaker" 4 5 6# 東証銘柄リストを作る 7 8slm = StockListMaker.new(:t) 9 10slm.file_name = ARGV[0] || "tosho_list.txt" 11 12puts slm.file_name 13 14(1400..1402).each do |code| 15 16 slm.get_stock_info(code) 17 18end 19 20slm.save_stock_list
###試したこと
parseメソッドのif end後(下から2つ目のendと3つ目のendの間)で
puts dataを実行すると、
{} {} {} {} {} {} {}
上記のような実行結果が返されます。
このことより、読み込んだデータを保管できていないのかと思っております。
エンコードのせいかと思い、coding:UTF-8でも試しましたが、ダメでした。
正規表現も見直しましたが、わかりませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
・Ruby 2.3.3
・Eclipseプラットフォーム 4.6.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/18 09:01
退会済みユーザー
2017/06/18 10:18 編集
2017/06/19 21:56
退会済みユーザー
2017/06/19 23:13