steem自动投票开发-2.获取文章列表
上篇文章写了如何获取用户的投票能量,这是自动投票的基础。那么下一个功能就要实现获取文章列表,要想自动投票,首先肯定一页页的获取文章,对吧?这就跟你自己去投票是一样的步骤。
当点击上图的链接后,页面上就显示我订阅的论坛,我只订阅了中文区啦。点击链接前先打开浏览器的开发者工具,一般都是按一下F12,浏览器底部就会出现点击链接对应的http请求以及响应。下图就是我截取的,请求内容是什么,返回了20篇文章,都很清晰。
上图返回的只是第一页,我们在浏览文章的时候,一直往下滑,就会继续请求下一页的内容,所以再看一下请求第二页的请求是怎样的。首先limit:20就代表每页返回20篇文章,再看start_permlink:"2-0",这就是对应上一页最后一篇文章,上面那个图最后那条数据就是。
分析到这里,就已经可以实现这个获取文章的功能了,其实写代码第一步就是分析,我们平常工作也是这样,拿到客户的需求,就是分析讨论清楚,真正写代码的时候其实并不多。下面就是使用java语言实现获取文章,代码一开始就是拼装http的请求体,上面截图里面是怎样的,代码就是把图片里的内容实现,获取到http返回后,自己再封装一下方便后面的使用。
public List<HiveArticle> getRankedPosts(String startPermlink, String startAuthor){ List<HiveArticle> result = new ArrayList<>(); JSONObject req = new JSONObject(); req.put("id", 0); req.put("jsonrpc", "2.0"); req.put("method", "bridge.get_ranked_posts"); JSONObject params = new JSONObject(); params.put("sort","created"); params.put("start_author", ""); if(StringUtils.isNotEmpty(startPermlink)){ params.put("start_permlink", startPermlink); params.put("start_author", startAuthor); } params.put("limit", 20); params.put("tag", "my"); //没有my就是全网 //params.put("tag", ""); params.put("observer", "polkallen"); req.put("params", params); String response = null; if(this.isProx){ response = HttpProxyUtil.postProxy(baseUrl, this.initPageHeader(), req.toJSONString()); }else{ response = HttpUtil.post(baseUrl, this.initPageHeader(), req.toJSONString()); } //System.out.println(response); if(StringUtils.isNotEmpty(response) && !response.contains("</html>")){ JSONObject jsonObject = JSON.parseObject(response); if(jsonObject.containsKey("result")){ JSONArray result1 = jsonObject.getJSONArray("result"); Date d = new Date(); for(int i=0;i<result1.size();i++){ JSONObject jsonObject1 = result1.getJSONObject(i); HiveArticle article = new HiveArticle(); article.setAuthor(jsonObject1.getString("author")); article.setCreated(DateUtil.getUtc8(jsonObject1.getString("created"), MatterContant.YYYY_MM_DD_HH_MM_SS)); article.setId(BigInteger.valueOf(idWorker.nextLong())); article.setCreateDate(d); article.setPayout(jsonObject1.getBigDecimal("payout")); article.setCommentCount(jsonObject1.getInteger("children")); article.setPermlink(jsonObject1.getString("permlink")); article.setPlatform(MatterContant.PLATFORM_ENUM.STEEMIT.getCode()); article.setPostId(jsonObject1.getBigInteger("post_id")); article.setTitle(jsonObject1.getString("title")); article.setUpdateDate(d); article.setCommunity(jsonObject1.getString("community")); result.add(article); } } } return result; }