UNPKG

steemkr

Version:

스팀잇 기반 CLI 툴 : CLI(Command Line Interface) Tool for steemit.

158 lines (139 loc) 4.04 kB
const help = require('./help'); const steem = require('steem'); const axios = require('axios'); const asciichart = require ('asciichart'); const ora = require('ora'); const DEFAULT_PRICE_COIN = 'STEEM'; const STEEM_PRICE_COIN = process.env.STEEM_PRICE_COIN; /** * 코인 종류의 유효성을 검증한다, 불일치 시 STEEM으로 설정 * @param args 코인 종류 */ function getCoin(args){ const DEF_COIN = 'STEEM'; let coin = args&&args.length>=1?args[0].toUpperCase():undefined; const avail = [ 'EOS', // 이오스 'TRX', // 트론 'BTC', // 비트코인 'ADA', // 에이다 'ETH', // 이더리움 'XRP', // 리플 'BCC', // 비트코인캐시 'SC', // 시아코인 'ZIL', // 질리카 'STORM', // 스톰 'QTUM', // 퀀텀 'ONT', // 온톨로지 'GRS', // 그로스톨코인 'NEO', // 네오 'SNT', // 스테이터스네트워크토큰 'XLM', // 스텔라루멘 'ICX', // 아이콘 'GTO', // 기프토 'GNT', // 골렘 'POLY', // 폴리매쓰 'ETC', // 이더리움클래식 'OMG', // 오미세고 'ARDR', // 아더 'SBD', // 스팀달러 'STEEM', // 스팀 'BTG', // 비트코인골드 'XEM', // 뉴이코노미무브먼트 'LTC', // 라이트코인 'IGNIS', // 이그니스 'TIX', // 블록틱스 'EMC2', // 아인스타이늄 'SRN', // 시린토큰 'WAVES', // 웨이브 'POWR', // 파워렛져 'MER', // 머큐리 'MTL', // 메탈 'XMR', // 모네로 'STRAT', // 스트라티스 'ARK', // 아크 'ZRX', // 제로엑스 'LSK', // 리스크 'PIVX', // 피벡스 'DCR', // 디크레드 'STORJ', // 스토리지 'KMD', // 코모도 'REP', // 어거 'MCO', // 모나코 'VTC', // 버트코인 'ZEC', // 지캐시 'DASH' // 대시 ]; if(coin){ if(avail.includes(coin)){ return coin; }else{ console.log( `코인 종류는 ${avail} 중에서 택 1 바랍니다.` ); return DEF_COIN; } } return DEF_COIN; } /* * 파라미터 정보를 초기화 해준다 * @param args 외부로부터 입력받은 파라미터 */ function initParams(args) { // 초기화 args = args?args:[]; // new 처리 하므로 return 처리 해야 됨에 유의 // 1번째 : 작가 if(args.length==0){ args = []; if(STEEM_PRICE_COIN){ args.push(STEEM_PRICE_COIN); }else{ args.push(DEFAULT_PRICE_COIN); } } return args; } module.exports = (args)=>{ // 파라미터 초기화 args = initParams(args); // 입력 파라미터 유효성 검증 if(args.length!=1){ console.error('\n [경고] 파라미터 오류 : 아래 메뉴얼을 참조 바랍니다'); help('price'); return; } const MARKET = 'KRW'; // 일단 원화 마켓만 const COIN = getCoin(args); const AXIOS_CONFIG = { headers: {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'} }; // @see https://steemit.com/kr/@segyepark/api const UPBIT_URL = `https://crix-api-endpoint.upbit.com/v1/crix/candles/lines?code=CRIX.UPBIT.${MARKET}-${COIN}`; const ASCII_CONFIG = { offset: 2, // axis offset from the left (min 2) padding: ' ', // padding string for label formatting (can be overrided) height: 10, // any height you want }; let prices = []; // (STEEM) 스피너 동작 spinner = ora().start('load prices'); axios.get(UPBIT_URL, AXIOS_CONFIG) .then(result=>{ spinner.succeed('load prices - success'); let prevClosingPrice = result.data.prevClosingPrice; // 어제 종가 let tradePrice = result.data.candles.tradePrice; // 거래가 for(let candle of result.data.candles){ let tradePrice = candle.tradePrice; prices.push(tradePrice); } prices.reverse(); let now = result.data.candles[0].candleDateTimeKst.replace('T', ' ').replace('+09:00', ''); console.log( `오늘의 ${COIN} 가격 흐름` ); console.log( `(${now} 기준) 현재 가격 : ${prices[prices.length-1]}` ); console.log( asciichart.plot(prices, ASCII_CONFIG) ); }) .catch(e=>{ spinner.succeed('load prices - fail'); console.log(e); }); };