Websocket 2.0


  • @vivekjha05 Here's the changes:

    def _parse_token_value(binary_packet):
        token = ""
        for i in range(len(binary_packet)):
            if chr(binary_packet[i]) == '\x00':
                return token
            token += chr(binary_packet[i])
        return token
    

  • @rajanprabu
    not working


  • @admin Hi @admin

    I have updated the code like below to convert the bytes to string and I can see the response.

    def _parse_binary_data(self, binary_data):
        try:
            parsed_data = {
                "subscription_mode": self._unpack_data(binary_data, 0, 1, byte_format="B")[0],
                "exchange_type": self._unpack_data(binary_data, 1, 2, byte_format="B")[0],
                # "token": SmartWebSocketV2._parse_token_value(binary_data[2:27]),
                "token": binary_data[2:27].decode("utf-8").replace("\x00",""),
                "sequence_number": self._unpack_data(binary_data, 27, 35, byte_format="q")[0],
                "exchange_timestamp": self._unpack_data(binary_data, 35, 43, byte_format="q")[0],
                "last_traded_price": self._unpack_data(binary_data, 43, 51, byte_format="q")[0]
            }
    

    Got connected to server...
    on open
    Ticks: {'subscription_mode': 3, 'exchange_type': 1, 'token': '26009', 'sequence_number': 6346734, 'exchange_timestamp': 1668667371000, 'last_traded_price': 4245320, 'subscription_mode_val': 'SNAP_QUOTE', 'last_traded_quantity': 0, 'average_traded_price': 0, 'volume_trade_for_the_day': 0, 'total_buy_quantity': 0.0, 'total_sell_quantity': 0.0, 'open_price_of_the_day': 0, 'high_price_of_the_day': 0, 'low_price_of_the_day': 0, 'closed_price': 4253530, 'last_traded_timestamp': 0, 'open_interest': 31252900, 'open_interest_change_percentage': 4626580563041346420, 'upper_circuit_limit': 0, 'lower_circuit_limit': 0, '52_week_high_price': 0, '52_week_low_price': 0, 'best_5_buy_data': [{'flag': 0, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 0, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 0, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 0, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 0, 'quantity': 0, 'price': 0, 'no of orders': 0}], 'best_5_sell_data': [{'flag': 1, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 1, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 1, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 1, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 1, 'quantity': 0, 'price': 0, 'no of orders': 0}]}
    Ticks: {'subscription_mode': 3, 'exchange_type': 1, 'token': '26009', 'sequence_number': 6347286, 'exchange_timestamp': 1668667372000, 'last_traded_price': 4245150, 'subscription_mode_val': 'SNAP_QUOTE', 'last_traded_quantity': 0, 'average_traded_price': 0, 'volume_trade_for_the_day': 0, 'total_buy_quantity': 0.0, 'total_sell_quantity': 0.0, 'open_price_of_the_day': 0, 'high_price_of_the_day': 0, 'low_price_of_the_day': 0, 'closed_price': 4253530, 'last_traded_timestamp': 0, 'open_interest': 31252900, 'open_interest_change_percentage': 4626580563041346420, 'upper_circuit_limit': 0, 'lower_circuit_limit': 0, '52_week_high_price': 0, '52_week_low_price': 0, 'best_5_buy_data': [{'flag': 0, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 0, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 0, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 0, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 0, 'quantity': 0, 'price': 0, 'no of orders': 0}], 'best_5_sell_data': [{'flag': 1, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 1, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 1, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 1, 'quantity': 0, 'price': 0, 'no of orders': 0}, {'flag': 1, 'quantity': 0, 'price': 0, 'no of orders': 0}]}


  • @rajanprabu

    Below code will work. Use it for time being.

    @staticmethod
        def _parse_token_value(binary_packet):
            token = ""
            token_data = binary_packet.split(b'\x00')
            for split in token_data:
                if split:
                    token = split.decode("UTF-8")
            return token
    

  • Below code will work use it for time being

    @staticmethod
        def _parse_token_value(binary_packet):
            token = ""
            token_data = binary_packet.split(b'\x00')
            for split in token_data:
                if split:
                    token = split.decode("UTF-8")
            return token
    

  • @Karthikeyan
    @rajanprabu
    @ashokkmr22

    Thank you for the fix,

    Can you please help me to get time stamp in datetime format.
    'exchange_timestamp': 1668667371000.
    Also prices (OHLC) into their required formats.

    Thanks in advance.


  • @vrkhyd commented you on another thread


  • @rajanprabu same here now. any solution??


  • @ashokkmr22 thanks for your convenience


  • @vrkhyd

    import datetime

    timestamp = 1671097663
    dt_obj = datetime.datetime.fromtimestamp(timestamp)

    print("date_time:",dt_obj)
    print("type of dt:",type(dt_obj))


  • @ashokkmr22 said in Websocket 2.0:

    split.decode("UTF-8")
    return token

    I tried this and did not worked. Can you please suggest alternate option?


  • @Karthikeyan this is not working
    please help