此为历史版本和 IPFS 入口查阅区,回到作品页
Polk
IPFS 指纹 这是什么

作品指纹

steem自动投票开发-2.获取文章列表

Polk
·

上篇文章写了如何获取用户的投票能量,这是自动投票的基础。那么下一个功能就要实现获取文章列表,要想自动投票,首先肯定一页页的获取文章,对吧?这就跟你自己去投票是一样的步骤。

当点击上图的链接后,页面上就显示我订阅的论坛,我只订阅了中文区啦。点击链接前先打开浏览器的开发者工具,一般都是按一下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;
}


CC BY-NC-ND 2.0 授权