1 Reply Latest reply: Apr 2, 2016 10:29 PM by Tomohiro Takahashi RSS

    Connexion between python and Qlik Sense

    Mohamed ROUS

      Hello,

      I would like to load data QlikSense a server application via a Python application. I saw in the documentation that we can do it via websocket, and I cannot perform this operation.

       

      below the python source code

       

      import websocket

      import json

      1. websocket.create_connection = socket ('ws: // [ma_machine]:4747')
      2. json.dumps data = ({'jsonrpc': '2.0', 'id': 3, 'method', 'DoReload', 'handle': 1, 'params': {'qMode': 0, 'qPartial': false, 'qDebug'. false}}) encode ('utf-8')
      3. socket.send (data)

       

      Thanking you in advance.

        • Re: Connexion between python and Qlik Sense
          Tomohiro Takahashi

          Hi, this is a sample Python script which uses websocket-client package.

          Note: I'm using Python 3.5.1

           

          ----------

          import websocket

          import ssl

          import json

          import threading

          from time import sleep

           

          ws = None

          current_id = 0

          QES_return = None

           

          def wait_next(id):

              global current_id

              while current_id == id:

                  sleep(0.5)

           

          def on_open(ws):

              #print("### open ###")

              global current_id

              current_id += 1

           

          def on_message(ws, message):

              #print("### message ###")

              #print(message)

              global QES_return

              QES_return = json.loads(message)['result']['qReturn']

              global current_id

              current_id += 1

           

          def on_error(ws, error):

              #print("### error ###")

              print(error)

           

          def on_close(ws):

              print("### closed ###")

           

          # worker thread

          def ws_run():

              global ws

              ws = websocket.WebSocketApp("wss://qesXXXhostname:4747", on_message = on_message, on_error = on_error, on_close = on_close, header = {'X-Qlik-User: UserDirectory=QESXXXHOSTNAME; UserId=administrator'})

              ws.on_open = on_open

              ssl_option = ({"ca_certs": "root.pem",

                             "certfile": "client.pem",

                             "keyfile": "client_key.pem",

                             "cert_reqs": ssl.CERT_REQUIRED,

                             "server_side": False})

              ws.run_forever(sslopt=ssl_option)

           

          # main thread

          #websocket.enableTrace(True)

          wst = threading.Thread(target=ws_run)

          wst.daemon = True

          wst.start()

           

          # wait for on_open

          wait_next(current_id)

           

          py_obj = {'jsonrpc': '2.0', 'id': current_id, 'method': 'OpenDoc', 'handle': -1, 'params': ['d366fcd7-92c3-46c3-8fcf-39f2ab7f5205']}

          json_str = json.dumps(py_obj)

          ws.send(json_str)

           

          wait_next(current_id)

          qHandle = QES_return['qHandle']

          #print(qHandle)

           

          py_obj = {'jsonrpc': '2.0', 'id': current_id, 'method': 'DoReload', 'handle': qHandle, 'params': []}

          json_str = json.dumps(py_obj)

          ws.send(json_str)

          wait_next(current_id)

          #print(QES_return)

          ----------