バリケンのRuby日記 RSSフィード

2007-02-01

[] net/ftp  net/ftp - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  net/ftp - バリケンのRuby日記  net/ftp - バリケンのRuby日記 のブックマークコメント

Rubyの標準ライブラリのひとつ、net/ftpを使うと、ftpを使ったファイル転送Rubyで簡単に実現できるよ。

たとえば、いままでftpコマンドを使って

> ftp ftpサーバ名
Connected to ftpサーバ名.
220 Hello. FTP server ready.
User (ftpサーバ名:(none)): ユーザー名
331 Password required for ユーザー名.
Password: パスワード
230 User ユーザー名 logged in.
ftp> bin
200 Type set to I
ftp> cd public
250 CWD command successful
ftp> get index.html
200 PORT command successful
150 Opening BINARY mode data connection for index.html (92 bytes)
226 Transfer complete.
ftp: 92 bytes received in 0.02Seconds 4.60Kbytes/sec.
ftp> quit
221 Goodbye.

>

のようにしていたとしたら、

require 'net/ftp'

ftp = Net::FTP.new
ftp.connect('ftpサーバ名')
ftp.login('ftpユーザー名', 'パスワード')
ftp.binary = true
ftp.chdir('public')
ftp.get('index.html')
ftp.quit

という感じでRubyスクリプトとして書くことができるよ。

じゃあ、Windowsのログオン/ログオフスクリプトを使って、自分のオンライン情報Webサーバftp転送するスクリプトを作ってみるよ。

まずは、ログオン時に起動されるonline.rbだよ。あらかじめftp先にstatusという名前のディレクトリを作っておいてね。あと、スクリプト中にパスワードを直接書いているから、その危険性は十分理解して使ってね。

require 'net/ftp'

ftp = Net::FTP.new
ftp.connect('ftpサーバ名')
ftp.login('ftpユーザー名', 'パスワード')
ftp.binary = true
ftp.chdir('status')
ftp.put('online.html', 'index.html')
ftp.quit

online.htmlは、次のようにしてね。

<html>
<head>
<title>I'm online!</title>
</head>
<body>
I'm online!
</body>
</html>

次に、ログオフ時に起動されるoffline.rbだよ。

require 'net/ftp'

ftp = Net::FTP.new
ftp.connect('ftpサーバ名')
ftp.login('ftpユーザー名', 'パスワード')
ftp.binary = true
ftp.chdir('status')
ftp.put('offline.html', 'index.html')
ftp.quit

offline.htmlは、次のようにしてね。

<html>
<head>
<title>I'm offline!</title>
</head>
<body>
I'm offline!
</body>
</html>

そして、online.rbをログオンスクリプトに、offline.rbをログオフスクリプトに指定すれば、「http://サーバ名/status/」にアクセスしてもらえば、自分のオンライン状態をチェックしてもらえるよ。