Changes between Initial Version and Version 1 of misc/botlog_pas/webapi_input


Ignore:
Timestamp:
09/10/18 14:42:48 (7 years ago)
Author:
Tetsuya Michikawa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • misc/botlog_pas/webapi_input

    v1 v1  
     1[[PageOutline]]
     2
     3= botlog,PrintAnyServer用データ登録Web APIの使い方 =
     4
     5botlog,PrintAnyserver共にWeb APIによるデータ登録が可能なので、それ用のpythonスクリプトを記述する。[[br]]
     6このスクリプトを利用したpythonスクリプトを使用することで、外部PCからもログ登録が可能になる。
     7
     8'''但し、大量にデータを送るとそのまま登録してしまうので、取り扱いには注意すること。'''
     9
     10また、外部で使用する場合には、python2.7の実行環境が必要なので、事前にインストールしておく必要がある。[[br]]
     11
     12
     13== botlog ==
     14
     15スクリプト自体は、{{{botlog/tools/epicsRecordMonitor}}}の{{{botlogSender.py}}}にある。[[br]]
     16そのままでは、ログ出力がbotlogに依存しているので、多少修正する必要がある。[[br]]
     17
     18修正したのが以下のスクリプト。
     19
     20{{{
     21# -*- coding: utf-8 -*-
     22#
     23
     24import sys
     25import os
     26
     27import json
     28import urllib2
     29import threading
     30import socket
     31import datetime
     32import traceback
     33import base64
     34
     35#from epicsRecordMonitorLogging import logger, logInit
     36
     37
     38class botlogSender(object):
     39    #
     40    # mode は自動登録(2)
     41    # group(section)はOperation(2)
     42    #
     43    def __init__(self, URL, group=2, mode=2):
     44        self.botlogURL = URL + "editLog"
     45        #logger.debug(self.botlogURL)
     46        self.entrySection = group
     47        self.entryMode    = mode
     48
     49
     50
     51    def __createJSONdata(self, msgData):
     52        rtn = {}
     53        rtn['id']      = ""
     54        rtn['msg']     = base64.urlsafe_b64encode(msgData[0])
     55        rtn['setTime'] = msgData[1].strftime("%Y/%m/%d %H:%M:%S.%f")
     56        rtn['entsct']  = self.entrySection
     57        rtn['imgs']    = []
     58        rtn['mode']    = self.entryMode
     59
     60        return rtn
     61
     62    #
     63    # msgList =
     64    #   [
     65    #      [message, datetime],
     66    #           :
     67    #   ]
     68    #
     69    def sendMsg(self, msgList):
     70        for msg in msgList:
     71            jsonData = self.__createJSONdata(msg)
     72            #logger.debug(str(jsonData))
     73            try:
     74                req = urllib2.Request(self.botlogURL,  headers={'Content-Type':'application/json'})
     75                jsonmsg = json.dumps(jsonData)
     76                f = urllib2.urlopen(req, jsonmsg)
     77                resp = json.loads(f.read())
     78                f.close()
     79            except Exception as e:
     80                #logger.debug(self.botlogURL)
     81                #logger.debug(traceback.format_exc())
     82                print traceback.format_exc()
     83
     84
     85# テスト用main
     86if __name__ == '__main__':
     87    #logger = logInit(None)
     88
     89    msgList = []
     90    msg = ["改行テスト\n改行テスト2\n改行テスト3", datetime.datetime.now()]
     91    msgList.append(msg)
     92
     93    URL="http://localhost/botlog/botlog/"
     94    bs = botlogSender(URL)
     95    bs.sendMsg(msgList)
     96
     97}}}
     98
     99
     100== !PrintAnyServer ==
     101
     102PrintAnyServer用画像登録スクリプトは以下の様になる。[[br]]
     103こちらは、一旦画像ファイルを作成してから登録スクリプトを実行する。
     104
     105
     106{{{
     107# -*- coding: utf-8 -*-
     108import os
     109import datetime
     110import base64
     111import json
     112import urllib2
     113import traceback
     114
     115class saveImage(object):
     116    def __init__(self, baseURL='http://localhost'):
     117        self.URL = baseURL + '/pas/api/addImage'
     118       
     119    def save(self, caption, imgFile):
     120        rtn = False
     121        req = urllib2.Request(self.URL,  headers={'Content-Type':'application/json'})
     122        try:
     123            img = base64.b64encode(open(imgFile, 'rt').read())
     124            cap = base64.b64encode(caption)
     125            tm  = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')
     126            jsonData = {'from':[],
     127                        'pasImg':{'img': img, 'caption': cap, 'type':'png', 'time':tm, 'print':{}}}
     128
     129            printData = jsonData['pasImg']['print']
     130            printData['exec'] = 0
     131
     132            f = urllib2.urlopen(req, json.dumps(jsonData), timeout=5)
     133            resp = json.loads(f.read())
     134            rtn = True
     135        except Exception as e:
     136
     137            print traceback.format_exc()
     138        return rtn
     139
     140
     141# テスト用main
     142if __name__ == '__main__':
     143    s = saveImage()
     144    caption =  'TEST'
     145    fileName = 'test.png'
     146
     147    if s.save(caption, fileName) == True:
     148        print "Copy : %s" % fileName
     149    else:
     150        print "Copy Fail: %s" % fileName
     151}}}