본문 바로가기
JavaScript

[JavaScript] CoinGecko API 와 chart api를 사용하여 암호화폐 시장 데이터를 실시간으로 받아와 차트로 시각화하기

by teamnova 2024. 3. 19.

안녕하세요 오늘은 CoinGecko API 와 chart api를 사용하여 암호화폐 시장 데이터를 실시간으로 받아와 차트로 시각화 해보겠습니다.

 

다음은 index.html 의 코드입니다

 

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- 기본 HTML 헤드 설정 -->
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Crypto Market Data</title>
    <!-- Tailwind CSS 연결 -->
    <script src="https://cdn.tailwindcss.com"></script>
     <!-- Chart.js 라이브러리 추가 -->
     <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <!-- JavaScript 파일 연결 -->
    <script defer src="script.js"></script>
</head>
<body class="bg-gray-100 flex justify-center items-center h-screen">
    <!-- 컨테이너 -->
    <div class="container">
        <h1 class="text-xl font-bold mb-4">Crypto Market Data</h1>
        <!-- 드롭다운 메뉴 -->
        <select id="crypto-select" class="border p-2 rounded">
            <option value="bitcoin">Bitcoin</option>
            <option value="ethereum">Ethereum</option>
            <option value="litecoin">Litecoin</option>
        </select>
        <!-- 데이터 표시 버튼 -->
        <button id="show-data" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded ml-2">
            Show Data
        </button>
        <!-- 데이터 표시 영역 -->
        <div id="data-display" class="mt-4"></div>
        <canvas id="crypto-chart" width="400" height="400"></canvas>
    </div>
</body>
</html>

 

 

다음은 script.js 의 코드입니다.

 

// 전역 변수로 차트 인스턴스를 저장
let myChart;

document.getElementById('show-data').addEventListener('click', async () => {
  const cryptoCurrency = document.getElementById('crypto-select').value;
  const ctx = document.getElementById('crypto-chart').getContext('2d');

  try {
    const response = await fetch(`https://api.coingecko.com/api/v3/coins/${cryptoCurrency}`);
    const data = await response.json();

    // 필요한 데이터 추출
    const priceChange = data.market_data.price_change_percentage_24h;
    const marketCap = data.market_data.market_cap.usd;
    const volume = data.market_data.total_volume.usd;

    // 기존 차트가 존재하면 파괴
    if (myChart) {
      myChart.destroy();
    }

    // 차트 데이터 준비
    const chartData = {
      labels: ['24h Price Change', 'Market Cap', '24h Volume'],
      datasets: [{
        label: `${cryptoCurrency} Market Data`,
        data: [priceChange, marketCap, volume],
        backgroundColor: ['rgba(255, 99, 132d, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(255, 206, 86, 0.2)'],
        borderColor: ['rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)'],
        borderWidth: 1
      }]
    };

    // 새로운 차트 생성
    myChart = new Chart(ctx, {
      type: 'bar',
      data: chartData,
      options: {
        scales: {
          y: {
            beginAtZero: true // Y축이 0부터 시작하도록 설정
          }
        }
      }
    });
  } catch (error) {
    console.error('Error fetching market data:', error);
  }
});

 

 

위와 같이 코드를 작성하면 다음과 같은 결과를 확인할 수 있습니다.