Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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 必ずしも明後日が出てるわけじゃないらしいので、削除