3
# weather_index.rb $Revision$
5
# Copyright (C) 2006 SHIBATA Hiroshi <h-sbt@nifty.com>
6
# You can redistribute it and/or modify it under GPL2.
12
require 'rexml/document'
14
@index = "/path/to/this/cgi"
15
@lwws_path = "/path/to/diary/cache/lwws"
16
@diary_index = "/path/to/diary/cgi"
19
def calendar2_make_cal(year, month)
21
t = Time.local(year, month, 1)
22
r = Array.new(t.wday, nil)
25
break if Time.local(year, month, i).month != month
28
r += Array.new((- r.size) % 7, nil)
29
0.step(r.size - 1, 7) do |i|
35
def calendar2_make_anchor(ym, str)
37
%Q|<a href="#{@index}?date=#{ym}">#{str}</a>|
43
def calendar2_prev_current_next(date)
44
yyyymm = date.strftime("%Y%m")
45
if( date.month.to_i == 1 )
46
yms = [(date.year.to_i - 1).to_s + "12", yyyymm, yyyymm.to_i + 1]
47
elsif( date.month.to_i == 12 )
48
yms = [yyyymm.to_i - 1, yyyymm, (date.year.to_i + 1).to_s + "01"]
50
yms = [yyyymm.to_i - 1, yyyymm, yyyymm.to_i + 1]
55
def lwws_to_html( date )
56
file_name = "#{@lwws_path}/#{date}.xml"
59
xml = File::read( file_name )
61
doc = REXML::Document::new( xml ).root
62
title = NKF::nkf('-We', doc.elements["image/title"].text)
63
url = doc.elements["image/url"].text
64
width = doc.elements["image/width"].text
65
height = doc.elements["image/height"].text
68
result << %Q|<div class="lwws">|
69
result << %Q|<img src="#{url}" border="0" alt="#{title}" title="#{title}" width=#{width} height="#{height}" />|
79
def make_weather_cal( date )
81
ymd = Time.parse(date + "01")
85
p_c_n = calendar2_prev_current_next( ymd )
86
days_format = ["��","��","��","��","��","��","��"]
87
navi_format = ["��", "%dǯ<br>%d��", "��"]
93
<title>livedoor Weather Calendar</title>
94
<link rel="stylesheet" href="#{@diary_index}/theme/base.css" type="text/css" media="all">
95
<link rel="stylesheet" href="#{@diary_index}/theme/#{@theme}/#{@theme}.css" title="pukiwiki" type="text/css" media="all">
98
<h1>livedoor Weather Calendar</h1>
100
<div class="body"><table><tr><td colspan="7"></td></tr>
104
r << %Q|<td align="center" colspan="2">#{calendar2_make_anchor(p_c_n[0], navi_format[0] % [year, month])}</td>|
105
r << %Q|<td align="center" colspan="3">#{calendar2_make_anchor(p_c_n[1], navi_format[1] % [year, month])}</td>|
106
r << %Q|<td align="center" colspan="2">#{calendar2_make_anchor(p_c_n[2], navi_format[2] % [year, month])}</td>|
114
r <<%Q|<td align="center">#{days_format[i]}</td>|
119
calendar2_make_cal(year, month).each do |week|
123
r << %Q| <td></td>\n|
125
date = "%04d%02d%02d" % [year, month, day]
126
r << %Q| <td align="center">#{day.to_s}��<br />%s</td>\n| % lwws_to_html(date)
142
BEGIN { $defout.binmode }
147
date = @cgi.params['date'][0]
148
date = Time.now.strftime("%Y%m") if not date or not /^\d{6}$/ =~ date
150
print @cgi.header('type' => 'text/html', 'charset' => 'euc-jp')
151
print make_weather_cal( date )
154
print @cgi.header( 'status' => '500 Internal Server Error', 'type' => 'text/html' )
156
print "Status: 500 Internal Server Error\n"
157
print "Content-Type: text/html\n\n"
159
puts "<h1>500 Internal Server Error</h1>"
161
puts "#$! (#{$!.class})"
165
puts "<div>#{' ' * 500}</div>"