微妙に昨日の続きです。
Ruby組み込みのTCPServerを使って今日のお天気をCLIに出すスクリプトです。
デーモンとして起動し、telnetで繋いで結果を貰います。
loopで読み出してるので若干不安でしたが、一応コネクションをしないと処理を止めてくれるみたいです。
countという変数はその確認のための名残です。チキンですね。
# -*- coding: utf-8 -*- #weatherd.rb require 'socket' require 'json' Process.daemon(true) TCPServer.open 'localhost', 4423 do |server| count = 0 loop do client = server.accept data = JSON.parse!(`curl http://weather.livedoor.com/forecast/webservice/json/v1?city=130010`) dsc = data["description"] frc = data["forecasts"] ary = [ (count += 1), dsc["publicTime"],frc[0]['telop'],frc[1]['telop'],dsc["text"] ] client.puts "%d\n%s:現在の予報\n今日\t:\t%s\n明日\t:\t%s\n\n%s" % ary client.close end end
伝統的に、daemonで動く子は末尾にdをつけるらしいです。
今回のファイル名もそれに倣いました。
Process.daemon(true)は「カレントディレクトリで動かす」という意味合いを持ちます。
ないと、"/"で動くのでファイル等々の読み込みに面倒です。
特に用事がないなら、trueとしておく事をお勧めします。
実行結果
$ ruby weatherd.rb $ telnet localhost 4423 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 1 2013-11-05T16:44:00+0900:現在の予報 今日 : 晴れ 明日 : 晴れ 明後日 : 曇時々晴 関東甲信地方は高気圧に覆われています。 【関東甲信地方】 現在、関東甲信地方は、おおむね晴れています。 今夜は、高気圧に覆われるでしょう。 このため、関東甲信地方は、おおむね晴れる見込みです。 明日も、高気圧に覆われるでしょう。 このため、関東甲信地方は、おおむね晴れる見込みです。 関東近海は、今夜から明日にかけて波がやや高いでしょう。 【東京地方】 今夜から明日にかけては晴れる見込みです。 Connection closed by foreign host.
止める場合は、「pkill ruby」を使います。
このコマンドについては後日記事にします。
参考もと

- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (7件) を見る
編集ログ
11/6 必ずしも明後日が出てるわけじゃないらしいので、削除