• R/O
• SSH
• HTTPS

## dietmemorer: Commit

### Commit MetaInfo

Revision 26 (tree) 2008-02-08 14:33:08 yaggy

### Log Message

まとめ機能、エネルギーグラフ機能を付けてみた。実験中。

### Incremental Difference

--- trunk/src/graph_creator.rb (revision 25)
+++ trunk/src/graph_creator.rb (revision 26)
 @@ -12,9 +12,10 @@ 12 12 @dbh = dbh 13 13 end 14 14 15 + @@ModeGraphALL = 0 15 16 @@ModeGraphWeight = 1 16 17 @@ModeGraphFat = 2 17 - @@ModeGraphWF = 3 18 + @@ModeGraphEnergy = 3 18 19 19 20 # 体重グラフ作成 20 21 def createwgraph(basepath, email)
 @@ -26,9 +27,14 @@ 26 27 return creategraph(basepath, email, @@ModeGraphFat) 27 28 end 28 29 30 + # エネルギーグラフ作成 31 + def createegraph(basepath, email) 32 + return creategraph(basepath, email, @@ModeGraphEnergy) 33 + end 34 + 29 35 # 体重・体脂肪グラフ作成 30 - def createwfgraph(basepath, email) 31 - return creategraph(basepath, email, @@ModeGraphWF) 36 + def createallgraph(basepath, email) 37 + return creategraph(basepath, email, @@ModeGraphALL) 32 38 end 33 39 34 40 # グラフ作成ベース
 @@ -41,11 +47,12 @@ 41 47 42 48 hweight = Hash.new 43 49 hfat = Hash.new 50 + henergy = Hash.new 44 51 45 52 nowday = Date.today 46 53 47 54 # 体重 48 - tsth = @dbh.prepare("SELECT weight, adddate FROM dweight WHERE mailadd = ? AND adddate > DATE_ADD(CURDATE(), INTERVAL -90 DAY)") 55 + tsth = @dbh.prepare("SELECT weight, adddate FROM dweight WHERE mailadd = ? AND adddate > DATE_ADD(CURDATE(), INTERVAL -90 DAY) ORDER BY adddate") 49 56 tsth.execute(email) 50 57 if 0 != tsth.rows then 51 58 tsth.fetch do |weight|
 @@ -55,7 +62,7 @@ 55 62 tsth.finish 56 63 57 64 # 体脂肪 58 - tsth = @dbh.prepare("SELECT fat, adddate FROM dfat WHERE mailadd = ? AND adddate > DATE_ADD(CURDATE(), INTERVAL -90 DAY)") 65 + tsth = @dbh.prepare("SELECT fat, adddate FROM dfat WHERE mailadd = ? AND adddate > DATE_ADD(CURDATE(), INTERVAL -90 DAY) ORDER BY adddate") 59 66 tsth.execute(email) 60 67 if 0 != tsth.rows then 61 68 tsth.fetch do |fat|
 @@ -64,6 +71,20 @@ 64 71 end 65 72 tsth.finish 66 73 74 + # エネルギー 75 + tsth = @dbh.prepare("SELECT sum(energy) as esum, DATE_FORMAT(adddate, '%Y-%m-%d') as donly " + \ 76 + "FROM denergy " + \ 77 + "WHERE mailadd = ? AND adddate > DATE_ADD(CURDATE(), INTERVAL -90 DAY) " + \ 78 + "GROUP BY donly " + \ 79 + "ORDER BY donly "); 80 + tsth.execute(email) 81 + if 0 != tsth.rows then 82 + tsth.fetch do |energy| 83 + henergy[energy[1].to_s] = energy[0] 84 + end 85 + end 86 + tsth.finish 87 + 67 88 maxbef = 91 68 89 69 90 i = maxbef
 @@ -71,9 +92,11 @@ 71 92 cnt = 0 72 93 befweight = 20.0 73 94 beffat = 20.0 95 + befenergy = 20.0 74 96 75 97 aweight = [] 76 98 afat = [] 99 + aenergy = [] 77 100 78 101 while i >= 0 79 102
 @@ -88,10 +111,14 @@ 88 111 if nil != hfat[day] then 89 112 started = true 90 113 end 91 - elsif @@ModeGraphWF == mode then 92 - if nil != hweight[day] and nil != hfat[day] then 114 + elsif @@ModeGraphEnergy == mode then 115 + if nil != henergy[day] then 93 116 started = true 94 117 end 118 + elsif @@ModeGraphALL == mode then 119 + if nil != hweight[day] and nil != hfat[day] and nil != henergy[day] then 120 + started = true 121 + end 95 122 end 96 123 end 97 124
 @@ -103,9 +130,17 @@ 103 130 if nil != hfat[day] then 104 131 beffat = hfat[day] 105 132 end 133 + if nil != henergy[day] then 134 + if @@ModeGraphEnergy == mode then 135 + befenergy = henergy[day] 136 + else 137 + befenergy = henergy[day] * 3.0 / 100.0; 138 + end 139 + end 106 140 107 141 aweight.push(befweight) 108 142 afat.push(beffat) 143 + aenergy.push(befenergy) 109 144 110 145 cnt += 1 111 146 end
 @@ -129,10 +164,14 @@ 129 164 elsif @@ModeGraphFat == mode then 130 165 g.title = "メモらーグラフ 体脂肪" 131 166 g.data("体脂肪率", afat) 132 - elsif @@ModeGraphWF == mode then 167 + elsif @@ModeGraphEnergy == mode then 168 + g.title = "メモらーグラフ kcal" 169 + g.data("エネルギー(kcal)", aenergy) 170 + elsif @@ModeGraphALL == mode then 133 171 g.title = "メモらーグラフ" 134 172 g.data("体重", aweight) 135 173 g.data("体脂肪率", afat) 174 + g.data("ENERGY", aenergy) 136 175 end 137 176 138 177 hindex = Hash.new
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
--- trunk/src/mail/dmr_sum.txt (nonexistent)
+++ trunk/src/mail/dmr_sum.txt (revision 26)
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
--- trunk/src/mail/dmr_help.txt (revision 25)
+++ trunk/src/mail/dmr_help.txt (revision 26)
 @@ -13,14 +13,24 @@ 13 13 14 14 タイトルに、 15 15 グラフ 16 -って書いて送ってくれると、最大過去90日の体重・体脂肪のグラフが見られるよ。 17 -体重だけ、体脂肪だけのグラフを見たい場合は、 16 +って書いて送ってくれると、最大過去90日の体重・体脂肪・エネルギーのグラフが見られるよ。 17 +体重だけ、体脂肪だけ、エネルギーだけのグラフを見たい場合は、 18 18 体重グラフ 19 19 体脂肪グラフ 20 +エネルギーグラフ 20 21 って書いて送ってね。 21 22 23 +何を食べたか忘れちゃった人は、 24 +最近 25 +今月 26 +今月詳細 27 +先月 28 +先月詳細 29 +全部 30 +のどれか書いて送ってくれると、思い出せるよ〜。 31 + 22 32 間違えちゃった場合はタイトルに、 23 33 リセット 24 -って書いて送ると、その日に食べたものを一切忘れるよ。 34 +って書いて送ってくれると、その日に食べたものを一切忘れるよ。 25 35 26 36 じゃあ、ぼくと一緒にがんばってダイエットしようね！
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
--- trunk/src/mail/dmr_footer.txt (revision 25)
+++ trunk/src/mail/dmr_footer.txt (revision 26)
 @@ -1,3 +1,3 @@ 1 1 --- 2 -ダイエットメモらー 0.1 2 +ダイエットメモらー 0.2 3 3 kcal@dietmemo.net
--- trunk/src/mail_analizer.rb (revision 25)
+++ trunk/src/mail_analizer.rb (revision 26)
 @@ -13,34 +13,51 @@ 13 13 # メール解析および返信クラス 14 14 class MailAnalizer 15 15 16 + # 返信文作成時の種類 17 + @@ReplyModeNormal = 0 18 + @@ReplyModeSum = 1 19 + @@ReplyModeThisMonth = 2 20 + @@ReplyModeThisMonthDetail = 3 21 + @@ReplyModeLastMonth = 4 22 + @@ReplyModeLastMonthDetail = 5 23 + @@ReplyModeAll = 9 24 + 16 25 # 無題の題名 17 26 @@sub_nosubject = ["", "無題", "no subject", "nosubject", "登録"] 18 27 19 - # 今日の内訳機能のキーワード 20 - @@sub_today = "今日" 21 - # 今月の合計機能のキーワード 22 - @@sub_thismonth = "今月" 23 - # 今月の詳細合計機能のキーワード 24 - @@sub_thismonth_detail = "詳細今月" 25 - # いままでの合計機能のキーワード 26 - @@sub_fulltotal = "合計" 27 - # 先月の合計機能のキーワード 28 - @@sub_lastmonth = "先月" 29 - # 先月の詳細合計機能のキーワード 30 - @@sub_lastmonth = "詳細先月" 28 + # 過去３日の詳細のキーワード 29 + @@sub_detail = ["まとめ", "みっか", "最近"] 31 30 31 + # 今月のまとめ機能のキーワード 32 + @@sub_thismonth = ["今月", "こんげつ"] 33 + 34 + # 今月の詳細機能のキーワード 35 + @@sub_thismonth_detail = ["詳細今月", "今月詳細", "こんげつしょうさい", "しょうさいこんげつ", "こんげつこまかく"] 36 + 37 + # 先月のまとめ機能のキーワード 38 + @@sub_lastmonth = ["先月", "せんげつ"] 39 + 40 + # 先月の詳細機能のキーワード 41 + @@sub_lastmonth_detail = ["詳細先月", "先月詳細", "せんげつしょうさい", "しょうさいせんげつ", "せんげつこまかく"] 42 + 43 + # いままで全部の詳細機能のキーワード 44 + @@sub_all_detail = ["ぜんぶ", "全部", "オール", "おーる", "記憶", "きおく", "忘"] 45 + 32 46 # ヘルプのキーワード 33 47 @@sub_help = ["ヘルプ", "へるぷ", "使い方", "つかいかた"] 34 48 35 49 # グラフのキーワード 36 - @@sub_graph = ["やせた？", "やせた?", "やせた", "グラフ", "ぐらふ", "クラブ", "くらぶ"] 50 + @@sub_graph = ["やせた？", "やせた?", "やせた", "グラフ", "ぐらふ", "クラブ", "くらぶ", "G", "g"] 37 51 38 52 # 体重グラフのキーワード 39 - @@sub_wgraph = ["体重グラフ", "体重ぐらふ", "たいじゅうぐらふ", "体重クラブ", "体重くらぶ", "たいじゅうくらぶ"] 53 + @@sub_wgraph = ["体重グラフ", "体重ぐらふ", "たいじゅうぐらふ", "体重クラブ", "体重くらぶ", "たいじゅうくらぶ", "WG", "wg"] 40 54 41 55 # 体脂肪グラフのキーワード 42 - @@sub_fgraph = ["体脂肪グラフ", "体脂肪ぐらふ", "たいしぼうぐらふ", "体脂肪クラブ", "体脂肪くらぶ", "たいしぼうくらぶ"] 56 + @@sub_fgraph = ["体脂肪グラフ", "体脂肪ぐらふ", "たいしぼうぐらふ", "体脂肪クラブ", "体脂肪くらぶ", "たいしぼうくらぶ", "FG", "fg"] 43 57 58 + # エネルギーグラフのキーワード 59 + @@sub_egraph = ["エネルギーグラフ", "えねるぎーぐらふ", "カロリーグラフ", "かろりーぐらふ", "EG", "eg"] 60 + 44 61 # 当日リセットのキーワード 45 62 @@sub_reset = ["リセット", "りせっと", "まちがい"] 46 63
 @@ -74,6 +91,9 @@ 74 91 # リセット返信文 75 92 @@repmail_reset = "mail/dmr_reset.txt" 76 93 94 + # まとめ時メール返信文 95 + @@repmail_memo = "mail/dmr_sum.txt" 96 + 77 97 # 曜日配列 78 98 @@wdays = ["日", "月", "火", "水", "木", "金", "土"] 79 99
 @@ -141,7 +161,7 @@ 141 161 end 142 162 143 163 # すべての行の前後の空白を取り除く 144 - # _fileall_ :: 文字列 164 + # _lines_ :: 文字列 145 165 # Return :: 取り除いた後の文字列 146 166 def strip_lines(lines) 147 167 newlines = ""
 @@ -190,7 +210,7 @@ 190 210 # _from_ :: メール送信元アドレス 191 211 def send_graph(to, smtpserver, from) 192 212 gc = GraphCreator.new(@dbh) 193 - filename = gc.createwfgraph(@@graph_dir, to) 213 + filename = gc.createallgraph(@@graph_dir, to) 194 214 195 215 send_graph_reply(filename, to, smtpserver, from) 196 216 end
 @@ -217,6 +237,17 @@ 217 237 send_graph_reply(filename, to, smtpserver, from) 218 238 end 219 239 240 + # エネルギーグラフメッセージの送信 241 + # _to_ :: メール送信先アドレス 242 + # _smtpserver_ :: SMTPサーバ名 243 + # _from_ :: メール送信元アドレス 244 + def send_egraph(to, smtpserver, from) 245 + gc = GraphCreator.new(@dbh) 246 + filename = gc.createegraph(@@graph_dir, to) 247 + 248 + send_graph_reply(filename, to, smtpserver, from) 249 + end 250 + 220 251 # リセット処理メッセージの送信 221 252 # _to_ :: メール送信先アドレス 222 253 # _smtpserver_ :: SMTPサーバ名
 @@ -253,10 +418,10 @@ 253 418 254 419 mailsub = mail.subject 255 420 256 - if mailsub then 421 + if nil != mailsub then 257 422 mailsub = Kconv::kconv(mailsub, Kconv::UTF8) 258 423 else 259 - mailsub = "" 424 + mailsub = "empty..." 260 425 end 261 426 262 427 mailfrom = mail.from.to_s
 @@ -263,7 +428,8 @@ 263 428 264 429 # エラーメールっぽかったら無視 265 430 if mailsub[/DAEMON/] or mailsub[/Daemon/] or mailsub[/daemon/] \ 266 - or mailsub[/RETURN/] or mailsub[/Return/] or mailsub[/Return/] then 431 + or mailsub[/RETURN/] or mailsub[/Return/] or mailsub[/Return/] \ 432 + or mailfrom[/DAEMON/] or mailfrom[/Delivery/] then 267 433 Debug.p "Invalid mail..." 268 434 return 269 435 end
 @@ -312,6 +478,14 @@ 312 478 return 313 479 end 314 480 481 + # エネルギーグラフ要求っぽかったら、体脂肪グラフ送信 482 + if MailAnalizer.in_ary(@@sub_egraph, mailsub) then 483 + sth.finish 484 + Debug.p "send energy graph." 485 + send_egraph(mailfrom, smtpserver, smtpfrom) 486 + return 487 + end 488 + 315 489 # リセット要求っぽかったら、当日のデータ全消去 316 490 if MailAnalizer.in_ary(@@sub_reset, mailsub) then 317 491 sth.finish
 @@ -320,14 +494,62 @@ 320 494 return 321 495 end 322 496 497 + # まとめ要求っぽかったら、それを送信 498 + if MailAnalizer.in_ary(@@sub_detail, mailsub) then 499 + sth.finish 500 + Debug.p "send detail." 501 + send_detail(@@ReplyModeSum, mailfrom, smtpserver, smtpfrom) 502 + return 503 + end 504 + 505 + # 今月のまとめ要求っぽかったら、それを送信 506 + if MailAnalizer.in_ary(@@sub_thismonth, mailsub) then 507 + sth.finish 508 + Debug.p "send thismonth." 509 + send_detail(@@ReplyModeThisMonth, mailfrom, smtpserver, smtpfrom) 510 + return 511 + end 512 + 513 + # 今月のまとめ詳細要求っぽかったら、それを送信 514 + if MailAnalizer.in_ary(@@sub_thismonth_detail, mailsub) then 515 + sth.finish 516 + Debug.p "send thismonth detail." 517 + send_detail(@@ReplyModeThisMonthDetail, mailfrom, smtpserver, smtpfrom) 518 + return 519 + end 520 + 521 + # 先月のまとめ要求っぽかったら、それを送信 522 + if MailAnalizer.in_ary(@@sub_lastmonth, mailsub) then 523 + sth.finish 524 + Debug.p "send lastmonth." 525 + send_detail(@@ReplyModeLastMonth, mailfrom, smtpserver, smtpfrom) 526 + return 527 + end 528 + 529 + # 先月のまとめ詳細要求っぽかったら、それを送信 530 + if MailAnalizer.in_ary(@@sub_lastmonth_detail, mailsub) then 531 + sth.finish 532 + Debug.p "send lastmonth detail." 533 + send_detail(@@ReplyModeLastMonthDetail, mailfrom, smtpserver, smtpfrom) 534 + return 535 + end 536 + 537 + # 全部のまとめ詳細要求っぽかったら、それを送信 538 + if MailAnalizer.in_ary(@@sub_all_detail, mailsub) then 539 + sth.finish 540 + Debug.p "send all detail." 541 + send_detail(@@ReplyModeAll, mailfrom, smtpserver, smtpfrom) 542 + return 543 + end 544 + 323 545 # ボディが空だったら、ヘルプ送信 324 546 if nil == mailbody or "" == mailbody then 325 547 sth.finish 326 - Debug.p "send help." 548 + Debug.p "send help body empty." 327 549 send_help(mailfrom, smtpserver, smtpfrom) 328 550 return 329 551 end 330 - 552 + 331 553 Debug.p "subject" 332 554 Debug.p mailsub 333 555
--- trunk/web/index.html (revision 25)
+++ trunk/web/index.html (revision 26)
 @@ -1,71 +1,91 @@ 1 - 2 - 3 - 4 - 5 - ダイエットメモらー 6 - 7 - 8 -
9 -

10 -
11 -
12 - 13 -
15 - 16 - 17 - 20 - 23 - 24 -
18 -

19 -
21 - 22 -
25 -
27 - 28 - 30 - ダイエットメモらーです。 31 -
32 - 逆にこんばんは。 33 -
34 - えー、さて、 35 -
36 - kcal@dietmemo.net 37 -
38 - に、空メールを送ってみてね。 39 -
40 - 　 41 -
14 - 26 - 29 - 42 - 43 - 44 - 45 - ※迷惑メール対策、ドメイン受信制限をしているひとは、 46 -
47 - dietmemo.net 48 -
49 - からのメールが届くようにしてからやってみてね。 50 -
51 -
52 -
53 - 54 - character designed by NAKAMURA Toru (C) 2007. 55 - 56 -
57 -
58 -

59 - 60 - ダイエットメモらーは、sourceforge.jp にてオープンソースで作成されています。 61 -
62 - 63 -
64 - 携帯などからメールで、食べたものとエネルギーを書いて送ると、サーバ側で記録していくダイエット支援システムです。 65 -
66 -
67 -

68 - 決して「レコーディング･ダイエット」「いいめもダイエット」とは関係ありません。 69 - 70 - 71 - 1 + 2 + 3 + 4 + 5 + ダイエットメモらー 8 + 9 + 10 + 11 +
12 +

13 + ダイエットメモらー 0.1 14 +
15 + 実験中 16 +
17 +

18 +
19 + 20 +
22 + 23 + 24 + 28 + 31 + 32 +
25 + 27 + 29 + 30 +
33 + 34 + ぼくは、かうぇるだよ。
アイス、がまんがまん。 35 +
36 +
38 + 39 + 41 + ダイエットメモらーです。 42 +
43 + 逆にこんばんは。 44 +
45 + えー、さて、 46 +
47 + kcal@dietmemo.net 48 +
49 + に、空メールを送ってみてね。 50 +
51 + 　 52 +
21 + 37 + 40 + 53 + 54 +
55 + 56 + ※迷惑メール対策、ドメイン受信制限をしているひとは、 57 +
58 + dietmemo.net 59 +
60 + からのメールが届くようにしてからやってみてね。 61 +
62 +
63 +
64 + 65 + character designed by NAKAMURA Toru (C) 2007. 66 + 67 +
68 +
69 +
70 + みんなが食べたものランキング。 71 +
72 + 人気順 73 +
74 + エネルギー順 75 +
76 +
77 +
78 +

79 + 80 + ダイエットメモらーは、sourceforge.jp にてオープンソースで作成されています。 81 +
82 + 83 +
84 + 携帯などからメールで、食べたものとエネルギーを書いて送ると、サーバ側で記録していくダイエット支援システムです。 85 +
86 +
87 +

88 + 決して「レコーディング･ダイエット」「いいめもダイエット」とは関係ありません。 89 + 90 + 91 +