记录一下steem上文章和回复的URL规则

in #url7 years ago

因为要在程序中使用到文章的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就会显示对应文章
比如:

https://steemit.com/surfer/@oflyhigh/esteem-surfer

回复也是如此,比如:

https://steemit.com/surfer/@oflyhigh/esteem-surfer#@oflyhigh/re-fr3eze-re-oflyhigh-esteem-surfer-20180520t054117176z

但是上述回复显示的是整篇正文加所有回复,然后定位到对应的回复并高亮显示。

如果文章超长回复超多,这样加载起来和看起来都不是很方便。

所以其实可以用另外一种url方式(https://steemit.com/ + category + permlink)

https://steemit.com/surfer/@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就是一例。