因为要在程序中使用到文章的URL,所以调查了一下文章和回复的URL规则,并记录在此处备忘。
(图源 :pixabay)
url 字段
在get_content
等从区块链上获取文章的API调用中,结果中包含一个url字段。比如说下列调用:
{"jsonrpc": "2.0", "method": "call", "params": ["condenser_api", "get_content", ["oflyhigh", "esteem-surfer"]], "id": 1}
结果中包含如下url字段:
'url': '/surfer/@oflyhigh/esteem-surfer',
而读取我回复 @fr3eze 的内容
{"jsonrpc": "2.0", "method": "call", "params": ["condenser_api", "get_content", ["oflyhigh", "re-fr3eze-re-oflyhigh-esteem-surfer-20180520t054117176z"]], "id": 1}
结果中包含的url字段内容又变成了这个样子
'url': '/surfer/@oflyhigh/esteem-surfer#@oflyhigh/re-fr3eze-re-oflyhigh-esteem-surfer-20180520t054117176z',
代码
上述测试中读取主贴以及回复中的url
都是如何得到的呢?
阅读condenser_api.cpp的代码,我们发现实际上get_content
是tags_api.cpp
中get_discussion
的简单映射。
继续看get_discussion
的代码,里边调用了set_pending_payout( result );
而这个函数在末尾又调用set_url( d );
而set_url又做了什么呢?
答案很简单,就是生成上述规则的URL,和我们用API调用返回的一样。
另外一点就是上边代码中的category是咋来的
这段代码解释了这个问题。
效果
除了url以外,我还很关心steemit.com 上不同url的的显示效果。
文章的url不用说啦
https://steemit.com
+ url
就会显示对应文章
比如:
回复也是如此,比如:
@oflyhigh/esteem-surfer#@oflyhigh/re-fr3eze-re-oflyhigh-esteem-surfer-20180520t054117176z
但是上述回复显示的是整篇正文加所有回复,然后定位到对应的回复并高亮显示。
如果文章超长回复超多,这样加载起来和看起来都不是很方便。
所以其实可以用另外一种url方式(https://steemit.com/ + category + permlink
)
@oflyhigh/re-fr3eze-re-oflyhigh-esteem-surfer-20180520t054117176z
相比之下,我更喜欢第二种方式。
结论
对于主贴而言,url为: /category/@author/permlink
对于回复而言 url为 /root.category/@root.author/root.permlink#@author/permlink
而另外一种方式为 /category/@author/permlink
,亦即与主贴一样的规则。
知道了url生成规则以后,我们就可以自己按规则生成url了,无需使用从get_content
等API中读回的url。讲真,我一直觉得这些API有时候会返回一些多余的重复数据,url就是一例。