[[PageOutline]] = botlog,PrintAnyServer用データ登録Web APIの使い方 = botlog,PrintAnyserver共にWeb APIによるデータ登録が可能なので、それ用のpythonスクリプトを記述する。[[br]] このスクリプトを利用したpythonスクリプトを使用することで、外部PCからもログ登録が可能になる。 '''但し、大量にデータを送るとそのまま登録してしまうので、取り扱いには注意すること。''' また、外部で使用する場合には、python2.7の実行環境が必要なので、事前にインストールしておく必要がある。[[br]] == botlog == スクリプト自体は、{{{botlog/tools/epicsRecordMonitor}}}の{{{botlogSender.py}}}にある。[[br]] そのままでは、ログ出力がbotlogに依存しているので、多少修正する必要がある。[[br]] 修正したのが以下のスクリプト。 {{{ # -*- 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用画像登録スクリプトは以下の様になる。[[br]] こちらは、一旦画像ファイルを作成してから登録スクリプトを実行する。 {{{ # -*- 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 }}}