스팀잇 글목록 만들기(Blog List with GoogleSheet)

in #dclick6 years ago (edited)

도즈언~!!

@sintai님의 하... 스팀잇 진짜... 이런 치명적인... -ㅅ-ㅋㅋㅋㅋ의 글을 읽고 스팀잇에서 과거글을 보여줄때 갯수의 제한이 있다는 사실을 알게되었다. 물론 글 자체가 없어지는 것은 아니고, busy.org나 steemit.com을 통해 접속할 때 볼 수 있는 글의 갯수 제한이다. 개인적으로는 기록 자체에 목적을 가지고 스팀잇을 이용하고 있는 중이라 이런 단점은 매우 크게 느껴졌다.

역시 스팀잇~!! 하고 생각하던 중..아래 글들을 읽어보게되었다.

@anpigon님의 플러터(Flutter) 모바일 앱 개발 - 스팀잇 피드 구현하기
@dorian-lee님의 도리안의 스팀잇 개발 이야기 #0 - Postman으로 스팀잇 API 사용해보기

스팀API라는 걸 이용해보면 뭔가 되지 않을까? 하는 생각에 안피곤님께 조언을 구해보니, @wonsama님의 [gs] 구글스프레드 시트의 UrlFetchApp 활용을 읽어보라 해주셨다.

개발자분들에게 API를 이용하여 스팀잇 글목록을 만드는 일은, 워런버핏이 주식시장에서 돈 버는 일 만큼 쉬운 일일지도 모른다. 하지만 보통사람들에게 주식시장에서 돈을 버는 일은 만만한 과제가 아니다. 비록 열심히 데이터를 찾아 백테스트를 수행한다고 해도 말이다.

현황과 과제

현재 스팀잇 API를 이용하여 조회할 수 있는 자료는 API에 따라 100~500개 수준이다. @sintai님이 댓글에 언급하셨던 500은 API 조회 제한숫자와 일치한다.
image.png

따라서 목표는 500개 이상의 글을 쓴 경우에도 모든 리스트를 조회 가능하도록 하는 것이다. 조회는 web, app 또는 엑셀과 같은 기존 프로그램에서 할 수 있을 것인데, 이중 다룰 수 있는 것이 기존프로그램으로 한정되어 있으므로 공유가 편한 구글스프레드시트를 선택하였다.

자료수집

스팀API : https://developers.steem.io/apidefinitions/ (스팀API공식사이트)
Postman : https://www.getpostman.com/apps (API작동 test)
구글스크립트(UrlFetchApp) : https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch (구글시트에서 API활용)
기타 : https://steemit.com/kr-dev/@cancerdoctor/steem-api

코드

코드의 흐름은 @wonsama님의 자료를 준용하였다. 즉, 먼저 자료를 조회하여 가져온 후, 이를 구글시트에 표시해준다. 자료를 조회할때 제한사항이 걸려있으므로 여러번 반복조회하여, 이를 변수에 쌓아준다. 반복조회를 위해서 condenser_api.get_discussions_by_author_before_date를 이용하였다. 해당 함수(메쏘드라고 부르나요?)는 100개의 조회 제한이 걸려있으므로 100개씩 나누어 조회 한다.

/** 
* @OnlyCurrentDoc 
*/

start = 0;

function get_bloglist(name) {
  var bloglist = {"date":[], "title":[], "link":[]};
  var url = "https://api.steemit.com";
  var data = {"jsonrpc":"2.0", "method":"condenser_api.get_discussions_by_author_before_date", "params":[String(name),"","1970-01-01T00:00:00",100], "id":1};
  var options = {'method' : 'post','contentType': 'application/json', 'payload' : JSON.stringify(data)};
  var json = {"result":[]};

  do{
    if (json.result.length == 100){
      data.params[1] = String(json.result[99].permlink);
      options = {'method' : 'post','contentType': 'application/json', 'payload' : JSON.stringify(data)};
    }
    var res = UrlFetchApp.fetch(url,options);
    var json = JSON.parse(res);
    for (var i = start;i<json.result.length;i++){
      bloglist["date"].push(json.result[i].created);
      bloglist["title"].push(json.result[i].title);
      bloglist["link"].push("https://steemit.com/"+"@"+json.result[i].author+"/"+json.result[i].permlink);
    }
    start = 1;
  } while(json.result.length==100)
  
  return bloglist
}

function get_data() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.deleteRows(4, sheet.getLastRow()-4);
  var id = sheet.getRange("B1").getValue();
  var blog = get_bloglist(id);
  for (var i = 1;i <= blog.date.length; i++){
    j = i + 3;
    k = (i - 1).toFixed(0);
    sheet.getRange("A"+j).setValue(i);
    sheet.getRange("B"+j).setValue(blog.date[k]);
    sheet.getRange("C"+j).setValue(blog.title[k]);
    sheet.getRange("D"+j).setValue(blog.link[k]);
  }
  
}

코드 작성도중 겪은 어려움. (1) 구글시트에서 param이 있는 경우, UrlFetch를 하는 방식을 몰랐음. (2) 과거 전체 자료 조회를 위해 사용할 수 있는 API 함수 선택, (3) API 사용법, (4) 스크립트에서 에러를 잡는 방법, (5) 에러는 없으나 변수명 오타로 인해 반복수행이 되지 않음..ㅠㅠ

실행결과

문제제기를 하신 @sintai님의 글을 조회해봅니다.
image.png
559개의 글이 조회 됩니다.

결과파일

author옆에 아이디를 넣고 조회하시면 됩니다.
https://docs.google.com/spreadsheets/d/1IH8iy6navvTZa4BIuEPIIww_QuJpBZgnErSO-GWBqyY/edit?usp=sharing

느낀점

개발자님들 존경합니다.


Sponsored ( Powered by dclick )
오묘한 조화, 추어탕과 순대!

메인 사진은 순대이지만, 사실 오늘 소개할 음식은 추어탕입니다ㅎㅎ 최근 과도한 업무때문에 연일...

logo

이 글은 스팀 기반 광고 플랫폼
dclick 에 의해 작성 되었습니다.

Sort:  

햐 대박이네요. 존경스럽습니다. 오히려 제가 배워야할것 같습니다.

감사합니다. 올려주시는 글들 보면서 많이 배우고 있습니다~^^
늘 좋은 글 감사드립니다~!

캬~! 완전 멋져용~!
블루엔젤 댓글로 시스템이 버티는지 테스트 해보셔용~ㅋ

디클릭 클릭 함께 응원합니당~!
행복한 불금 보내셔용~^^

Posted using Partiko Android

bluengel님꺼 댓글 돌리면 컴퓨터 멈출 것 같은데요 ㅎㅎ
TGIF~!!

ㅋㅋㅋㅋㅋㅋㅋㅋ

Posted using Partiko Android

어려워 어려워~~
I like this blog, so I clicked AD upper~~

감사합니다~ㅎ

재밌는걸 많이 만들고 계시네요.

솔직히 파이썬 완전 일반인에겐 설치부터가 문제가 될수가 있는데 colab이 그런부분을 상당수해결해주는듯.

구글은 유용한 것들을 잘 만들어 내는것 같습니다. 네이버 다음도 분발했으면 좋겠네요~^^

우와 아직 500개가 될때까지는 한참남았지만 불러들이는 글이 500개인지 몰랐어요 ㅎㅎㅎ 저장했다가 10년후(?)에 사용하는걸로 ㅋㅋㅋ 감사해요

10년후엔 스팀잇이 이렇진 않겠죠 ㅎㅎㅎ 그전에 모아서 책이라도 내셔야 하는거 아닌가요? ㅎㅎ

Hi @thrufore!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 1.644 which ranks you at #33433 across all Steem accounts.
Your rank has improved 728 places in the last three days (old rank 34161).

In our last Algorithmic Curation Round, consisting of 241 contributions, your post is ranked at #177.

Evaluation of your UA score:
  • Only a few people are following you, try to convince more people with good work.
  • The readers like your work!
  • You have already shown user engagement, try to improve it further.

Feel free to join our @steem-ua Discord server

Coin Marketplace

STEEM 0.17
TRX 0.13
JST 0.029
BTC 56087.39
ETH 2965.10
USDT 1.00
SBD 2.15