UNPKG

steemkr

Version:

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

151 lines (117 loc) 4.46 kB
const help = require('./help'); const {getLocalTime} = require ('../util/wdate'); const {error} = require ('../util/error'); const steem = require('steem'); const ora = require('ora'); const dateFormat = require('dateformat'); const RELOAD_TIME = 1000 * 10; const READ_CONTENTS_MAX = 100; const READ_COUNTS = 20; // 1 ~ 100 // 기본값 const STEEM_AUTHOR = process.env.STEEM_AUTHOR; let READ_CONTENTS = []; /* * 피드 정보를 읽어들인다 */ let loadFeed = (author, limit, showReblog=true) =>{ let timeStart = new Date(); let spinner = ora().start('reload'); steem.api.getDiscussionsByFeedAsync({tag:author, limit:limit}) .then(results=>{ let timeEnd = new Date(); let timeGap = Math.floor((timeEnd.getTime() - timeStart.getTime()) / 1000); spinner.succeed(`reload end : ${dateFormat(timeEnd, 'yyyy-mm-dd HH:MM:ss')} ( elapsed time : ${timeGap} sec )`); let PRINTS = []; for(let result of results){ // 기존에 읽어들인 컨텐츠인가를 확인 let authorperm = `${result.author}${result.permlink}`; // 고유한 링크정보 if(!READ_CONTENTS.includes(authorperm)){ // 리블로그를 보여줄지 선택 if(showReblog || result.reblogged_by.length==0){ // 읽어들인 컨텐트에 기록 READ_CONTENTS.push(authorperm); // 출력물에 저장 PRINTS.push(result); // 저장소 크기 유지 if(READ_CONTENTS.length>READ_CONTENTS_MAX){ READ_CONTENTS = READ_CONTENTS.shift(); } } } } // 시간 역순 정렬, 리블로그는 첫 리블로그 시간을 기준으로 함 PRINTS.sort((a,b)=>{ let ta = a.first_reblogged_on?getLocalTime(a.first_reblogged_on).getTime():getLocalTime(a.created).getTime(); let tb = b.first_reblogged_on?getLocalTime(b.first_reblogged_on).getTime():getLocalTime(b.created).getTime(); return ta - tb; }); // 출력 for(let p of PRINTS){ // console.log(p); let d = getLocalTime(p.created); let fr = getLocalTime(p.first_reblogged_on); let tags = []; try{ let _json = JSON.parse(p.json_metadata); tags = _json.tags; }catch(e){tags=[];} console.log(); console.log(`■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■`); console.log(`⚡️ 제목 : ${p.title}`); if( p.reblogged_by.length > 0 ){ console.log(`⚡️ 작성일 : ${dateFormat(d,'mm/dd HH:MM:ss')} 🌹 리블로그 : ${p.reblogged_by.join(", ")} (${dateFormat(fr,'mm/dd HH:MM:ss')}) ` ) ; }else{ console.log(`⚡️ 작성일 : ${dateFormat(d,'mm/dd HH:MM:ss')}` ) ; } console.log(`⚡️ 링크 : https://steemit.com/${p.category}/@${p.author}/${p.permlink}`); console.log(`⚡️ 태그 : ${tags.join(", ")}`); console.log(`■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■`); console.log(p.body.substr(0,200)); console.log(); // console.log(p) } // RELOAD_TIME 이후 다시 컨텐츠를 읽어들인다. setTimeout(()=>{loadFeed(author, limit, showReblog)}, RELOAD_TIME); }) .catch(e=>{ // 오류 발생 시 컨텐츠를 다시 읽어 들인다. spinner.fail(`load fail reload contents at ${dateFormat(new Date(),'mm/dd HH:MM:ss')} - ${e.toString()}`); // RELOAD_TIME 이후 다시 컨텐츠를 읽어들인다. setTimeout(()=>{loadFeed(author, limit, showReblog)}, RELOAD_TIME); }) } /* * 파라미터 정보를 초기화 해준다 * @param args 외부로부터 입력받은 파라미터 */ function initParams(args) { // 초기화 args = args?args:[]; // new 처리 하므로 return 처리 해야 됨에 유의 // 1번째 : 작가 if(args.length==0){ if(STEEM_AUTHOR){ args.push(STEEM_AUTHOR); } } // 2번째 : 리블로그 표시여부 if(args.length==1){ // 기본값으로 true를 설정 args.push(true); } return args; } module.exports = (args)=>{ // 파라미터 초기화 args = initParams(args); // 입력 파라미터 유효성 검증 if(args.length!=2){ console.error('\n [경고] 파라미터 오류 : 아래 메뉴얼을 참조 바랍니다'); help('feed'); return; } let author = args[0]; let showReblog = args[1]; // hidden params - default : true loadFeed( author, READ_COUNTS, showReblog ); };