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の画像を削除してしまったらしい…。どの画像を使おうとしてたのか忘れた…。
何にせよ、こういう手もありそうだと分かった、ということで。
何にせよ、こういう手もありそうだと分かった、ということで。
[ ツッコむ ]
以上、1 日分です。