今天想用程序看一下自己的过往文章,用到的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_id
和limit
获取任意条目才对。
上述代码中没能看出什么其它限制相关的。
于是我在想,是不是最多就只能读出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工具也不错,不过据说他要养活不起了😭
我们会帮大鹏养活steemr的
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
多谢!已经取得联系。需要一段时间沟通
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
我只想知道啥时候有人能倒腾出一个工具,让大家可以把文章一键导出😂我是个备份控啊,好想给自己的steemit文章备份起来
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
我提供这项服务,不仅备份,而且给你做个博客。如我的博客,deanliu 的博客。这里是服务条款。付费的。没办法,我得承担成本。
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
发文的时候把md文件保留好就行。
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
很简单的,哪天我弄一个:)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
我这是不是给你找到了明天写作的题材啦,哈哈哈哈哈哈哈(我这两个账号切换自如的让我觉得自己有影分身🤦♀️)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
可以用我备份用的程序,我发上来了!
https://steemit.com/steem/@chaimyu/steem-steem
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
每次o哥都让我们学到很多东西,太感谢了
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
求教,Steem 文章最终存储在哪里?一个完全节点中会留有之前的文章吗?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
应该是这样的,但是视频什么的在不在链上还真得问@oflyhigh了
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
多谢,按理说视频应该不在链上,否则一个节点肯定爆了,可行的方式是在链上存着数据指纹,真正的数据是链外存储的, Steem 怎么做的没仔细研究过,Dtube 上的视频貌似可以通过IPFS上传和存储。
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
也不是完全养不起。每个月能养得起25小时,先到先得,用完了等下个月复活。
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit