用steemjs嵌套的读取文章的所有评论
在上一篇文章如何用steemjs读取文章的评论 — Steemit中,和大家介绍了如何用SteemJs来读取评论,但并不完整。当时也提出了只读取了第一层的评论,如何读取所有评论呢?这里就给大家介绍一下:
1、blockchain的数据结构
这里当然不会详细讲,我也不太清楚。但从读取评论时我就发现了,其实在blockchain中评论和文章差别非常小,你可以把评论写的比文章都复杂。我们在这里用节点来表示,你可以把节点想象成一块数据,里面存储的都是文字。
多数节点都是有子有父的,我们可以通过父节点来查找他的子节点,正如如何用steemjs读取文章的评论 — Steemit中所说的那样,用steem.api.getContentReplies(author, permlink, callback)
这个函数就可以。
如果一个节点没有父节点,那么这个节点保存的内容就是传统意义上的文章,如果一个文章有父节点,那么这个节点保存的就是传统意义上的评论。如果明白了这一点,那些递归的查询所有评论就非常容易了。
2、递归查询代码
还是老规矩,我也将代码发到SteemJsExamples/readNestedComments.html at master · RileyGe/SteemJsExamples上了,有兴趣可以自己翻看。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="https://cdn.steemjs.com/lib/latest/steem.min.js"></script> <script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script> <script> var localDiscussion = null; var index = -1; $(document).ready(function () { //steem.api.setWebSocket("wss://steemd.minnowsupportproject.org"); steem.api.setWebSocket("wss://steemd.steemitstage.com"); $("#btnGetComments").click(function () { var author = $("#txtAuthor").val(); var permlink = $("#postLink").val(); //console.log(permlink); steem.api.getContentReplies(author, permlink, contentRepliesCB); }); }); function contentRepliesCB(err, result) { //console.log(err, result); if (!err) { //$("#resultsTable").empty(); for (i = 0; i <= result.length - 1; i++) { //console.log(result[i]); var commentAuthor = result[i].author; $("#resultsTable").append(commentAuthor); $("#resultsTable").append(" says: "); var commentContent = result[i].body; $("#resultsTable").append(commentContent); $("#resultsTable").append("<br />"); var childrenNo = result[i].children; if(childrenNo > 0) { var commentLink = result[i].permlink; steem.api.getContentReplies(commentAuthor, commentLink, contentRepliesCB); } } } else { alert(err);} } </script> </head> <body> <hr /> <div class="expandablerVotes"> <div> Author <input type="text" id="txtAuthor" style="width: 150px;" value="rileyge" /> ?? Post Link <input type="text" id="postLink" style="width: 150px;" value="or-i-am-an-ailurophile" /> ?? <input id="btnGetComments" type="button" value="Get Comments Data" /> </div> <br/> </div> <br/> <div id="resultsTable"> </div> </body> </html> |
3、代码解释
其实这段代码非常简单,相比如何用steemjs读取文章的评论 — Steemit只是把steem.api.getContentReplies(author, permlink, callback)
的回调函数独立出来。
而且在回调函数中增加了一个功能。如果读出的评论的孩子节点多于0个,则嵌套的调用steem.api.getContentReplies(author, permlink, callback)
函数把孩子节点的信息也读取出来。
简单吧,只要理解了结构,做起来就非常简单。
原创文章,文章首发于:Riley Ge (@rileyge) — Steemit
原创文章,转载请注明: 转载自TsonTec:测量解决方案提供者
本文链接地址: 用steemjs嵌套的读取文章的所有评论
说点什么