DevFestクイズ答案: 暗号通信

回答が締め切られたので解禁と解釈して、Google DevFest 2010 Japanの参加に必要なDevFest Quizへの回答用に作成したコード (を多少整形したもの) を晒してみます。
この記事は「暗号通信」への回答です。

ポイントは以下の2点。

  • String#tr を使って、プレインテキスト中の文字を置き換え
  • Net::HTTPを使って、指定したURLに回答をPOST
#!/usr/local/bin/ruby1.8.7
require 'net/http'
Net::HTTP.version_1_2
HTTP_SERVER = 'devquiz.appspot.com'
PORT = 80
PATH = "/personalpost"
KEY = "eae7agdkZXZxdWl6chwLEhRQYXJ0aWNpcGFudFNvbHV0aW9ucxiwoQEM"

if ARGV.length == 0
  exit("Usage: encryption.rb <mail_addr>")
end

# 文字の置き換えによる暗号化
encrypted_addr = ARGV[0].tr('A-QR-Za-qr-z', 'J-ZA-Ij-za-i')

# JSON形式での出力
data_json = <<EOT
{
  "key": "#{KEY}",
  "pass": "#{encrypted_addr}"
}
EOT
puts data_json

# HTTP POSTによる回答の送信
Net::HTTP.start(HTTP_SERVER, PORT) {|http|
  response = http.post(PATH, data_json)
  p response
}

最後のPOSTの部分をコメントアウトして実行した結果は以下のようになります。

% ruby encryption.rb Encryption.Test01@example.com
{
  "key": "eae7agdkZXZxdWl6chwLEhRQYXJ0aWNpcGFudFNvbHV0aW9ucxiwoQEM",
  "pass": "Nwlahycrxw.Cnbc01@ngjvyun.lxv"
}