BUG? 个人主页无法读取到500篇以上内容

in #steemdev6 years ago

今天想用程序看一下自己的过往文章,用到的API是get_blog,原本想着是手到擒来的问题,没想到竟然遇到了问题。


(图源 :pixabay)

get_blog API

get_blog 用起来是很简单的,它有三个参数

  • account: 带获取的用户名
  • start_entry_id: 开始blog编号
  • limit:获取条目限制

其中start_entry_id即为开始从此entry_id向前查找。

entry_id我们可以理解成我们blog中文章(以及转发)的编号,最早的文章编号为0。但是API不支持获取直接读取entry_id为0的文章,因为start_entry_id为零代表最大的文章编号,也就是最新一篇文章。

如果想获取第0篇文章,我们可以将start_entry_id设置为1,然后limit设置成2,就会读回编号为1和0的文章。

@ned 为例
获取他的最早5篇文章,指令如下:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": ["get_blog", "get_blog", ["ned", 4, 5]], "id": 1}' https://api.steemit.com

获取他的最新5篇文章,指令如下:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": ["get_blog", "get_blog", ["ned", 0, 5]], "id": 1}' https://api.steemit.com

无法读取到500篇以上内容

一切看起来没有什么问题,但是当我尝试获取我的最早期文章时,返回为空!

curl --data '{"jsonrpc": "2.0", "method": "call", "params": ["get_blog", "get_blog", ["oflyhigh", 4, 5]], "id": 1}' https://api.steemit.com

返回如下:

{'id': 1, 'jsonrpc': '2.0', 'result': []}

这是什么鬼?我首先想到难道就因为我不是创始人之一,就搞歧视吗?后来想想开源代码不会有这么变态的判断吧,一定是哪里搞错了。

于是我不断尝试,最终发现我可以获取我最近500篇文章(包含转发)。

问题所在

看了一下代码,但是限制了limit大小为500,但是这个限制的是单次读取的数目啊,我应该可以通过指定start_entry_idlimit获取任意条目才对。


上述代码中没能看出什么其它限制相关的。

于是我在想,是不是最多就只能读出500条呢?最终我找到如下代码:

uint32_t max_feed_size = 500;

以及位于follow_plugin::plugin_initialize中的这段代码

如此我们得出结论,能读出多少条目,取决于节点的max_feed_size的设置,默认情况是500条。再深奥的,比如max_feed_size 如何在 comment_operation 以及reblog_operation发生时影响对相关索引做的修改,以及最终如何影响get_blog获取的条目数,我就读不懂啦。

STEEMIT如何处理这个问题

既然我们得出结论,由于节点max_feed_size的设置,我们无法读取某个用户500篇以前的文章,那么岂不是意味着如果某个用户的文章(加转发)数目大于500,我们将无法在STEEMIT从个人博客(blog)中读到这些用户的早期文章?

拿自己的账户试了一下,果然是这样!

翻我的主页,翻到这就再也翻不动了,在这之前,我可是还有近200篇文章呢😭 所以,STEEMIT如何处理这个问题?答案是STEEMIT根本没管这个问题!

如何翻阅早期文章?

尽管通过简单的阅读代码,我们知道了这个是系统就这么设置的,算不得BUG,但是不能阅读用户早期文章终归不爽啊。

那么如何翻阅用户早期文章呢?对于总计文章+转发低于500的用户,那么直接翻就可以了。

如果用户文章大于500,就需要一些其它手段喽,比如使用STEEMSQL或者STEEMDATA数据库等,这里就不再赘述了。大鹏 @dapeng 有个 steemr工具也不错,不过据说他要养活不起了😭

Sort:  

我们会帮大鹏养活steemr的

多谢!已经取得联系。需要一段时间沟通

我只想知道啥时候有人能倒腾出一个工具,让大家可以把文章一键导出😂我是个备份控啊,好想给自己的steemit文章备份起来

我提供这项服务,不仅备份,而且给你做个博客。如我的博客deanliu 的博客。这里是服务条款。付费的。没办法,我得承担成本。

发文的时候把md文件保留好就行。

很简单的,哪天我弄一个:)

我这是不是给你找到了明天写作的题材啦,哈哈哈哈哈哈哈(我这两个账号切换自如的让我觉得自己有影分身🤦‍♀️)

可以用我备份用的程序,我发上来了!
https://steemit.com/steem/@chaimyu/steem-steem

Have a nice day my friend @oflyhigh ∩_∩

每次o哥都让我们学到很多东西,太感谢了

求教,Steem 文章最终存储在哪里?一个完全节点中会留有之前的文章吗?

应该是这样的,但是视频什么的在不在链上还真得问@oflyhigh

多谢,按理说视频应该不在链上,否则一个节点肯定爆了,可行的方式是在链上存着数据指纹,真正的数据是链外存储的, Steem 怎么做的没仔细研究过,Dtube 上的视频貌似可以通过IPFS上传和存储。

也不是完全养不起。每个月能养得起25小时,先到先得,用完了等下个月复活。

Coin Marketplace

STEEM 0.20
TRX 0.14
JST 0.030
BTC 64202.90
ETH 3439.10
USDT 1.00
SBD 2.59