@igreklpofrss

Почему MediaId поста в Instagram кодируется именно так?

Всем привет, кто зашел ответить на вопрос.
Вот пример ссылки на один из постов в Instagram https://www.instagram.com/p/CWvxAY7B0ci/

1. Получение MediaId из shortcode.
Данный shortcode в ссылке CWvxAY7B0ci - это MediaId поста, закодированный в base64. Декодируется так:
1. Из таблицы base64 берется индекс символа, соответствующий символу shortcode. Взяв индексы для CWvxAY7B0ci получаем 2,22,47,49,0,24,59,1,52,28,34 соответственно. Все это собрано в массив.

Таблица base64
izobrazhenie-6.png


2. Затем, через цикл for, каждое значение умножается на 64 и суммируется с последующим значением.
Код

shortcode = 'CWvxAY7B0ci'
alphabet ={
        "A": 0,
        "C": 2,
        "B": 1,
        #и т.д. все значения
         }
result = 0
for char in shortcode:
        result = result * 64 + alphabet[char]
#результат 2715604631366879010


Собственно вопрос - почему так? Зачем умножать каждое значение на 64? Зачем их суммировать? По каким правилам это работает? Эта формула какой-то стандарт по кодировке или "фича" Instagram?

2. Получение shortcode из MediaId.
Если в предыдущем вопросе было хоть какое-то понимание происходящего, то тут совсем не понимаю всех действий. Зачем искать остаток и вычитать его? Даже вопросов нет больше, потому что полностью не понимаю почему и как происходит кодировка в этой части кода и не знаю что спросить. Помогите, подскажите.
Код

media_id = int('2715604631366879010')
alphabet ={
        "A": 0,
        "C": 2,
        "B": 1,
        #и т.д. все значения
         }
short_code = ''
while media_id > 0:
        remainder = media_id % 64
        media_id = (media_id-remainder)/64
        short_code = alphabet[remainder] + short_code
#результат CWvxAY7B0ci



ЗАРАНЕЕ СПАСИБО!
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
А зачем функции кодирования и декодирования базе64 доступны в любом языке
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы