RubyCocoa でダウンローダを作ってみる その1
なんとなくRubyCocoaを勉強したくなったので前にRubyで書き捨てていた画像一括ダウンロード用のスクリプトをGUIで使えるようにしてみる。
元となったスクリプトはこれ。
(0..10).each do |i|
page = sprintf('%3d', i)
url = "/#{page}.jpg"
referrer = "/#{page}.html"
directory = '/Users/yuanying/download'
user_agent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; ja-jp) AppleWebKit/523.10.3 (KHTML, like Gecko) Version/3.0.4 Safari/523.10'
command = "/opt/local/bin/wget #{url} --referer=#{referrer} -P #{directory} --user-agent='#{user_agent}'"
`#{command}`
sleep(3)
end
連番で指定してある画像をwgetでダウンロード。まあこのくらいcurlでやれよって話だけど、curl使ったことなかったんですよ!
仕様
- 連番となっているファイルをダウンロードする。
- ダウンロードするファイルのURLとリファラー元を偽装する際のURLを指定する。
- ユーザエージェントを偽装する。
- 保存先のディレクトリを指定できる。
- 実際のダウンロードはwgetを使用する。
開発環境
- Mac OS X 10.5.1
- Xcode 3
- ruby 1.8.6 (2007-06-07 patchlevel 36) [universal-darwin9.0]
プロジェクトの作成
Xcodeを起動してプロジェクトを作成する。
プロジェクト名は適当。今回はPictGetとかいう名前にしてみた。
ユーザインタフェースの作成
早速ユーザインタフェースを作ってみる。
Cocoaではnibファイルとかいうのがユーザインタフェースを実装しているファイルらしいので、nibファイルを選択してダブルクリックしてみる。そうするとユーザインタフェースを編集するためにInterface Builderが起動する。
最初からすでに開かれているウィンドウにぽぽーんとパレットから部品を選んでドラッグアンドドロップしてやる。
これでユーザインタフェースは完成。ちょー簡単。
コントローラの作成
プロジェクトのClassesを選択して、新規ファイルを追加する。
作るのは Ruby NSObject subclass。ここでファイル名=クラス名なので、AppController.rbというファイル名で保存してやる。
エディタでAppController.rbを開き、以下のように編集。
require 'osx/cocoa'
class AppController < OSX::NSObject
ib_outlet :first_page_text
ib_outlet :last_page_text
ib_outlet :format_text
ib_outlet :url_text
ib_outlet :referrer_text
ib_outlet :user_agent_combo
ib_outlet :path_text
ib_action :browse do
end
ib_action :download do
end
end
ib_outletで参照するコントロールを宣言。ib_actionで実際に実行するアクションを宣言する。ただし、まだこの時点ではどの宣言がどのコントロールを指すのかまだ指定していないため、その接続を具体的に指定してやる必要がある。