~ubuntu-branches/ubuntu/utopic/tdiary/utopic

« back to all changes in this revision

Viewing changes to contrib2/plugin/livedoor/weather_index.rb

  • Committer: Bazaar Package Importer
  • Author(s): Daigo Moriwaki
  • Date: 2011-04-11 21:53:16 UTC
  • mfrom: (1.2.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20110411215316-ih4gt4q8p29d2wf8
Tags: 3.0.1-1
* New upstream release (Closes: #542801, #594947)
* debian/control:
 - Bumped up Standards-Version to 3.9.1.
 - Updated version dependency.
* debian/tdiary-setup.rb: Followed the upstream changes, incorporating js and
  index.fcgi

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env ruby
2
 
 
3
 
# weather_index.rb $Revision$
4
 
#
5
 
# Copyright (C) 2006 SHIBATA Hiroshi <h-sbt@nifty.com>
6
 
# You can redistribute it and/or modify it under GPL2.
7
 
#
8
 
 
9
 
require 'cgi'
10
 
require 'time'
11
 
require 'nkf'
12
 
require 'rexml/document'
13
 
 
14
 
@index = "/path/to/this/cgi"
15
 
@lwws_path = "/path/to/diary/cache/lwws"
16
 
@diary_index = "/path/to/diary/cgi"
17
 
@theme = "default"
18
 
 
19
 
def calendar2_make_cal(year, month)
20
 
        result = []
21
 
        t = Time.local(year, month, 1)
22
 
        r = Array.new(t.wday, nil)
23
 
        r << 1
24
 
        2.upto(31) do |i|
25
 
                break if Time.local(year, month, i).month != month
26
 
                r << i
27
 
        end
28
 
        r += Array.new((- r.size) % 7, nil)
29
 
        0.step(r.size - 1, 7) do |i|
30
 
                result << r[i, 7]
31
 
        end
32
 
        result
33
 
end
34
 
 
35
 
def calendar2_make_anchor(ym, str)
36
 
        if ym
37
 
                %Q|<a href="#{@index}?date=#{ym}">#{str}</a>|
38
 
        else
39
 
                str
40
 
        end
41
 
end
42
 
 
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"]
49
 
        else
50
 
                yms = [yyyymm.to_i - 1, yyyymm, yyyymm.to_i + 1]
51
 
        end
52
 
        return yms
53
 
end
54
 
 
55
 
def lwws_to_html( date )
56
 
        file_name = "#{@lwws_path}/#{date}.xml"
57
 
 
58
 
        begin
59
 
                xml = File::read( file_name )
60
 
 
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
66
 
 
67
 
                result = ""
68
 
                result << %Q|<div class="lwws">|
69
 
                result << %Q|<img src="#{url}" border="0" alt="#{title}" title="#{title}" width=#{width} height="#{height}" />|
70
 
                result << %Q|</div>|
71
 
 
72
 
                return result
73
 
 
74
 
        rescue Errno::ENOENT
75
 
                return ''
76
 
        end
77
 
end
78
 
 
79
 
def make_weather_cal( date )
80
 
 
81
 
        ymd = Time.parse(date + "01")
82
 
 
83
 
        year = ymd.year
84
 
        month = ymd.month
85
 
        p_c_n = calendar2_prev_current_next( ymd )
86
 
        days_format = ["��","��","��","��","��","��","��"]
87
 
        navi_format = ["��", "%dǯ<br>%d��", "��"]
88
 
 
89
 
        r = ""
90
 
        r << %Q[
91
 
                <html>
92
 
                <head>
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">
96
 
                </head>
97
 
                <body>
98
 
                <h1>livedoor Weather Calendar</h1>
99
 
                <div class="day">
100
 
                <div class="body"><table><tr><td colspan="7"></td></tr>
101
 
                <tr>
102
 
        ]
103
 
 
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>|
107
 
 
108
 
        r << %Q[
109
 
                </tr>
110
 
                <tr>
111
 
        ]
112
 
 
113
 
        0.upto(6) do |i|
114
 
                r <<%Q|<td align="center">#{days_format[i]}</td>|
115
 
        end
116
 
 
117
 
        r << %Q|</tr>|
118
 
 
119
 
        calendar2_make_cal(year, month).each do |week|
120
 
                r << %Q|<tr>|
121
 
                week.each do |day|
122
 
                        if day == nil
123
 
                                r <<  %Q| <td></td>\n|
124
 
                        else
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)
127
 
                        end
128
 
                end
129
 
                r << %Q|</tr>|
130
 
        end
131
 
 
132
 
        r << %Q[
133
 
                </table>
134
 
                </div>
135
 
                </div>
136
 
                </body>
137
 
                </html>
138
 
        ]
139
 
        return r
140
 
end
141
 
 
142
 
BEGIN { $defout.binmode }
143
 
$KCODE = 'n'
144
 
 
145
 
begin
146
 
        @cgi = CGI::new
147
 
        date = @cgi.params['date'][0]
148
 
        date = Time.now.strftime("%Y%m") if not date or not /^\d{6}$/ =~ date
149
 
 
150
 
        print @cgi.header('type' => 'text/html', 'charset' => 'euc-jp')
151
 
        print make_weather_cal( date )
152
 
rescue Exception
153
 
        if @cgi then
154
 
                print @cgi.header( 'status' => '500 Internal Server Error', 'type' => 'text/html' )
155
 
        else
156
 
                print "Status: 500 Internal Server Error\n"
157
 
                print "Content-Type: text/html\n\n"
158
 
        end
159
 
        puts "<h1>500 Internal Server Error</h1>"
160
 
        puts "<pre>"
161
 
        puts "#$! (#{$!.class})"
162
 
        puts ""
163
 
        puts $@.join( "\n" )
164
 
        puts "</pre>"
165
 
        puts "<div>#{' ' * 500}</div>"
166
 
end