ももらぼっ!にっき


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してやるという方法をとっている。レンタルサーバなんで勝手に余計なデーモンを動かせないんだよね。。。

まぁ何はともあれ、beckrbTMailに感謝。汚いソースだけど、下記に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
本日のツッコミ(全1件) [ツッコミを入れる]
_ ぴょん (2003年05月06日 22:21)

御芽出度う御座います。旨い事行つて良かつたです。