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

in #dclick6 years ago (edited)

도즈언~!!

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

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

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

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

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

현황과 과제


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

따라서 목표는 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) 에러는 없으나 변수명 오타로 인해 반복수행이 되지 않음..ㅠㅠ

실행결과


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

결과파일

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 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).Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!

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