2004/06/16
Lotus Notesのデータをpythonで取る
by
seko
—
posted at
2004-06-16 00:00
last modified
2006-06-17 20:50
LotusNOTESを使っている企業も多いのではないだろうか?導入時点では、その選択は正しかったが、その後インターネットやWEBが主流になって肩身が狭い。特に問題なのは、データが他のシステムに渡しにくいところだ。もちろん、そうしたソフトはあるが高いし、一般ユーザが使うのは困難だろう。そこで、NOTESのデータをデータベースに取り込んでZopeで見せたいなどというときは、次のようなプログラムでpythonからNotesのクライアント経由でデータをテキストファイルに落とすことができる。RubyでNotesにアクセスする方法を参考にさせていただいた。注意点としては、ビューで選択されば文書を全部落とすので、適切なビューを選ぶこと。競合文書も落としてしまう。
必要なもの:
- Windowsの動くPC
- NOTESクライアント
- Windows用python
- python Win32Extention
import string,win32com.client ## COM モジュールをインポート
nSs=win32com.client.Dispatch("Notes.NotesSession") ## NOTES COM オブジェクトを開く
DBServer = "CN=hoge/O=hoge" ## replace server name
DBFile = "hoge.nsf" ##replace DB name
nDb = nSs.GetDataBase(DBServer, DBFile) ## DBのオブジェクト
view = nDb.GetView("hoge") ## select view
doc = view.GetFirstDocument ## Viewの一番上の文書を設定
o=open('c:/temp/output.txt','w') ## opent output file
fieldlist=('hoge1','hoge2','hoge3','hoge4') ## 取りたいデータのNOTES上のフィールド名をリストに
i=1
while doc: ## 行がなくなるまで実行
outline=[]
for j in fieldlist:
fieldvalue=doc.GetItemValue(j)[0] ##listになっているのでデータのある一つ目だけを取り出す
fieldvalue=string.replace(fieldvalue,'\r\n',' ') ##改行をスペースに変換
fieldvalue=string.replace(fieldvalue,'\\','\\ ') ##\を\+spaceに変換
fieldvalue=string.replace(fieldvalue,'\t',' ') ##TABをspace二つに変換
outline.append(fieldvalue)
oline=string.join([str(x) for x in outline],'\t')+ '\t'+doc.NotesURL+'\n' ##Join with tab and add URL
print i,oline
o.write(oline.encode('cp932')) ##shift-jisで書き込む
i=i+1
doc=view.GetNextDocument(doc)
o.close()
- Category(s)
- python
- Lotus Notes