2003年05月06日 [長年日記]
_ [tDiary] category.rbの改造(解決編)。
できない〜ってうだうだうなっていたら、改造版を作った方が「後は適当にやる」部分も公開してくださった。いわれるがまませこせこと修正をしたら(バージョンが違うっぽかったので手動パッチ(泣))、なんと、いともあっさりと動くものが。そうか。tDiary.rb側で@categorizedの中身を取捨選択していた部分をごっそりとcategory.rbに持っていけばよかったのね。気付いてみれば納得できるんだけど、まだまだ精進が足らんね。修行せねば。
skel/category.rhtmlの側は既に直してあったので、コメントアウトしてあった部分をはずすだけでOKだったんだけど、一箇所詰まってしまった。何も考えずにoption要素のvalueの中身をURLエンコードしてたんだけど、POSTしたときに二重にescapeされてしまった。ここはURLエンコードする必要なかったのね・・・φ(.. )
何はともあれ、Pyonさんありがとうございましたm(_ _)m
_ [買った] スレイヤーズ 水竜王の騎士 1巻 原作:神坂一 作画:トミイ大塚
長編小説の続編っぽかったので買った。結界の外に出てるので、スレイヤーズシリーズで語られなかった謎がとけるのかも。楽しみ〜。
_ [tDiary][Becky] よし。メールからのにっき更新成功!
これで、ネットワークに繋がってなきゃ更新できないよ問題は解決かな。
ただし、私のやり方はいろんな人がやってる(と思われる)、メールデーモンを立ち上げてそいつがメールを受信したらtDiaryにPOSTって方法ではなかったりする。ではどーしてるのかというと、Beckyのpluginとして実装して、OnSendを横取りしてHTTPでPOSTしてやるという方法をとっている。レンタルサーバなんで勝手に余計なデーモンを動かせないんだよね。。。
まぁ何はともあれ、beckrbとTMailに感謝。汚いソースだけど、下記にUPしてみよう。誰か添削してくれるかもしれないし。
_ [tDiary][Becky] Becky! 2からtDiaryを更新する為のPlugin。
下記ソースをBeckrbのスタートアップスクリプトフォルダに置き、"tDiary"宛にメールを書けばOK。そのときに、Subjectには更新したいにっきの日付を、設定情報類はX-tDiary-Hogeを適宜指定してあげよう。X-tDiary-Hogeの指定はテンプレート機能を使うとよさげ。ちなみにProxy経由の接続テストはしてないです。要Beckrb&TMail。
require 'tmail' require 'parsedate' require 'net/http' require 'kconv' require 'cgi' TDiaryAddres = 'tDiary' class CallbackTDiary def on_send(msg) mail = TMail::Mail.parse(msg) return 0 if !mail.to.include?(TDiaryAddres) time = nil begin case mail.subject.upcase when 'NOW', 'TODAY' time = Time::now when 'YESTERDAY' time = Tiem::now - (24 * 60 * 60) else time = Time::local *(ParseDate::parsedate(mail.subject.untaint))[0..-3] end rescue Exception return Becky::ONSEND_ERROR end host = get_header(mail, 'X-tDiary-Host') document = get_header(mail, 'X-tDiary-Document') port = get_header(mail, 'X-tDiary-Port') || 80 proxy_host = get_header(mail, 'X-tDiary-ProxyHost') proxy_port = get_header(mail, 'X-tDiary-ProxyPort') auth_user = get_header(mail, 'X-tDiary-AuthUser') auth_pass = get_header(mail, 'X-tDiary-AuthPass') body = mail.body.tosjis.untaint data = "year=#{time.year}&month=#{time.month}&day=#{time.day}&title=&body=#{CGI::escape(mail.body.tosjis)}&append=#{CGI::escape(' 追加 ')}" Net::HTTP.start( host, port, proxy_host, proxy_port ) do |http| response,body = http.post( document, data, 'Authorization' => 'Basic ' + ["#{auth_user}:#{auth_pass}"].pack('m').strip) end return Becky::ONSEND_PROCESSED end def get_header(mail, header) h = mail[header] h = h.to_s.untaint unless h.nil? return h end end Becky.add_callback CallbackTDiary.new
御芽出度う御座います。旨い事行つて良かつたです。