* ファイル取得@Ruby (2/28)
Feb 9 2014
おい、お前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
Rubyのこのendってやつ、個人的に気に入りました。
Pythonとかで入れ子作りすぎると可読性下がるので。。。
まぁ入れ子作りすぎんなって話なのですけれでも。
明日もなんか書くぞ。
P.S.
就活の一貫で今月2つほどハッカソンに出かけてきます。
両方とも何やらAPIを扱うとか抽象的な感じなのですが、情弱なりに頑張ってきます。
※この記事は WordPress に投稿した記事を変換したものです。一部不自然な表示があるかも知れません。ご了承ください。また、記事タイトル先頭の * は WordPress から移行した記事である印です。