<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Anis</title>
    <description>The latest articles on DEV Community by Anis (@hackitup).</description>
    <link>https://dev.to/hackitup</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1246924%2F5eac4b9e-5fc3-42de-bd6c-733603adfec5.png</url>
      <title>DEV Community: Anis</title>
      <link>https://dev.to/hackitup</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hackitup"/>
    <language>en</language>
    <item>
      <title>Need help</title>
      <dc:creator>Anis</dc:creator>
      <pubDate>Tue, 02 Jan 2024 19:32:11 +0000</pubDate>
      <link>https://dev.to/hackitup/need-help-1m5b</link>
      <guid>https://dev.to/hackitup/need-help-1m5b</guid>
      <description>&lt;p&gt;I have written a python script file which fetch the real time data from bybit and send that data to kafka topic.&lt;br&gt;
My kafka is running in local.&lt;/p&gt;

&lt;p&gt;below is the script : &lt;br&gt;
import requests&lt;br&gt;
import json&lt;/p&gt;
&lt;h1&gt;
  
  
  from websocket import create_connection
&lt;/h1&gt;

&lt;p&gt;from websocket import create_connection&lt;br&gt;
from kafka import KafkaProducer&lt;/p&gt;
&lt;h1&gt;
  
  
  Bybit API credentials
&lt;/h1&gt;

&lt;p&gt;api_key = ''&lt;br&gt;
api_secret = ''&lt;br&gt;
symbol = 'BTCUSD'  # Replace with the symbol you're interested in&lt;/p&gt;
&lt;h1&gt;
  
  
  Kafka configuration
&lt;/h1&gt;

&lt;p&gt;kafka_bootstrap_servers = 'localhost:9092'&lt;br&gt;
price_topic = 'server-2'&lt;br&gt;
trade_topic = 'bybit_trade_data'&lt;/p&gt;
&lt;h1&gt;
  
  
  Set up Kafka producer
&lt;/h1&gt;

&lt;p&gt;producer = KafkaProducer(&lt;br&gt;
    bootstrap_servers=kafka_bootstrap_servers,&lt;br&gt;
    value_serializer=lambda v: json.dumps(v).encode('utf-8')&lt;br&gt;
)&lt;/p&gt;
&lt;h1&gt;
  
  
  Function to fetch price data from Bybit API
&lt;/h1&gt;

&lt;p&gt;def fetch_price_data():&lt;br&gt;
    url = f'&lt;a href="https://api.bybit.com/v2/public/tickers?symbol=%7Bsymbol%7D"&gt;https://api.bybit.com/v2/public/tickers?symbol={symbol}&lt;/a&gt;'&lt;br&gt;
    response = requests.get(url)&lt;br&gt;
    data = response.json()&lt;br&gt;
    return data['result'][0]&lt;/p&gt;
&lt;h1&gt;
  
  
  Function to connect to Bybit WebSocket for trade data
&lt;/h1&gt;

&lt;p&gt;def connect_to_websocket():&lt;br&gt;
    ws_url = 'wss://stream.bybit.com/realtime'&lt;br&gt;
    ws = create_connection(ws_url)&lt;br&gt;
    request_data = {&lt;br&gt;
        'op': 'subscribe',&lt;br&gt;
        'args': [f'trade.{symbol}']&lt;br&gt;
    }&lt;br&gt;
    ws.send(json.dumps(request_data))&lt;br&gt;
    return ws&lt;/p&gt;
&lt;h1&gt;
  
  
  Main loop to continuously fetch data and produce to Kafka topics
&lt;/h1&gt;

&lt;p&gt;def main():&lt;br&gt;
    ws = connect_to_websocket()&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;while True:
    try:
        # Fetch price data from Bybit REST API
        price_data = fetch_price_data()

        # Produce price data to Kafka topic
        producer.send(price_topic, value=price_data)
        print(f"Price Data sent to Kafka - {price_data}")

        # Receive and process trade data from Bybit WebSocket
        trade_data = json.loads(ws.recv())

        # Produce trade data to Kafka topic
        producer.send(trade_topic, value=trade_data)
        print(f"Trade Data sent to Kafka - {trade_data}")

    except Exception as e:
        print(f"Error: {e}")
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;if &lt;strong&gt;name&lt;/strong&gt; == "&lt;strong&gt;main&lt;/strong&gt;":&lt;br&gt;
    main()&lt;/p&gt;

&lt;p&gt;Also i have written a d3.js code to display the data coming from bybit.&lt;/p&gt;

&lt;p&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br&gt;
&lt;br&gt;
  &lt;/p&gt;
&lt;br&gt;
    &lt;br&gt;
    &lt;br&gt;
    WebSocket Bar Chart Visualization&lt;br&gt;
    &lt;br&gt;
    &amp;lt;br&amp;gt;
      #bar-chart{&amp;lt;br&amp;gt;
        background-color: red;&amp;lt;br&amp;gt;
      }&amp;lt;br&amp;gt;
    &lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
    
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script&amp;gt;
  // Connect to WebSocket
  const socket = new WebSocket("wss://stream.bybit.com/realtime");

  // Initialize D3.js bar chart
  const svg = d3
    .select("#bar-chart")
    .append("svg")
    .attr("width", 400)
    .attr("height", 200);

  //Web Socket config
  socket.addEventListener("open", function (event) {
    console.log("WebSocket is open now.");
  });

  socket.addEventListener("error", function (event) {
    console.log("WebSocket error: ", event);
  });

  // Receive and update data from WebSocket
  socket.addEventListener("message", function (event) {
    // console.log("Message from server: ", event.data);
    // const data = JSON.parse(event.data);
    console.log("Message from server: ", event.data);
    let data;
    try {
      data = JSON.parse(event.data);
    } catch (error) {
      console.error("Error parsing data: ", error);
      return;
    }

    // Assuming data is in the format { label: 'Category', value: 10 }
    updateBarChart(data.label, data.value);
  });

  // Function to update the bar chart
  function updateBarChart(label, value) {
    // Your D3.js code to update the bar chart goes here
    // Example: Append a rectangle for each data point
    // svg
    //   .selectAll("rect")
    //   .data([value])
    //   .enter()
    //   .append("rect")
    //   .attr("x", 0)
    //   .attr("y", 0)
    //   .attr("width", value)
    //   .attr("height", 50)
    //   .attr("fill", "blue");

    // Bind the new data to the rectangles
    const rects = svg.selectAll("rect").data([value]);

    // Update existing rectangles
    rects
      .attr("width", (d) =&amp;gt; d)
      .attr("height", 50)
      .attr("fill", "blue");

    // Add new rectangles for any new data points
    rects
      .enter()
      .append("rect")
      .attr("x", 0)
      .attr("y", 0)
      .attr("width", (d) =&amp;gt; d)
      .attr("height", 50)
      .attr("fill", "blue");

    // Remove rectangles for any missing data points
    rects.exit().remove();
  }
  socket.addEventListener("close", function (event) {
    console.log("WebSocket is closed now.");
  });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;But in live server i am not getting any visualization result.&lt;br&gt;
Please help me with D3.js code &lt;/p&gt;

</description>
      <category>d3js</category>
    </item>
  </channel>
</rss>
