steemkr
Version:
스팀잇 기반 CLI 툴 : CLI(Command Line Interface) Tool for steemit.
126 lines (101 loc) • 4.12 kB
JavaScript
const help = require('./help');
const {getLocalTime} = require('../util/wdate');
const steem = require('steem');
const ora = require('ora');
const dateFormat = require('dateformat');
const RELOAD_SEC = 10;
const RELOAD_LIMIT = 20;
const RELOAD_BODY_TRUNC = 0;
const RELOAD_BODY_CUT = 200;
const DEFAULT_TAG = 'kr'
// 기본값
const STEEM_TAG = process.env.STEEM_TAG;
let max_load_idx = 0;
function loadContentsByTag(tag) {
const LOAD_QUERY = {
tag: tag.toLowerCase(),
limit: RELOAD_LIMIT, // 20개씩 읽어들여도 충분할 듯 - min 1 ~ max 100
truncate_body: RELOAD_BODY_TRUNC // 0으로 설정하면 컨텐츠 전체를 가져온다
};
let spinner = ora().start(`now loading [ ${tag} ] contents ...`);
steem.api.getDiscussionsByCreatedAsync(LOAD_QUERY)
.then(results => {
// 결과 idx 역순 정렬
results.sort((a,b)=>getLocalTime(a.created).getTime()-getLocalTime(b.created).getTime());
let output = [];
for (let result of results) {
if (result.id > max_load_idx) {
// 결과 추가
// @@로 시작하는 수정글을 추가하지 않음 - 아마 comment 쪽으로 들어갈 것임.
output.push(result);
}
// idx 업데이트
max_load_idx = Math.max(max_load_idx, result.id);
}
if(output.length==0){
spinner.succeed(`loaded [ ${tag} ] nothing at ${dateFormat(new Date(),'mm/dd HH:MM:ss')}`);
}else{
spinner.succeed(`loaded [ ${tag} ] ${output.length} contents at ${dateFormat(new Date(),'mm/dd HH:MM:ss')}`);
}
// 결과 출력
for(let p of output){
let d = getLocalTime(p.created);
let tags = [];
try{
let _json = JSON.parse(p.json_metadata);
tags = _json.tags;
}catch(e){tags=[];}
console.log();
console.log(`■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■`);
console.log(`⚡️ 제목 : ${p.title}`);
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,RELOAD_BODY_CUT));
console.log();
}
// RELOAD CONTENTS
setTimeout(() => {
loadContentsByTag(tag);
}, 1000 * RELOAD_SEC);
})
.catch(e => {
// 오류 발생 시 컨텐츠를 다시 읽어 들인다.
spinner.fail(`load fail reload contents at ${dateFormat(new Date(),'mm/dd HH:MM:ss')} - ${e.toString()}`);
// RELOAD CONTENTS
setTimeout(() => {
loadContentsByTag(tag);
}, 1000 * RELOAD_SEC);
});
}
/*
* 파라미터 정보를 초기화 해준다
* @param args 외부로부터 입력받은 파라미터
*/
function initParams(args)
{
// 초기화
args = args?args:[]; // new 처리 하므로 return 처리 해야 됨에 유의
// 1번째 : 태그
if(args.length==0){
if(STEEM_TAG){
args.push(STEEM_TAG);
}else{
args.push(DEFAULT_TAG);
}
}
return args;
}
module.exports = (args)=>{
// 파라미터 초기화
args = initParams(args);
// 입력 파라미터 유효성 검증
if(args.length!=1){
console.error('\n [경고] 파라미터 오류 : 아래 메뉴얼을 참조 바랍니다');
help('taglive');
return;
}
let tag = args[0];
loadContentsByTag(tag);
};