Что такое буквенно-цифровой идентификатор в URL-адресе Reddit? - PullRequest
15 голосов
/ 04 января 2009

Что такое 7n5lu в Reddit URL

http://www.reddit.com/r/reddit.com/comments/7n5lu/man_can_fly_if_you_watch_one_video_in_2

... и как он генерируется?

Обновление: @Gerald, я изначально думал, что это какое-то запутывание идентификатора. Он просто выполняет преобразование из целого числа в более компактное представление. Я думаю, почему это делается? почему бы не использовать само оригинальное целое число !!

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

Ответы [ 4 ]

28 голосов
/ 04 января 2009

Доступен исходный код Reddit ! Вот что я нашел для генерации этой строки:

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)
0 голосов
/ 06 июня 2019

Это целое число, только в базе 36. Идентификатор генерируется последовательно. Например, комментарий сразу после идентификатора 89 - это идентификатор 8a и т. Д. Учитывая это, вам не нужна никакая другая информация из URL.

Комментарии, сообщения, сообщения, пользователи и подредакты могут теоретически иметь один и тот же идентификатор и считаться. Вы можете различать их по «полному имени», которое является типом вещи, подчеркиванием, а затем подчеркиванием.

t1 - это комментарий, t2 - это пользователь, t3 - это сообщение, t4 - это сообщение, t5 - это субредит, t6 - это награда, ModAction - это действие модератора, ModmailConversation - это разговор модмейла и т. д.

См. документацию API для получения дополнительной информации.

0 голосов
/ 04 января 2009

Небольшое замечание.

Недостаточно для этого примера, но обычно добавление в списки

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

действительно эффективнее, чем вставка в голову.

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

.

0 голосов
/ 04 января 2009

Это выглядит как уникальный идентификатор для потока. Скорее всего, он используется для поиска потока в базе данных.

...