스팀 앱 개발기 #59 - 태그별 포스트 리스트를 구하기 위한 bridge.get_ranked_posts API
시작하며...
태그 화면을 구현하기 위한 기나긴 여정이 진행 중입니다. 오늘은 bridge.get_ranked_posts API에 대한 내용을 정리합니다.
API URL
- https://api.steemit.com
- 또는 다른 RPC 노드 URL
서버에 보낼 파라메터
bridge.get_ranked_posts API를 실행할 때, 서버에 보낼 JSON 데이터는 아래와 같습니다.
{
"id": 1,
"jsonrpc": "2.0",
"method": "bridge.get_ranked_posts",
"params": {
"sort": "...",
"tag": "...",
"observer": "....",
"limit": 0,
"start_author": "...",
"start_permlink": "..."
}
}
필수 파라메터
- sorted: 포스트 정렬 기준을 의미하며, 다음 중 하나 선택 가능합니다.
- trending
- hot
- created
- promoted
- payout
- payout_comments
- muted
- tag: 검색할 포스트의 태그를 지정하세요. (예: "kr")
- observer: 로그인한 계정 또는 빈 값을 지정하세요.
옵션 파라메터
- limit: 검색할 포스트의 최대 개수를 지정하세요.
첫 검색 후 이어서 포스트를 검색을 원하세요? 그러면 아래의 파라메터들을 추가로 사용하세요.
- start_author: 검색된 마지막 포스트의 계정
- start_permlink: 검색된 마지막 포스트의 permlink
서버로부터 받을 응답 자료
응답 자료의 키는 jsonrpc, result, id 3가지입니다. 그렇지만 result를 구성하는 포스트의 포맷이 복잡합니다.
{
"jsonrpc": "2.0",
"result": 검색된 포스트 배열,
"id": 0
}
result를 구성하는 포스트의 포맷
bridge.get_ranked_posts API를 실행 결과로 받은 자료를 보고 파악된 내용을 아래와 같이 정리해 봅니다. (스팀 API 문서에서는 이에 대한 설명들이 없더군요. ㅠㅠ)
{
"post_id": 포스트 번호,
"author": 저자 계정,
"permlink": 포스트 permlink,
"category": 첫 태그,
"title": 포스트 제목,
"body": 포스트 내용,
"json_metadata": {
"tags": 포스트 태그 배열,
"app": 포스트 작성시 사용 앱 (예: "nutbox/wormhole3")
},
"created": 작성일시(UTC),
"updated": 최근 업데이트 일시(UTC),
"depth": 0,
"children": 0,
"net_rshares": 164972753764,
"is_paidout": 보상 지불 되었으면 true 그렇지 않으면 false,
"payout_at": 보상 지급 일시(UTC),
"payout": 0.031,
"pending_payout_value": 미지급 보상 금액 ($ 단위),
"author_payout_value": 지급된 저자 보상 금액 ($ 단위),
"curator_payout_value": 지급된 큐레이션 보상 금액 ($ 단위),
"promoted": "0.000 SBD",
"replies": [],
"active_votes": 보팅 배열 (보팅은 voter(보팅한 계정), rshares(문자열)로 구성),
"author_reputation": 저자 계정의 명성도,
"stats": {
"hide": true or false,
"gray": true or false,
"total_votes": 보팅한 계정 수 (유효하지 않은 보팅은 제외되는 듯),
"flag_weight": 0.0
},
"beneficiaries": 보상을 나눠 가질 수혜자 배열 (수혜자: account, weight(정수. 100%면, 10000)로 구성),
"max_accepted_payout": 가능한 보상 최대값 (예: "1000000.000 SBD"),
"percent_steem_dollars": 10000,
"url": 포스트의 서브 URL (예: "/hive-139150/@ggagu/1588831319987224576"),
"blacklists": 블랙리스트 배열 (예: ["reputation-0"]),
"community": 포스트가 속한 커뮤니티의 태그 (예: "hive-139150"),
"community_title": 포스트가 속한 커뮤니티 이름(예: "PIRCOIN · 해적 코인"),
"author_role": 커뮤니티에서 저자의 역할 (예: "guest"),
"author_title": 커뮤니티에서 저자의 별칭 (예: "깨굴깨굴 깨구리 노래를 한다~")
}
포스트 예
이 API로 검색된 포스트들 중 드기 형님의 포스트를 예로 보여 드립니다.

마치며...
오늘은 bridge.get_ranked_posts API에 대하여 설명하였습니다. 포스트의 JSON 포맷을 분석하느라 시간이 조금 걸렸네요. 내일은 이를 기반으로 요청, 응답 데이터 클래스를 정의할 예정입니다.
느리지만 진도를 조금씩 나가고 있다는 점에 의미를 두고 있습니다.
지난 스팀 앱 개발기
- #58 - 포스트 리스트를 구성할 항목의 레이아웃 (3) 데이터 클래스 정의 및 데이터 바인딩 적용
- #57 - 포스트 리스트를 구성할 항목의 레이아웃 (2)
- #56 - 포스트 리스트를 구성할 항목의 레이아웃
- #55 - .gitignore 파일 작성
- #54 - RxJava 관련 메모리 누수 방지 코드 작성
- #53 - 버그 수정: 인터넷 미연결시 API 실행하면 앱 강제 종료
- #52 - 인터넷 미연결시 API 실행하면 어떻게 될까?
- #51 - 파워다운 끝났으나 SP to power down 값이 0이 아닌 버그
- #50 - get_state API 쓸까? 말까?
- #49 - get_state API 시험해 보기
- #48 - 스팀 파워 값이 스팀잇 사이트와 다른 문제 분석
- #47 - 스팀 파워 값이 스팀잇 사이트와 다른 문제
- #46 - 다음 개발 아이템들
- #45 - 지갑 화면에서 다음 파워 다운 시간 보여주기
- #44 - 지갑 화면에 파워 다운 내용 보여주기
- #43 - 지갑 화면에서 VEST 값을 SP로 변환
- #42 - VEST를 SP로 변환하는 메소드
- #41 - 작성중...
- #40 - UTC 시간을 로컬 시간으로 바꾸는 코드 만들기
- #39 - condenser_api.get_dynamic_global_properties API 실행에 필요한 데이터 클래스 추가
- #38 - 지갑 화면 구현: 예금 보여주기 추가
- #37 - 지갑 화면 구현: WalletViewModel과 WalletFragment를 바인딩
- #36 - 유닛 테스트로 구현한 WalletViewModelTest 클래스에서 공통 부분 추출하여 CommonPartOfViewModelTest 클래스 만들기
- #35 - 유닛 테스트용 WalletViewModelTest 클래스 구현 후 보이는 문제점
- #34 - WalletViewModel 클래스에 스팀 지갑 정보 읽는 코드 작성
- #33 - 추가 리팩토링: 데이터 모듈의 데이터 클래스의 필드들에 nullable 적용
- #32 - 리팩토링: 데이터 클래스 이름 변경
- #31 - 도메인 모듈에서 정의하는 데이터 클래스들이 DTO 패턴을 따르는 것이 맞는가?
- #30 - 진도를 더 나가기 전에 리팩토링 고려 중
- #29 - 뷰모델, Repository 패턴 그리고 Use Case 패턴의 관계
- #28 - Use Case 패턴 적용
- #27 - Repository 패턴 적용
- #26 - condenser_api.get_accounts API로 받은 계정 자료를 SteemitWalletDTO 타입으로 변환하기
- #25 - SteemClient, SteemService 잘 작동하는지 유닛 테스트
- #24 - API 실행을 담당할 SteemService 인터페이스 정의
- #23 - condenser_api.get_accounts API 연동에 필요한 데이터 클래스 정의
- #22 - API 연동에 필요한 라이브러리 추가
- #21 - 사용자 지갑 정보를 담을 SteemitWallet 클래스 정의
- #20 - 클린 아키텍처를 위한 모듈 구성 (2)
- #19 - 클린 아키텍처를 위한 모듈 구성 (1)
- #18 - VEST로부터 STEEM POWER를 계산하는 방법
- #17 - VEST를 STEEM POWER로 변환하기 위해 필요한 get_dynamic_global_properties API
- #16 - 지갑 내용을 읽기 위해 필요한 API
- #15 - 지갑 서브화면(WalletFragment) 레이아웃 구성해 보기
- #14 - 지갑 서브화면(WalletFragment)에서 계정 인식하기
- #13 - 프로파일 서브화면(ProfileFragment)에서 계정 인식하기
- #12 - 태그 서브화면에서 태그 인식하기
- #11 - 검색 레이아웃을 메인 화면에 적용
- #10 - 태그 및 계정 검색 레이아웃 만들기
- #9 - BaseActivity 클래스 정의 그리고 MainActivity 클래스에 적용
- #8 - BaseFragment 클래스 정의 그리고 기존 프래그먼트들에 적용
- #7 - ProfileFragment 그리고 WalletFragment에 데이터 바인딩 적용
- #6 - 태그별 검색 내용을 보여줄 TagsFragment에 데이터 바인딩 적용
- #5 - GitHub에 소스 올리기
- #4 - 하단 내비게이션의 탭 관련 클래스 이름 수정
- #3 - 하단 내비게이션 바의 아이콘, 텍스트 수정
- #2 - 프로젝트 생성
- #1 - 시작하며...
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.