[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);
});
steem.api.getContentReplies()함수를 한번 돌려봐야겠네요.
함수 하나씩 전 지금 정리해 가고 있네요.
이렇게 예제로 나온걸 보면 참 좋아합니다.
머리속에서 컴파일하기 쉽고 컴파일 되면 다양한 상상력이 떠오르거든요.
아무튼 좋은 정보 감사합니다.
네 저도 틈날때마다 정리하고 있고 나중에 정리 되면
readthedocs.io 에서 메뉴얼로 따로 만들려고여 ^^
steem.api.getAccountHistory()함수로도 별로 필터를 사용하면 해당 아디에 대한 댓글도 추출이 가능하네요.
보팅, 댓글, 거래내역등 모든 정보를 조회할 수 있네요. 거래내역정보를 memo를 읽는 방법을 찾다가 보니깐 필터로 원하는 구분내역만 추출할 수 있네요.
감사합니다 ^^ / 어서 시간 될 때 전체 api 목록 테스트를 해보고 알맞는 활용 방법을 찾아봐야 될텐데 ㅜㅜ
점점 완성되어가고 있군요
좋은 개발
@칭찬해
감사합니다 ^^
우와~대단하세요^^
감사합니다 ^^
짱짱맨 출석부에 정말필요했던겁니다. 물론 제 보팅파워는 엄청나게 작지만 프로그램이 완성되면 자주이용하겠습니다. 감사합니다 개발자님 퐈이팅