これは、Python で実装したい Ruby の一部です。
Base64.urlsafe_encode64([Digest::MD5.hexdigest(url).to_i(16)].pack("N")).sub(/==\n?$/, '')
おわかりのように、これは URL を次のように変えるのに役立ちます。
http://stackoverflow.com/questions/ask
thise のような小さなコードに:
sUEBtw
プロセスで生成される大きな整数は次のとおりです。
307275247029202263937236026733300351415
この Python コードを使用して、これをバイナリ形式にパックすることができました。
url = 'http://stackoverflow.com/questions/ask'
n = int(hashlib.md5(url).hexdigest(), 16)
s = struct.Struct('d')
values = [n]
packed_data = s.pack(*values)
short_code = base64.urlsafe_b64encode(packed_data)[:-1]
print short_code
私が得る短いコードはこれです:
zgMM62Hl7Ec
ご覧のとおり、Ruby で取得したものよりも大きくなっています。これは、パッキングが別の形式を使用しているためです。
あなたの助けをいただければ幸いです。