codestates-beb / BEB-07-final-CDS

6 stars 5 forks source link

[server] coin gecko price api 제공 #145

Closed atoye1 closed 1 year ago

NotoriousHong commented 1 year ago

Coingecko API Docs 위 API Docs 중 '/coins/{id}/market_chart' tab에서 제공하는 market history data를 들고옵니다

엔드포인트에 들어가는 파라미터는 총 4개입니다

API Docs 또는 URL로 간단하게 테스트 가능합니다.

NotoriousHong commented 1 year ago
Screenshot 2023-02-01 at 11 11 42 AM

데이터는 위와 같은 형태로 들어옵니다. 위 데이터 중 클라이언트에서 활용할 데이터는 prices입니다. prices를 이용한 각 자산의 가격과 24시간 변화율을 제공받고 싶습니다.

prices[0][1] : 1 days 이전의 가격데이터입니다. prices[1][1] : 현재의 가격데이터입니다.

client에서는 우선적으로 BTC, ETH, DOGE가격을 제공할 생각입니다. 다만, 들어오는 데이터가 지저분해서 정리해서 주시면 감사하겠습니다.

아래와 같은 방식으로 데이터를 정리해주셨으면 합니다. 현재 BTC 가격 : 소수점 셋째 자리에서 반올림 ex) 23128.12 현재 ETH 가격 : 소수점 셋째 자리에서 반올림 ex) 1589.32 현재 DOGE 가격 : 소수점 다섯째 자리에서 반올림 ex) 0.0954

BTC, ETH, DOGE 24시간 변화율 : 소수점 셋째 자리에서 반올림 ex) 1.22, -0.09

atoye1 commented 1 year ago

image

image

위의 api에서도 제석님이 원하는 기능을 한번에 제공해주는데 이걸 사용해도 상관없겠죠?

NotoriousHong commented 1 year ago

네 전혀 상관없습니다. usd_24h_change 소수점 셋째 자리에서 반올림해서 주시면 감사하겠습니다.

그리고 "last_updated_at"도 유저 입장에서 확인할 수 있으면 유용할 듯 한데 넘겨받는 "1675221294"와 같은 데이터를 어떻게 변경시켜야 사용할 수 있는지 알고 계신가요?

atoye1 commented 1 year ago
const date = new Date(1675221294 * 1000);
console.log(date)

이런식으로하면 아래처럼 출력되서 이걸 가공해서 사용하면 될것 같습니다.

2023-02-01T03:14:54.000Z

근데 서버에서는 블록체인과의 호환성이나 시간대 문제때문에 16759999 형식의 unix timestamp를 그대로 전달해드릴거고 클라이언트에서 가공해서 사용하셨으면 좋겠습니다.

NotoriousHong commented 1 year ago

네 알겠습니다!

atoye1 commented 1 year ago

코인게코 api에 장애생긴것 같은데 다른분들도 이러신가요? https://status.coingecko.com/ image

NotoriousHong commented 1 year ago

네 지금 에러난것 같습니다. 저도 안되네요🥲

atoye1 commented 1 year ago
{
    "bitcoin": {
        "usd": 23161,
        "usd_24h_change": 1.268,
        "last_updated_at": 1675229081
    },
    "ethereum": {
        "usd": 1585.15,
        "usd_24h_change": 0.815,
        "last_updated_at": 1675229069
    },
    "dogecoin": {
        "usd": 0.092715,
        "usd_24h_change": 0.518,
        "last_updated_at": 1675229114
    }
}

대상 코인이 몇개 안되서 이런 형식으로 한번에 응답을 주게 설정했습니다. 조금 더 수정하고 api 서버를 다시 올리겠습니다.

이 데이터는 설민님이 언급한 메모리 DB인(성능이 빠름) redis에 20초 주기로 setInterval로 갱신하고, GET 요청이 있으면 서버는 redis에 저장된 데이터를 받아 옵니다. 따라서 그때그때의 스냅샷만을 저장하므로, DB에서 시간대별로 갱신되는 모든 정보를 가지고 있지는 않습니다.

atoye1 commented 1 year ago

https://nodeauction.42msnsnsfoav6.ap-northeast-2.cs.amazonlightsail.com/dev/prices

위의 uri로 GET 요청하시면 됩니다.

NotoriousHong commented 1 year ago

감사합니다 혹시 bitcoin 가격도 소수점 둘째자리까지 표현해주실 수 있을까요?

atoye1 commented 1 year ago

가능합니다. 바로 수정할게요

atoye1 commented 1 year ago

수정 완료되었습니다. 다만 도지코인 가격도 소수점이 2자리로 픽스되는 문제점이 생기는데 괜찮을까요? 아니면 3자리나 4자리로 변경할까요?

NotoriousHong commented 1 year ago
Screenshot 2023-02-01 at 2 58 23 PM

동헌님 방금 알게된 사실인데 고얼리 네트워크에서 체인링크를 사용하여 가져올 수 있는 가격리스트가 위와 같습니다. BTC/USD ETH/USD 는 존재하는데 DOGE가 없네요.

Screenshot 2023-02-01 at 3 00 23 PM

Market Price 컴포넌트에서 위와 같이 Database 와 ChainLink가격의 짝을 맞춰서 보여줄 예정입니다. 때문에 Database에서 도지코인 가격을 들고오는 것을 포기하고 도지코인 대신 체인링크 가격을 들고와야 겠습니다.

혹시 도지코인 대신 체인링크 데이터를 받을 수 있는지 여쭤보고싶습니다. bitcoin, ethereum, chainlink 모두 소수점 둘째자리까지 표현해주시면 됩니다.

번거롭게 해드려 죄송합니다.

atoye1 commented 1 year ago

알겠습니다.

그러니까 dev/prices/chainlink 요런 api가 필요하신거네요 해당 데이터는 고얼리 chainlink에서 가지고 오는거고

이건 컨트랙트 콜을 해야되서 시간이 좀 걸리겠네요.

이렇게 개선해보겠습니다.

NotoriousHong commented 1 year ago

맞습니다.

coingecko에서 가져오는 가격 데이터의 api 엔드포인트 dev/prices/coingecko

chainlink에서 가져오는 가격 데이터의 api 엔드포인트 dev/prices/chainlink

위와 같이 보내주시면 편하겠습니다.

atoye1 commented 1 year ago

확인하시고 추가할 사항 없으면 이슈 닫아주세요

https://nodeauction.42msnsnsfoav6.ap-northeast-2.cs.amazonlightsail.com/dev/prices/chainlink https://nodeauction.42msnsnsfoav6.ap-northeast-2.cs.amazonlightsail.com/dev/prices/coingecko

NotoriousHong commented 1 year ago

coingecko가격 중에 dogecoin 대신 chainlink가격을 들고와 주실 수 있을까요?

NotoriousHong commented 1 year ago

그리고 chainlink가격 api에서 각 자산 가격의 소수점이 하나씩 뒤로 밀린것 같습니다😭 원래 '23924.54' 이 가격일텐데 이렇게 표현되네요 '2390.89'

atoye1 commented 1 year ago

저도 확인해서 방금 수정 커밋 머지했습니다. 곧 있으면 자동으로 반영될거에요

1e8로 나눴어야 했는데 10e8로 나눠서 한자리가 줄어들었었네요

NotoriousHong commented 1 year ago

데이터 모두 정상적으로 잘 들어와서 이슈 닫습니다. 감사합니다.