2014/01/03(金) [n年前の日記]
#1 [ruby] Rubyで画像をダウンロード
数日前から、「Rubyスクリプトを実行するだけでドット絵が表示されたら楽だろうなー」と思って、アレコレ考えてたのだけど。ふと、「手元に画像ファイルが存在しなかったら、その時だけ、Webサーバから持ってくればいいんじゃないか?」と閃いて。
検索してみたら、 _ネット上の画像をRubyでダウンロードする方法 - ダークな糸 で解説されてる内容がそのものズバリな感じで。参考にしつつ、自分も実験。
_http_access_test1.rb
_http_access_test2.rb
一応、Geocities 内の自分のアカウントにアップロードした画像を、DLかつ表示することはできるようになった。
ただ、自分が最初にやってみたいと思った処理は、Dropbox に置いてある画像を取得する処理、だったわけで…。Geocities に一々アップロードするのは、ちと面倒臭いけど。Dropbox ならローカルで該当フォルダにコピーするだけだし。
Dropbox と言っても、共有リンクを取得する形、つまりは、一般に公開されてるURLから取得するソレなのだけど。試してみたら、なんだかエラーが。Dropbox の共有リンクって、http ではなくて https から始まるURLなので、おそらくソレが原因なのかなと。しかし、Ruby で https アクセスをしようとすると、証明書がどうのこうのという話になってくるようで。
_library net/https
_HTTPSでサーバーに接続 - うなの日記
_RubyにおけるHTTPS通信 - 狼ニコ生うらやまけしからん日記
どう考えても、「Rubyスクリプトを動かすだけで画像がサクッと表示される」という状況から、かけ離れてしまうよなと…。
もしかすると、 _OpenGameArt.org あたりに画像を登録して、そこに httpアクセスしたほうがいいのかな、という気もしてきたり。
検索してみたら、 _ネット上の画像をRubyでダウンロードする方法 - ダークな糸 で解説されてる内容がそのものズバリな感じで。参考にしつつ、自分も実験。
_http_access_test1.rb
# 画像をネットから読み込むテストその1 require 'open-uri' require 'dxruby' uri = "http://www.geocities.jp/mieki256jp/resource/_dxruby_image_ufo.png" fn = File.basename(uri) unless File.exist?(fn) # カレントフォルダ内に画像が無いのでダウンロード puts "not found #{fn}" puts "download #{uri}" src = open(uri) dst = open(fn, "wb") dst.write(src.read()) dst.close() src.close() else puts "found #{fn}" end img = Image.load(fn) Window.loop do break if Input.keyPush?(K_ESCAPE) Window.draw(0, 0, img) end
_http_access_test2.rb
# 画像をネットから読み込むテストその2 require 'net/http' require 'uri' require 'dxruby' uri = URI("http://www.geocities.jp/mieki256jp/resource/_dxruby_image_sprite1.png") fn = File.basename(uri.path) unless File.exist?(fn) # カレントフォルダ内に画像が無ければダウンロード puts "not found #{fn}" puts "download #{uri.host} #{uri.path}" http = Net::HTTP.new(uri.host) response = http.get(uri.path) image = response.body file = open(fn, "wb") file.write(image) file.close() else puts "found #{fn}" end img = Image.load(fn) Window.loop do break if Input.keyPush?(K_ESCAPE) Window.draw(0, 0, img) end
一応、Geocities 内の自分のアカウントにアップロードした画像を、DLかつ表示することはできるようになった。
ただ、自分が最初にやってみたいと思った処理は、Dropbox に置いてある画像を取得する処理、だったわけで…。Geocities に一々アップロードするのは、ちと面倒臭いけど。Dropbox ならローカルで該当フォルダにコピーするだけだし。
Dropbox と言っても、共有リンクを取得する形、つまりは、一般に公開されてるURLから取得するソレなのだけど。試してみたら、なんだかエラーが。Dropbox の共有リンクって、http ではなくて https から始まるURLなので、おそらくソレが原因なのかなと。しかし、Ruby で https アクセスをしようとすると、証明書がどうのこうのという話になってくるようで。
_library net/https
_HTTPSでサーバーに接続 - うなの日記
_RubyにおけるHTTPS通信 - 狼ニコ生うらやまけしからん日記
どう考えても、「Rubyスクリプトを動かすだけで画像がサクッと表示される」という状況から、かけ離れてしまうよなと…。
もしかすると、 _OpenGameArt.org あたりに画像を登録して、そこに httpアクセスしたほうがいいのかな、という気もしてきたり。
◎ 2014/01/15追記。 :
色々実験してるうちに、上記URLの画像を削除してしまったらしい…。どの画像を使おうとしてたのか忘れた…。
何にせよ、こういう手もありそうだと分かった、ということで。
何にせよ、こういう手もありそうだと分かった、ということで。
[ ツッコむ ]
以上です。