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
_ ぴょん [御芽出度う御座います。旨い事行つて良かつたです。]