• 締切済み

Rubyの株価ダウンロードプログラム

以下は、Yhooファイナンスからの株価ダウンロードプログラムらしいのですが、私にはどういったことをしているのか、いまいちわかりません。 どなたか解説していただけませんか。 require 'open-uri' require 'nkf' require 'jcode' require 'date' $KCODE='s' # 漢字コードをEUCに。Windowsでは 's' #****シフトJISに変換**** class String def to_sjis henkan = NKF.nkf('-s', self) henkan end end #*************** today = Date::today regEx = '(\d+)年(\d+)月(\d+)日<\/small><\/td><td><small>([\d,]+)<\/small><\/td><td><small>([\d,]+)<\/small><\/td><td><small>([\d,]+)<\/small><\/td><td><small><b>([\d,]+)<\/b><\/small><\/td><td><small>([\d,]+)<\/small><\/td><td><small>([\d,]+)' 1301.upto(9999) do |meigara| begin begin meigaradatafile = open("#{meigara}.csv" , "r" ) rescue puts "#{meigara}" + 'は存在しません' meigaradatafile = open("#{meigara}.csv" , "w" ) meigaradatafile.close meigaradatafile = open("#{meigara}.csv" , "r" ) end meigaradata = meigaradatafile.readlines if meigaradata == [] lastdate = Date::new(1983 , 1 , 4) else meigaradatalastline = meigaradata[meigaradata.length-1].split(/\s*,\s*/) lastyear = meigaradatalastline[0] lastmonth = meigaradatalastline[1] lastday = meigaradatalastline[2] meigaradatafile.close lastdate = Date::new(lastyear.to_i , lastmonth.to_i , lastday.to_i) if lastdate >= today next end lastdate = lastdate + 1 end starttime = Time.now temp2 = String.new max = today - lastdate 0.step(max , 50) do |i| begin f = open("http://table.yahoo.co.jp/t?s=#{meigara}.t&a=#{lastdate.month 5;&b=#{lastdate.day}&c=#{lastdate.year}&d=# 23;today.month 5;&e=#{today.day 25;&f=#{;today.year}&g=d&q=t&y=#{i}&z=#{meigara}.t&x=.csv") rescue TimeoutError puts 'タイムアウト リトライ' retry end str = Array.new temp = String.new temp = f.read.to_sjis temp3 = Array.new temp.each_line do |line| line = line.gsub("," , "") if line.scan(/#{regEx}/) != [] str.push line.scan(/#{regEx}/) end end p meigara.to_s + ':' + i.to_s if str == [] break end str.each do |j| temp3.push j end temp3.each do |k| temp2 = k.join(",").to_s + "\n" + temp2 end end if temp2 != "" foo = open("#{meigara}.csv",'a') foo.puts temp2 foo.close end elapsedtime = (Time.now - starttime)/60 yosou = elapsedtime * (9999 - meigara.to_i) puts meigara.to_s + ' ' + '経過時間' + ':' + (elapsedtime.to_s) + '予想時間' + ':' + (yosou/60/60).to_s rescue retry end end

みんなの回答

  • KI401
  • ベストアンサー率53% (44/82)
回答No.1

大枠は、 ・1301から9999までの銘柄について ・存在すればソースを引っ張ってくる ・ソースから正規表現で欲しい情報を抜き出す ってとこ。 何がどう分からないのか分からないのでこれ以上何とも解説のしようがない。 教えてほしいなら何を知りたいのか詳しく明確に述べることだ。 「らしい…」だとか「いまいち…」とかじゃなくてさ。 あと、規約として丸投げの質問禁止だから。

関連するQ&A