→元ネタ←
Rubyのお勉強もしてみたいので、試しに作ってみましょう。
以下のことを達成するべし。
Rubyに慣れる。
ライブラリの調べ方を覚える。
なるべくRuby色に染まって書く。
まぁ最初っから上手くできるはずもないけどやってみるべい。
元ネタのサイトのPerlコードを見た感じ…
以下の条件をクリアできるブツを書くべし。
http://thrudr.myminicity.com/xml にアクセスすると、現在の町の状況をXMLで取得できるので、パースして使う
http://hogehoge.com/XXX/ ←アクセスでこっちにリダイレクト→ http://XXX.myminicity.com/
町の状況に合わせて、/と/indと/traと/secと/envのうち、適切なものを選択する
で多分OK。2番目のヤツはやり方は知りたいけどなんか好みじゃないからどうしましょうかしら。
まずは、HTTPでアクセスして文章を引っ張ってくるコード書けばいいのかしら。
まぁぐぐれば一発よね
PLAIN TEXT
RUBY:
require 'net/http'
Net::HTTP.version_1_2 #おまじない
Net::HTTP.start('thrudr.myminicity.com', 80) {|http|
response = http.get('/xml')
puts response.body
}
うん、普通にXML取ってこれるわ。
次、XMLをいい感じにする。
REXMLとかいうのがデフォでついてるらしいので使う。
このへん? 分かりにくくてちょっと泣きそう。XMLなんてしらねーよ。
PLAIN TEXT
RUBY:
require 'net/http'
require "rexml/document"
Net::HTTP.version_1_2
response = nil
Net::HTTP.start('thrudr.myminicity.com', 80) {|http| response = http.get('/xml')}
doc = REXML::Document.new response.body
doc.write
root = doc.root
# puts root.elements.each{|elem| puts elem.name, elem.text}
簡単だー… response.bodyを直接Documentのコンストラクタに投げたいけど富豪的プログラミングの名の元にとりあえず気にしない。
http://hogehoge.com/XXX/ ←アクセスでこっちにリダイレクト→ http://XXX.myminicity.com/
調べてみたら、こんなんらしい。ホンマかいな。
裏を取ってみたら割とホントらしい。まじか!世の中は工夫がいっぱいです。
このやり方はやめて普通にGETで投げることとしよう。
CGIを便利に暮らすクラスもちゃんとあるらしい
PLAIN TEXT
RUBY:
require "cgi"
name = CGI.new.params["name"]
name = name.empty? ? "thrudr" : name
puts name
非常に簡単。http://www.hogehoge.com/cgi.rb?name=fooみたいな感じ。
方針転換しつつ
PLAIN TEXT
RUBY:
#!/usr/local/bin/ruby
require "cgi"
require 'net/http'
require "rexml/document"
print "Content-type: text/html\n\n"
#都市名拾う
cgi [...]
Read the rest of MyMiniCityのアクセスバランスを適当に調整してみる