[nodejs] steem-js 댓글 정보 읽어들이기 활용

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@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 이 댓글 단 항목 출력

![스크린샷 2018-04-10 오후 12.39.07.png](https://steemitimages.com/DQmXYdRiLLuQTSb6sEVo8RK2Nu5HBBMrj5w6WkZvk1brDGi/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202018-04-10%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2012.39.07.png)

( *결과물 : 어제 보팅 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);
});
```
👍 , , , , , , , , , , , , , , , , , , , ,