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

in #kr6 years ago

안녕하세요 @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

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

steem.api.getContentReplies()함수를 한번 돌려봐야겠네요.
함수 하나씩 전 지금 정리해 가고 있네요.
이렇게 예제로 나온걸 보면 참 좋아합니다.
머리속에서 컴파일하기 쉽고 컴파일 되면 다양한 상상력이 떠오르거든요.
아무튼 좋은 정보 감사합니다.

네 저도 틈날때마다 정리하고 있고 나중에 정리 되면
readthedocs.io 에서 메뉴얼로 따로 만들려고여 ^^

steem.api.getAccountHistory()함수로도 별로 필터를 사용하면 해당 아디에 대한 댓글도 추출이 가능하네요.
보팅, 댓글, 거래내역등 모든 정보를 조회할 수 있네요. 거래내역정보를 memo를 읽는 방법을 찾다가 보니깐 필터로 원하는 구분내역만 추출할 수 있네요.

감사합니다 ^^ / 어서 시간 될 때 전체 api 목록 테스트를 해보고 알맞는 활용 방법을 찾아봐야 될텐데 ㅜㅜ

점점 완성되어가고 있군요
좋은 개발
@칭찬해

감사합니다 ^^

시크한 @wonsama님 안녕하세요! 개수습 입니다. 짱재밌는 @smigol님 소개로 왔어요. 칭찬이 아주 자자 하시더라구요!! 감동적인 글 올려주신것 너무 감사해요. 작은 선물로 0.4 SBD를 보내드립니다 ^^

우와~대단하세요^^

감사합니다 ^^

짱짱맨 출석부에 정말필요했던겁니다. 물론 제 보팅파워는 엄청나게 작지만 프로그램이 완성되면 자주이용하겠습니다. 감사합니다 개발자님 퐈이팅

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.028
BTC 56714.19
ETH 2341.70
USDT 1.00
SBD 2.37