* ファイル取得@Ruby (2/28)

おい、お前1日1実装言うたやないか。

ごめんて。

実は火曜日から4日間ほど熱でダウンしておりまして

今日やっと復活なんです。

だからおおめに見てちょ。

(3月になっても終わってなかったらもちろんやるよ)

簡潔に。Web上のファイルを取得して保存するスクリプトをRubyで書きました。

俺「先輩、Rubyって何が向いてるんですか?」

先輩(ゼミ)「全部だよ全部」

らしいのでまぁなんとなくやりました。Ruby触ったことないですし。

今回の要件

・Webページの.png画像を取ってくる

.png画像は連番なのでfor文で回す

ここで厄介なことに今回のターゲットにしたURLが

http://hoge-[number]-moge/[number].png

みたいな感じで全部の画像が同じURLに乗っかっておらず中間の数字も少し変わってたのでそこもループを回す

と、当然いらない処理多すぎなので以下の条件も追加

・もう一箇所の数字も回す

・取得に成功した番号の画像は処理を行わない

かなりggりながらの作業だったけどまぁ動いたのでよし。

              #! /usr/bin/ruby
              # Date 2014/02/08
              # Created by sota1235
               
              require 'open-uri'
               
              # 成功したら配列から削除
              $array = [*1..1368]
               
              def save_pic(url)
                fName = File.basename(url)
                # ファイル保存場所
                path = "/hoge/" + fName
               
                begin
                  open(path,'wb') do |output|
                    open(url) do |data|
                      output.write(data.read)
                    end
                  end
                  print(fName," is success.\n")
                  $array.delete(fName.delete(".png").to_i)
                  $array.insert fName.delete(".png").to_i - 1, "x" # xを突っ込むことでfor文でのポインタずれを回避
                rescue
                  print(fName," is failed.\n")
                  File.unlink path
                end
              end
               
              base1 = "http://hoge-"
              base2 = "-moge/"
              for num1 in 48..57 do
                for num2 in $array do
                  unless num2=='x'
                    save_pic(base1 + num1.to_s + base2 + num2.to_s + ".png")
                  end
                end
              end
              

Gist : taker.rb

Rubyのこのendってやつ、個人的に気に入りました。

Pythonとかで入れ子作りすぎると可読性下がるので。。。

まぁ入れ子作りすぎんなって話なのですけれでも。

明日もなんか書くぞ。

P.S.

就活の一貫で今月2つほどハッカソンに出かけてきます。

両方とも何やらAPIを扱うとか抽象的な感じなのですが、情弱なりに頑張ってきます。


※この記事は WordPress に投稿した記事を変換したものです。一部不自然な表示があるかも知れません。ご了承ください。また、記事タイトル先頭の * は WordPress から移行した記事である印です。

comments powered by Disqus