Personal tools
You are here: Home Wiki Nikki COREBlog2Moblog

COREBlog2Moblog

Document Actions
last edited 4 years ago by jack

免責事項

うまくいかなくてもあきらめてください。質問は zope-users か coreblog か plone-users あたりへお願いします

事前準備

取り敢えず、Plone 2.5.x と COREBlog2 はインストールできているものとします。

入手やインストールの基本は柴田さんの大元のサイトをご覧ください。で、さらに、moblog.py と add_moblog_entry.py も入手しておいてください

http://coreblog.org/ats/coreblog2-08b-released

サーバ側にmoblog.py を置く

自分の home のどこかとか、まぁ、どこでもいいので置きます

カスタマイズします。mainの中ですね :

    s = poplib.POP3('pop.server.address') # 自分のpopserver設定
    #s.apop('yourmailaccount','mailpassword') # APOPならこっち
    s.user('user') # POPのID
    s.pass_('pass')# POPのパス
    moblogcode = 'moblogEntryPass' # moblog用の秘密の暗号です
    cb2auth='cbuser:cbpass' # PloneへのログインID とパス
    cb2url='http://%s@blog.your.site/Members/jack/blog/'%cb2auth 
    #              ^^^フルパスのアタマにこの3文字をいれてください。一番後ろの / を忘れずに
    l = s.list()
    if len(l) and l[1]:
        m = s.retr(1)
        msgbody = '\n'.join(m[1])
        add_moblog_entry(msgbody,cb2url,moblogcode) # 前に出したので変数のみになった

もともとのソースでは add_moblog_entryのとこに文字列が全部書いてありましたが個人的な趣味で前に出しておきました。

ZMIで add_moblog_entry を置く

Plone site の portal_skins の下の custom に uploadしてください。 .py は不要です。具体的には

  • custom まで行き
  • 右上のずらーっと長いプルダウンから Script (Python)を選んで、Addを押し
  • ID に add_moblog_entry と入れて、
  • File の参照をつかって、ローカルのファイルを選択し
  • Add and Edit を押してください。

そしたら、一行目にある :

  #Parameters : entry_id,title,body,image_path

entry_id,title,body,image_path を、編集 textarea の上にある Parameter List にコピーします。

写真無しエントリも書けるようにする

まぁ、普通moblog って写メですよね。でもたまには、テキストのみもあるかなと思います。というか個人的にはありなのです。

で、この状態ではそれがPostできません。なので、カスタマイズします。まずは、moblog.pyですが、add_moblog_entry の直下に:

    body,subj,images = get_parts(msgbody)

    filename='' # この行を足します

    if not body:
        # no body was found
        return

一部のMTAかMUAか携帯(MUAか、これも)かで、先頭に改行がはいってることに対する、念の為のテキトーパッチをしておきます。 :

    while body_str[0] == '\n': body_str = body_str[1:] # MTA patch
    if body_str.find(passwd) != 0:
        return
    else:

filename を宣言しておきます。そして、add_moblog_entry の最後のところですが :

    # Add entry
    id = time.strftime('moblog%Y-%m-%d-%H-%M',time.localtime())
    dt = urllib.urlencode({'entry_id':id,'title':subj,
                           'body':body_str,
                           'image_path':filename and ('images/' + filename) or ''}) # ここが変更されてます
    urllib.urlopen(blogbase+'add_moblog_entry',dt)

添付ファイルがないときには image_pathに '' を渡すように変更します。image_pathを消す手もあるんですがこのほうが変更行数が少ない(^_^;;;;

そして、Plone 側も対応するところを変更します。 custom/add_moblog_entry にいって、以下の所に if 文を追加します:

  # Add image reference
  if image_path:
    ref_obj = context.restrictedTraverse(image_path)
    ent.addReference(ref_obj,'relatesTo')

image_path が '' ならリファレンスは付けないよってことです。

COREBlog2 の設定

設定というほどのものではないのですが、カテゴリに moblog というのを用意しておきます

メールの書き方

nagosui さんのサイト http://nagosui.org/Nagosui/COREBlog2/fight-for-moblog-1 には、1行目に passphrase, 2行目にカテゴリ、3行目以降は本文と書いてありますが、ソースを見るかぎり、ちがうみたいです。

passphrase つまり moblog.py の中で設定した、上の例だと、moblogEntryPass ですが、それは本文中ともかく先頭なので1行目でいいんですが、頭にスペースとか入れちゃだめです(普通入れないと思うけど)。

で、カテゴリですが、配布されている Python Script では、moblog に固定されているように見えます。なので、固定です。

変更するには moblog.py のなかで :

    body_str = body_str.strip() # MTA patch
    if body_str.find(passwd) != 0:
        return
    else:
        body_str = body_str.replace(passwd,'')
        #インデント的にはここ
        body_tmp = body_str.split('\n')
        category = body_tmp[0]
        body_str = '\n'.join(body_tmp[1:])
        #ここまで
        body_str = body_str.strip() # MTA patch

    body_str = body_str.split('---')[0]
    body_str = unicode(body_str,'iso-2022-jp').encode('utf-8')

    # Add entry
    id = time.strftime('moblog%Y-%m-%d-%H-%M',time.localtime())
    dt = urllib.urlencode({'entry_id':id,'title':subj,
                           'body':body_str,
                           'category':category, # ここ。
                           'image_path':filename and ('images/' + filename) or ''}) 
    urllib.urlopen(blogbase+'add_moblog_entry',dt)

body_strから頭一行抜きだして、category にして、その下のurl_encode に category:category を追加するようにして、Script(Python)側のこのへんを:

  # Set category
  try:
    cat_id = context.getCategoryFolder()[category].getInternal_id()
  except StandardError, errobj:
    cat_id = context.getCategoryFolder()['moblog'].getInternal_id()

ぐらいにすればいいと思うんですが面倒だし個人的に必要性も感じないのでやってないっす(^_^;;;それに日本語名カテゴリにした場合はIDをあらかじめメモっておかないとならないし。 ** なお、このコードは一切テストしてません。 **

あ、Parameter List にも category を追加しておいてくださいね。

結論的には :

  moblogEntryPass
  ほんぶんでやんす
  どうでしょう

みたいなフォーマットでいいということじゃないかと。実際大丈夫だし。

** 追記 **

カテゴリ対応、とりあえずうまくいっているように見えます。

そのように変更した場合は :

  moblogEntryPass
  category (空行かカテゴリが存在しなければmoblogになる)
  ほんぶんでやんす
  どうでしょう

と、なります

最後に

で、メールを送ってから、moblog.py を実行してうまくエントリが追加されるようになったら、crontab を設定してください。 :

  0-59/10 * * * * /home/user/bin/moblog.py

あたりでいいかと 。 /10/5 にすると5分置きになります。 * にすると毎分になります。

既知の問題(だとおもう)

ID が 時間と、添付ファイルのファイル名に依存してます。よって、

  • 連続して投稿するには 「分」がかわるまで待たないといけない。
    • まぁ、cronで一件ずつ処理されるからかまわないんですが。debugで手作業でやってたから発生しただけですね。
  • 添付ファイルのファイル名が同じだと、新しいものは投稿できない。古いものが表示される。
  • エラーはメールでは帰らないので、Plone の error_log を見ないとエラーがわからない

くらいでしょうか。

参考

あとはソース。atsさんありがとうございます。

 
そちらのOSの時刻なので 正確性はあなた次第
 
こういう意味のないの好き
 
本をお勧め中
 
CDもお勧め中
のだめカンタービレ ベスト100
ドラマの演奏とは違います。でもこの感じでこの価格ならアリかと
 
消耗品や家電
 
よく使うサイト
社名ロゴ88×631
 
ぐぐってみる
 
誰が使うんだろう
 

Powered by Plone