botlog,PrintAnyServer用データ登録Web APIの使い方
botlog,PrintAnyserver共にWeb APIによるデータ登録が可能なので、それ用のpythonスクリプトを記述する。
このスクリプトを利用したpythonスクリプトを使用することで、外部PCからもログ登録が可能になる。
但し、大量にデータを送るとそのまま登録してしまうので、取り扱いには注意すること。
また、外部で使用する場合には、python2.7の実行環境が必要なので、事前にインストールしておく必要がある。
botlog
スクリプト自体は、botlog/tools/epicsRecordMonitorのbotlogSender.pyにある。
そのままでは、ログ出力がbotlogに依存しているので、多少修正する必要がある。
修正したのが以下のスクリプト。
# -*- coding: utf-8 -*-
#
import sys
import os
import json
import urllib2
import threading
import socket
import datetime
import traceback
import base64
#from epicsRecordMonitorLogging import logger, logInit
class botlogSender(object):
#
# mode は自動登録(2)
# group(section)はOperation(2)
#
def __init__(self, URL, group=2, mode=2):
self.botlogURL = URL + "editLog"
#logger.debug(self.botlogURL)
self.entrySection = group
self.entryMode = mode
def __createJSONdata(self, msgData):
rtn = {}
rtn['id'] = ""
rtn['msg'] = base64.urlsafe_b64encode(msgData[0])
rtn['setTime'] = msgData[1].strftime("%Y/%m/%d %H:%M:%S.%f")
rtn['entsct'] = self.entrySection
rtn['imgs'] = []
rtn['mode'] = self.entryMode
return rtn
#
# msgList =
# [
# [message, datetime],
# :
# ]
#
def sendMsg(self, msgList):
for msg in msgList:
jsonData = self.__createJSONdata(msg)
#logger.debug(str(jsonData))
try:
req = urllib2.Request(self.botlogURL, headers={'Content-Type':'application/json'})
jsonmsg = json.dumps(jsonData)
f = urllib2.urlopen(req, jsonmsg)
resp = json.loads(f.read())
f.close()
except Exception as e:
#logger.debug(self.botlogURL)
#logger.debug(traceback.format_exc())
print traceback.format_exc()
# テスト用main
if __name__ == '__main__':
#logger = logInit(None)
msgList = []
msg = ["改行テスト\n改行テスト2\n改行テスト3", datetime.datetime.now()]
msgList.append(msg)
URL="http://localhost/botlog/botlog/"
bs = botlogSender(URL)
bs.sendMsg(msgList)
PrintAnyServer
PrintAnyServer用画像登録スクリプトは以下の様になる。
こちらは、一旦画像ファイルを作成してから登録スクリプトを実行する。
# -*- coding: utf-8 -*-
import os
import datetime
import base64
import json
import urllib2
import traceback
class saveImage(object):
def __init__(self, baseURL='http://localhost'):
self.URL = baseURL + '/pas/api/addImage'
def save(self, caption, imgFile):
rtn = False
req = urllib2.Request(self.URL, headers={'Content-Type':'application/json'})
try:
img = base64.b64encode(open(imgFile, 'rt').read())
cap = base64.b64encode(caption)
tm = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')
jsonData = {'from':[],
'pasImg':{'img': img, 'caption': cap, 'type':'png', 'time':tm, 'print':{}}}
printData = jsonData['pasImg']['print']
printData['exec'] = 0
f = urllib2.urlopen(req, json.dumps(jsonData), timeout=5)
resp = json.loads(f.read())
rtn = True
except Exception as e:
print traceback.format_exc()
return rtn
# テスト用main
if __name__ == '__main__':
s = saveImage()
caption = 'TEST'
fileName = 'test.png'
if s.save(caption, fileName) == True:
print "Copy : %s" % fileName
else:
print "Copy Fail: %s" % fileName
Last modified
7 years ago
Last modified on 09/10/18 14:42:48
Note:
See TracWiki
for help on using the wiki.
