[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:1321) Re: [XML] Weather Hacks



ちょっとクラスっぽく書き直してみた。
SSIのサンプル
http://www.seuzo.jp/st/WebApp/weather_test_ssi.html
erubyのサンプル
http://www.seuzo.jp/st/WebApp/weather_test_erb.cgi
サイトのアクセントに^^

スクリプトより説明がはるかに長い。
#っていうかこれくらいの短いやつならerubyの中にいれちまえよ^^

#! /usr/local/bin/ruby -Ku

=begin
livedoor_weather.rb
(c)2006 www.seuzo.jp

●動作環境
	ruby 1.8.2以上

●Command Usage;
livedoor_weather.rb <encode> <city>
	<encode>	出力文字コード
	ISO-2022-JP	jis(iso-2022-jp)
	eucJP	EUC_JP
	SJIS	Shift JIS
	UTF-8	UTF-8
	
	<city>	cityコードはhttp://weather.livedoor.com/forecast/rss/forecastmap.xmlを参照
	63	東京都
	60	さいたま市
	
●Libraly Usage;
	ex)
	require "livedoor_weather.rb"
	my_weather = Livedoor_weather.new("eucJP", "60")
	print my_weather.my_title
	
	ex) eruby
	#! /usr/bin/eruby -Ke -C euc-jp
	<%
		require "/var/www/cgi-bin/livedoor_weather.rb"
		my_weather = Livedoor_weather.new("eucJP", "60")
	%>
	<html lang="ja">
	<head>
		<title><%= my_weather.my_title %></title>
	</head>
	(以下略)
	
●History;
	2006.3.5	ver. 0.1	とりあえず
	2006.3.6	ver. 0.2	クラス定義
	2006.3.6	ver. 0.3	nkfからiconvにした。

●注意事項
	SSIやerubyで使われることを想定にしてるので、引数の検査や例外処理をまったくしていない。すまぬ、めんどいのだ。

=end


require 'open-uri'
require 'rexml/document'
require 'iconv'


class Livedoor_weather
	#定数
	Version = "0.3"
	
	attr_reader :my_title, :my_telop, :my_description, :my_link
	#+++++++++++++++++イニシャライズ
	def initialize(my_encode, my_city)
		my_uri = URI.parse('http://weather.livedoor.com/forecast/webservice/rest/v1?city=' + my_city + '&day=tomorrow')
		my_html = my_uri.read
		
		my_doc = REXML::Document.new(my_html)
		
		@my_title = Iconv.iconv(my_encode, "UTF-8", my_doc.root.get_text("title").to_s)
		@my_telop = Iconv.iconv(my_encode, "UTF-8", my_doc.root.get_text("telop").to_s)
		@my_description = Iconv.iconv(my_encode, "UTF-8", my_doc.root.get_text("description").to_s)
		@my_link = Iconv.iconv(my_encode, "UTF-8", my_doc.root.get_text("link").to_s)
	end #initialize
	
end #class


if __FILE__ == $0 then
	my_encode = ARGV[0]
	my_city = ARGV[1]
	
	my_weather = Livedoor_weather.new(my_encode, my_city)
	
	print "#{my_weather.my_title}\n#{my_weather.my_telop}\n#{my_weather.my_description}\n#{my_weather.my_link}\n"
end