본문 바로가기
코딩 공부/python

온체인 데이터를 이용한 지표 웹사이트 쉽게 만들기(3)

by Camel_coding_food 2023. 2. 14.
반응형

블록체인의 비효율성을 비꼬는 밈이네요.

 

 

API키 없이 암호화폐 데이터를 받아올 수 있는 CoinCecko API를 이용해봅시다.

 

https://www.coingecko.com/en/api/documentation

 

Crypto API Documentation | CoinGecko

Power your application with our free & independently sourced crypto data such as live prices, trading volume, exchange volumes, trading pairs, & more.

www.coingecko.com

 

 

해당 사이트에 들어가면 이런 화면이 뜹니다.

 

특정 URL형식으로 json 데이터를 받아오는 API 안내문을 볼 수 있습니다.

 

이 중 우리가 필요로하는 market cap(시가총액)을 가져오는 주소를 생성해줍니다.

 

빈칸에는 차례대로 bitcoin, usd, 1, daily를 입력해주면 됩니다.

숫자부분을 바꿔주면 원하는 기간의 데이터를 받아올 수 있습니다.

 

 

https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=1&interval=daily

request url을 얻었습니다.

 

 

{
  "prices": [
    [
      1676332800000,
      21807.834274723064
    ],
    [
      1676373877000,
      21800.34522195915
    ]
  ],
  "market_caps": [
    [
      1676332800000,
      420838871938.82733
    ],
    [
      1676373877000,
      420739022302.9913
    ]
  ],
  "total_volumes": [
    [
      1676332800000,
      36761909546.14395
    ],
    [
      1676373877000,
      32211451441.997234
    ]
  ]
}
Response headers
 cache-control: public,max-age=120 
 content-type: application/json; charset=utf-8 
 expires: Tue,14 Feb 2023 11:26:46 GMT

 

위처럼 해당 url의 server reaponse도 보여줍니다.

 

가져온 URL을 사용해봅시다.

 

import requests
import matplotlib.pyplot as plt
import pandas as pd
import datetime

url = "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30&interval=daily"
response = requests.get(url)
data = response.json()


market_cap_data = [(datetime.datetime.fromtimestamp(item[0]/1000).strftime('%Y-%m-%d'), item[1]) for item in data["market_caps"]]


df = pd.DataFrame(market_cap_data, columns=['Date', 'Market Cap'])


df = df.groupby('Date').mean().reset_index()

plt.plot(df['Date'], df["Market Cap"])
plt.xlabel('Date')
plt.ylabel('Market Cap (in USD)')
plt.title('Bitcoin Market Cap for the Last 30 Days (averaged by day)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

 

출력한 그래프입니다.

잘 작동하죠?

 

다음번에는 streamlit으로 웹앱 배포해보겠습니다.

반응형

댓글