Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Ruby組み込みのTCPServerを使って今日の天気をCLIに出す

微妙に昨日の続きです。
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 (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

編集ログ

11/6 必ずしも明後日が出てるわけじゃないらしいので、削除