を教えてください。
保存場所はデスクトップです
require ’win32ole’
ie = WIN32OLE.new(’InternetExplorer.Application’)
ie.Navigate(”http://www.hatena.ne.jp/”)
ie.Visible = true
while ie.busy
sleep 1
end
URL はダミーです。
Ruby から HTML ファイルを取得する方法ですが、
主な方法として次の3通りの手段があるかと思います。
1. COM の InternetExplorer.Application を使う方法
→ InnerHTML を取得する方法。改行、タグの大文字・小文字、文字コードなどが変換されてしまう。
→ ExecWB を使うという方法もあるが、ファイルを保存するダイアログが表示されてしまう。
→ IWebBorwser2 → IHTMLDocument2 → IPersistFile → IPersistFile::Save()
という方法もあることはあるが、スクリプトからは呼び出し不可(隠しAPI?)
2. COM の MSXML2.XMLHTTP を使う方法
→ 改行、大文字・小文字などは変換されないが、バイナリで保存しないと SJIS に変換されてしまう。
3. Ruby の net/http ライブラリを使う方法
→ オリジナルデータ(生データ)をそのまま取得することが可能。
一通り試してみましたが、Ruby で処理を行うのであれば、
「3.」の net/http ライブラリを使う方法(標準で使用可能)が良い気がします。
以下は、サンプルコードです。
(コードの一部の記号が全角になっていますので、適宜、半角に直してください。)
###########################################################
# 1. COM の InternetExplorer.Application を使う方法
###########################################################
require ’win32ole’
ie = WIN32OLE.new(’InternetExplorer.Application’)
ie.Navigate(”http://www.hatena.ne.jp/”)
# ie.Visible = true
while ie.busy
sleep 1
end
filename = ENV[”USERPROFILE”] + ”¥¥デスクトップ¥¥” + ”test.html”
File.open( filename, ”w” ) do |file|
ie.Document.All.each {|item|
if item.tagName.upcase == ”HTML”
file.puts item.InnerHTML
end
}
end
###########################################################
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaXMLHTTP.html
Web ページをダウンロードする方法〜 MSXML 編〜
###########################################################
# 2. COM の MSXML2.XMLHTTP を使う方法
###########################################################
require ’win32ole’
http = WIN32OLE.new(’MSXML2.XMLHTTP’)
http.Open ”GET”, ”http://www.hatena.ne.jp/”, false
http.Send
filename = ENV[”USERPROFILE”] + ”¥¥デスクトップ¥¥” + ”test.html”
File.open( filename, ”w” ) do |file|
file.puts http.responseText
end
http://www.ruby-lang.org/ja/man/?cmd=view;name=net%2Fhttp.rb
Rubyリファレンスマニュアル - net/http.rb
###########################################################
# 3. Ruby の net/http ライブラリを使う方法
###########################################################
require ’net/http’
Net::HTTP.version_1_2
Net::HTTP.start(’www.hatena.ne.jp’, 80) {|http|
response = http.get(’/index.html’)
filename = ENV[”USERPROFILE”] + ”¥¥デスクトップ¥¥” + ”test.html”
File.open( filename, ”w” ) do |file|
file.puts response.body
end
}
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1374332
[教えて!goo] Webから定期的にファイルを保存
URL は参考情報です。
また、別の方法として wget のようなツールを使うという手もあると思います。
どうしても Ruby でやりたいということでしたら、アレですが・・・。
1. COM の InternetExplorer.Application を使う方法を採用させてもらいました。とても役に立ちました。ありがとうございました。