Personal tools
You are here: Home Zope&Plone Tips 外部からコンテンツを更新する方法
Document Actions

外部からコンテンツを更新する方法

by maru last modified 2008-02-21 23:27

外部(この場合自鯖内のシェルスクリプトなどを指す)からあるページを更新する方法のメモ書き

【環境】

  • Python-2.4.4 (Linux)
  • PIL-1.1.6
  • Zope-2.9.7-final (Linux)
  • Plone-2.5.3-final

 はっきり言うと COREBlog2 の moblog 更新法とさほど変わりませんw 流れ的には以下の通り。

  1. 事前に更新対象コンテンツを作成しておく(ここではATDocumentとして、http://www.maruz.net/hoge で作成)
  2. コマンドラインからあるスクリプトを起動(更新対象コンテンツURL+更新用スクリプト)
  3. 更新用スクリプトが動いてコンテンツの内容を変える

◆ /home/hoge/test.py (上記 2. のスクリプト)

import sys
import urllib

#初期設定
tgt_url = 'www.maruz.net/hoge/' #←更新するコンテンツのURL
uname = 'hoge' #←更新するためにログインが必要。ログインネーム
upass = 'hogepass' #←更新するためにログインが必要。パスワード
updtscript = 'auto_update' #←コンテンツ更新スクリプト名

if __name__ == '__main__':

if len(sys.argv) < 2:
print 'Usage: %s textdata\n' % sys.argv[0]
sys.exit(0)

# 引数より更新内容を取り出す(文字コード変換とか丸無視してますw)
text_data = sys.argv[1]

# コンテンツ更新で叩くURL生成
urlbase='http://' + uname + ':' + upass + '@' + tgt_url

# 更新コンテンツ対象URL+コンテンツ更新スクリプト+GET内容でURLを叩く
d = urllib.urlencode( {'textdata':text_data,} )
urllib.urlopen( urlbase + updtscript, d )

#おわし

◆ [ZMI] /portal_skin/custom/auto_update (上記 3. で動くスクリプト)

## Script (Python) "auto_update"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=textdata
##title=
##

# この辺に誤動作を防ぐ機構があったほうがいいようなそうでもないような

# 既にある内容の下に貰ったデータを追記する
base_text = context.getText()
new_text = base_text + textdata
context.setText(new_text)

# 最終更新日とか更新
#  ※最終更新日とか変えずにコッソリやる場合はこれを抜けばいいと思うんですが、Squidとかの
#   Proxy Cacheを使ってるとダメかも・・・(cacheが更新されないと思う)
context.reindexObject()

  以上の2つのスクリプトを用意して、次のようにコマンドを叩けば、「対象コンテンツの内容+”autoupdate"」の内容に変わってるはずです。更新タイミングとかは cron などでお好みで。

[hoge@ns1 hoge]$ python ./test.py autoupdate
Related content