COREBlog2Moblog
免責事項
うまくいかなくてもあきらめてください。質問は 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 を見ないとエラーがわからない
くらいでしょうか。
参考
- 配布サイト http://coreblog.org/ats/coreblog2-08b-released
- たかのりさんのサイト http://takanory.net/takalog/468
- nagosui さんのサイト http://nagosui.org/Nagosui/COREBlog2/fight-for-moblog-1
あとはソース。atsさんありがとうございます。