LoginSignup
2
1

More than 5 years have passed since last update.

Rubyで画像収集を行う【3】検索結果の取得

Posted at

目次

1:検索条件の入力 
2:検索結果の取得 
3:画像の取得と保存 ←いまここ
つづく

前回のおさらい

【2】検索結果の取得 では、画像の元URLを配列で取得した。
今回はそれらをもとに、実際に画像を保存する

早速始めよう

def save_image(url)
  #その日の名前でディレクトリを作成
  dn = DateTime.now
  dt = dn.year.to_s + dn.mon.to_s + dn.day.to_s + "\\"
  #僕はカレントディレクトリにあるimgフォルダのの中に格納している
  dirName = "\img\\" + dt
  #同名のものが既にない場合のみディレクトリを作成
  FileUtils.mkdir_p(dirName) unless FileTest.exist?(dirName)


  #前回取得したurlにあるファイル名を取得
  fileName = File.basename(url)
  filePath = dirName + fileName

  #?などを含む名前はファイルにつけられないので変更
  if fileName.include?('?')
    dn = DateTime.now
    fileName='img' + dn.hour.to_s + 'h' + dn.min.to_s + 'm' + dn.sec.to_s + 's' + '.jpg'
  end

  #同名のファイルがある場合は変更
  if File.exist?(filePath)
    dn = DateTime.now
    fileName='img' + dn.hour.to_s + 'h' + dn.min.to_s + 'm' + dn.sec.to_s + 's' + '.jpg'
  end

  #改めて最終的なファイルパスを設定
  filePath = dirName + fileName

  #ファイルパスを出力  
  p filePath

  # 指定したパス(自分のディレクトリ)を開いて
  open(filePath, 'wb') do |output|
    #urlを開いて書き込み(保存)
    open(url) do |data|
      output.write(data.read)
    end
  end
end

コメント

save_image関数で画像を保存する部分を書きました。
が、見てわかるように保存する部分は最後のとこだけで、
それ意外の前半部分はディレクトリの確認や
ファイル名に問題がないようにしています

一応補足ですが、この関数は各画像URLに対して1回呼ばれるので、
このプログラム内での変数urlは配列ではなく1つです。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1