[node.js 스팀봇 강좌] #8. 포스팅 조회 결과에서 필요한 정보 추출하기

in #kr7 years ago

지난 연재

[node.js 스팀봇 강좌] #1. steem.js 라이브러리 이용하기
[node.js 스팀봇 강좌] #2. steem.js를 이용해서 보팅해보기
[node.js 스팀봇 강좌] #3. steem.js를 이용해서 포스팅 올리기
[node.js 스팀봇 강좌] #4. 인증키 등의 정보를 외부 파일에 저장하기
[node.js 스팀봇 강좌] #5. steem.js를 이용하여 댓글 달기
[node.js 스팀봇 강좌] #6. steem.js를 이용하여 송금하기
[node.js 스팀봇 강좌] #7. steem.js를 이용하여 포스팅 조회하기


지난번 연재에서는 태그별 또는 저자별로 포스팅 정보를 조회하는 방법에 대해서 알아보았고, 이번에는 이렇게 조회한 결과에서 필요한 정보를 가져오는 방법을 javascript 문법을 통해 알아보겠습니다.

한번의 함수 호출로 여러개의 포스팅을 조회할 수 있는데, 이렇게 조회된 결과 하나하나가 json {} 의 형태로 배열[]에 저장되어 회신됩니다. 즉 이런 구조가 되는 거죠.

[{첫번째 포스팅 정보}. {두번째 포스팅 정보} ... ]

실제로 스팀잇에 게시된 포스팅 한 건에 대한 결과는 다음과 같습니다.

하나의 포스팅 정보에도 수많은 정보가 포함되어 있는데, 항목명이나 저장된 데이터를 보면 어느정도 무슨 정보인지 추정이 가능합니다.

봇을 만들 경우에 주로 활용되는 정보는 댓글이나 보팅을 위한 permlink 정보와, 제목이나 본문 탐색을 위한 title, body 정도가 될 것 같습니다.

[ { id: 11656970,
    author: 'minari',
    permlink: '2017-09-01',
    category: 'kr',
    parent_author: '',
    parent_permlink: 'kr',
    title: '제목입니다...생략...',
    body: '본문내용입니다....생략...',
    json_metadata: '{"tags":["kr","kr-daily"], ...생략...}',
    last_update: '2017-09-01T11:04:45',
    created: '2017-09-01T11:04:45',
    active: '2017-09-01T11:14:12',
    last_payout: '1970-01-01T00:00:00',
    depth: 0,
    children: 1,
    net_rshares: '7465314285',
    abs_rshares: '7465314285',
    vote_rshares: '7465314285',
    children_abs_rshares: '7465314285',
    cashout_time: '2017-09-08T11:04:45',
    max_cashout_time: '1969-12-31T23:59:59',
    total_vote_weight: 89723,
    reward_weight: 10000,
    total_payout_value: '0.000 SBD',
    curator_payout_value: '0.000 SBD',
    author_rewards: 0,
    net_votes: 13,
    root_comment: 11656970,
    max_accepted_payout: '1000000.000 SBD',
    percent_steem_dollars: 10000,
    allow_replies: true,
    allow_votes: true,
    allow_curation_rewards: true,
    beneficiaries: [],
    url: '/kr/@minari/2017-09-01',
    root_title: '제목입니다...생략...',
    pending_payout_value: '0.030 SBD',
    total_pending_payout_value: '0.000 STEEM',
    active_votes: 
     [ [Object],[Object],[Object] ...생략... ],
    replies: [],
    author_reputation: '7518608187247',
    promoted: '0.000 SBD',
    body_length: 0,
    reblogged_by: [] } ]

그리고 active_votes 항목과 같이 json으로 구성된 하나의 포스팅 정보 안에도 다시 배열[]로 표시되어 있는 정보가 있는데 javascript의 console.log 함수로는 한단계 더 깊이 있는 배열의 항목은 표시하지 않는 것 같습니다.

[Object]로 표시되어 있는 항목을 추가로 꺼내보면 다음과 같습니다. 보시면 아시겠지만 보팅을 누가(voter), 얼만큼의 비중으로(percent) 수행하여, 얼만큼의 보상(weight, rshares)에 기여했는지 저장되어 있습니다.

active_votes 항목을 활용하여 한번 보팅한 글에는 다시 보팅 하지 않는 조건을 넣을 수도 있겠네요.

[ { voter: 'nupertop',
    weight: 491,
    rshares: 149261486,
    percent: 10000,
    reputation: 0,
    time: '2017-09-01T11:21:36' },  ...생략... ]

javascript의 배열과 json의 처리방식에 대해 잠시 살펴보자면 다음과 같습니다.

arr = ['a', 'b', 'c', 'd'] 와 같이 arr변수에 a부터 d까지 4개의 항목이 저장되어 있다면 다음과 같이 이용할 수 있습니다.

  • 배열의 항목 갯수: arr.length => 4 반환
  • 배열의 첫번째 항목: arr[0] => 'a' 반환

json은 [네 번째 강좌]](https://steemit.com/kr-dev/@minari/node-js-4)에서 언급한 바와 같이 {키1:정보1, 키2:정보2, ...}로 정의되어 있는 data 변수가 있다면 다음과 같이 이용할 수 있습니다.

  • 키1의 정보: data['키1'] => 정보1 반환 또는
  • 키1의 정보: data.키1 => 정보1 반환

지난 #7강좌와 오늘 설명한 부분을 합쳐서 최근 5개의 글의 제목과 보상을 조회해 보도록 하겠습니다.

1단계: 소스코드

2단계: 실행결과 로그

오늘 진행한 부분은 활용도가 높고 스팀봇을 만든다고 할 경우에 중요한 요소가 많이 들어있는 부분입니다. 한번 따라해보시고, 다른 항목의 정보도 추출해 보시기를 추천드립니다.

Sort:  

Great. Thanks for sharing. I'm starting to follow you.

안녕하세요. 글 너무 감사드리구요. 만약에 busy.org에 로그인해서 글을 올리면
글에 busy로 표시가 되는데 혹시 client id 값 항목은 어떤거인지 알수 있을까요?
제가 busy.org 처럼 특정 사이트에서 글을 올리면 보상을 해주는 프로그램을 만들려고 생각중이거든요
client.jpeg

Coin Marketplace

STEEM 0.20
TRX 0.15
JST 0.029
BTC 63706.08
ETH 2615.50
USDT 1.00
SBD 2.82