[nodejs] steem-js 댓글 정보 읽어들이기 활용
kr·@wonsama·
0.000 HBD[nodejs] steem-js 댓글 정보 읽어들이기 활용
안녕하세요 @wonsama 입니다. 오늘은 제가 이전에 만든 autovot의 문제점을 해결하고자 추가적으로 개발한 부분을 공유하고자 합니다. autovot은 뉴비로 탐지되는 분들에게 보팅을 해주는 프로그램 입니다. * 제목에서 한글이 포함된 단어만 * 제목에서 특정 단어 필터링 ( 보팅, 이벤트, 가상화폐 등 ) * 특정 사용자 제외 ( kr-guide 신고 당한 글 등 ) * 보팅 회수가 0~5회 * 보상금액 약 0.1$ 이하 ( 스달 시세와 연동 되어 차이날 수 있음 ) * 팔로워 1000명 이하 위 조건에 해당하면 보팅을 해주는데 ... kr-guide 에 걸린 글들은 판별하기가 쉽지 않죠 ... 그래서 선보팅 이후 보팅 대상 목록을 하나하나 참조하여 kr-guide에 걸린 대상목록의 보팅 회수 및 목록 제거를 했는데 그 자체가 쉽지 않은 일 이네요 .. 하루 72건 ( 20분단위 보팅 시 ) 그래서 만들어 봤습니다. 대략적인 흐름은 아래와 같습니다. * 보팅 목록정보 파일 로딩 * 보팅 글 목록정보 생성 - 작가(author), 영구링크(permlink) * 댓글 목록 정보 확인 krguidedog 이 댓글 단 항목 출력  ( *결과물 : 어제 보팅 72건 중 3건이 @krguidedog 계정에 탐지 되었네요... 1건 : 칭찬해(가죽공예), 3건 : 탐지 => 오탐지가 될 수 있기 때문에 일단은 필터링 된 대상은 확인이 필요한거 같아 자동 보팅 취소 코딩같은 것은 배제 하였습니다.* ) 혹시 필요하신분은 참조바랍니다. ^^; #### 관련 소스 : analysis.js ``` const dateFormat = require('dateformat'); const steem = require('steem'); const fs = require('fs'); const YESTERDAY = new Date(new Date().setDate(new Date().getDate()-1)); const FMT_DATE = dateFormat(new Date(YESTERDAY), "yymmdd"); const path = `./data/votebot_${FMT_DATE}.txt`; // 보팅 목록 정보가 담긴 파일을 읽어들인다. const plaintext = fs.readFileSync( path, 'utf-8'); // 댓글 정보를 읽어들인다. // post : 포스팅 정보 let getContentReplies = (post)=>{ return new Promise( (resolve, reject) => { steem.api.getContentReplies( post.author, post.permlink, function(err, result) { if(err!=undefined){ reject(err); }else{ resolve(result); } }); }); }; // 읽어들인 파일에서 author/permlink 정보를 추출하여 목록으로 만든다. let lines = plaintext.split('\n'); let promiseArr = []; for(let line of lines){ // 맨 마지막은 값이 없음 if(line.trim()=='') break; // 값 파싱처리 let url = line.split('\|')[4].trim(); let idxAt = url.indexOf('@'); let u = url.substring(idxAt+1); let idxU = u.indexOf('\/'); // 항목 정보를 넣어준다 promiseArr.push(getContentReplies({ author : u.substring(0,idxU), permlink : u.substring(idxU+1) })); } // 댓글에서 krguidedog이 작성한 댓글이 있는지 여부를 판단한다. let FIND_AUTHOR = 'krguidedog'; Promise.all(promiseArr).then(results=>{ for(result of results){ for(r of result){ if(r.author == FIND_AUTHOR){ let root_author = r.root_author; let root_permlink = r.root_permlink; console.log(r.root_title); console.log(`https://steemit.com/@${root_author}/${root_permlink}`); break; } } } }).catch(e=>{ console.log(e); }); ```