reddit URL中的5个字符的字母数字id是什么?

时间:2009-01-04 05:00:52

标签: python url slug reddit

reddit网址中的7n5lu是什么 http://www.reddit.com/r/reddit.com/comments/7n5lu/man_can_fly_if_you_watch_one_video_in_2

它是如何生成的?

更新: @Gerald,谢谢你的代码。我最初认为这是对id的一些混淆。 但是,它只是从整数转换为更紧凑的表示。我在想,为什么要这样做?为什么不使用原始整数!!

>>> to36(4000)
'334'
>>> to36(4001)
'335'

4 个答案:

答案 0 :(得分:28)

reddit源代码is available!以下是我发现的用于生成该字符串的内容:

def to_base(q, alphabet):
    if q < 0: raise ValueError, "must supply a positive integer"
    l = len(alphabet)
    converted = []
    while q != 0:
        q, r = divmod(q, l)
        converted.insert(0, alphabet[r])
    return "".join(converted) or '0'

def to36(q):
    return to_base(q, '0123456789abcdefghijklmnopqrstuvwxyz')

和其他地方,在“链接”类下:

@property
def _id36(self):
    return to36(self._id)

答案 1 :(得分:0)

这看起来像是线程的唯一ID。它很可能用于在数据库中找到线程。

答案 2 :(得分:0)

它是一个整数,以36为底。id顺序生成。例如,在ID 89后面的注释就是ID 8a,依此类推。因此,您不需要URL中的任何其他信息。

理论上,评论,帖子,消息,用户和子目录可以具有相同的ID并递增。您可以通过它们的“全名”(它们是事物的类型),下划线然后是下划线来区分它们。

t1是评论,t2是用户,t3是提交,t4是消息,t5是子提示,{{ 1}}是奖励,t6是主持人操作,ModAction是modmail对话,等等。

有关更多信息,请参见the API documentation

答案 3 :(得分:-1)

小记。

这个例子还不够,但通常会附加到列表

a = []
for i in range(NNN): a.append(i)
a.reverse()

比插入头部更有效率。

a = []
for i in range(NNN): a.insert(0,i)