Ищу уникальные ники
Для одного проекта мне понадобился короткий ник в Telegram.
Минимальная длинна ника в тг - 5 символов.
Доступный алфавит - [_a-z0-9] (37 символов).
37^5 = 69 343 957Значит мы имеем, порядка, 70 миллионов возможных, наиболее, коротких ников. Число большое, но чисто теоретически, могло быть занято (у Telegram, порядка, миллиарда активных пользователей в месяц).
У меня есть скрипт для проверки "зарегистрированности" ников крупными пачками.
Возведу уровень абстракции в абсолют и объясню свои намерения python-кодом. Для примера я решил найти все минимальные доступные ники начинающиеся с iaml:
from string import printable
ALPHABET = printable[:36] + "_"
for i in ALPHABET:
username = "iaml" + i
if await check(username):
print(username)На выходе мы имеем следующий список ников:
>>> iamlr, iamly, iamlf, iamlm, iaml3, iaml7Меня заинтересовал iamly. Но при попытке зарегистрировать аккаунт на это имя у меня не получилось..
Оказалось, что ник действительно никем не занят, но выставлен на продажу на платформе fragment.
После беглого аудита у меня появилось ощущение, что все минимальные возможные ники (4-5 символов) заняты (а точнее выставлены на продажу на fragment).
Ага, и именно сейчас fragment упал...
Вернувшись к проекту через пару недель, я начал ресёрч материалов, касательно закрытого/открытого API фрагмента.
Явного упоминания открытого API на сайте/в поиске я не нашёл (что, не свойственно для проектов Telegram). Значит будет интересно найти способ получения информации.
Первым делом, я, разумеется, проанализировал запросы в параметрах для разработчиков, но это не результатов.
Я уже начал задумываться о реверс-инженеринге мини-приложения в тг, но перед этим решил проверить стандартные пути для API, так сказать методом подбора:
https://api.fragment.com/
https://fragment.com/api/И второй вариант, всё же дал результат.
{"error":"Bad request"}После этого я просто погуглил/поискал на github: "fragment.com/api": нашёл 3 репозитория и начал разбираться в одном из них.
Когда я попытался повторить запрос в insomnia (open sourse аналог postman-а), это на удивление не дало результатов.
Скопировал код (меня интересовал только один файл из репозитория), отформатировал, переписал на aiohttp (асинхронная python-библиотека для выполнения http запросов) и оптимизировал, чтобы в процессе понять логику.
Оказалось, что проблема была в том, что fragment пробрасывает hash для доступа к API:
https://fragment.com/api?hash=9e123e5e1aab123456.
Пробросил. Всё работает. Для проверки попробую докопаться до себя:
{
'ok': True,
'html': '<...> <div class="<...> tm-value">@iamlostshe</div><...><div class=" tm-value">Unknown</div><...><div class=" tm-value">Taken</div><...>',
'url': '/?query=iamlostshe',
'expire': 1759692855,
'show_recent_bids': False
}Обновим код, для проверки гипотезы из начала статьи: о том что нет свободных пяти-символьных ников.
from string import printable
ALPHABET = printable[:36] + "_"
for i in ALPHABET:
for j in ALPHABET:
username = "iam" + i + j
if (
await telegram_checker.check(username) != "Taken"
and await fragment_checker.check(username) == "Unavailable"
):
print(username)Такие ники выводятся, при запуске:
>>> iam0b, iam0c, iam0e, iam0h, iam0s, iam0t, iam0w, iam0y, ...Немного мыслей о уникальности ников
По нику можно многое сказать о человеке, а можно ли оценить его уникальность, универсальным скриптом?
Для начала предлагаю определить, что делает ник уникальным:
Длинна - 5-32 символа, чем меньше, тем ценнее.
Количество слов (визуальных, например, 1 можно прочитать как l), чем меньше, тем лучше, но если нет, то 0 баллов (буду проверять только 10К самых популярных английских слов).
Состоит из одинаковых символов, например
@aaaaa.
Предлагаю написать функцию для оценки: