p.twimg.com 以下の文字列

Twitter for iPhone や Photobucket を利用して画像を上げると,画像は p.twimg.com/*.jpg というような場所に置かれる.
このパスの部分の文字列がどうやって生成されているのか気になった.


しばらく観察してわかったことは

  • 15文字固定
  • 使われる文字は英数字と _ と -
  • 最初のほうの文字はあまり変化がなく,また後に投稿されたものほど辞書順で後になっている

ということくらい.


で,15文字という点がひっかかるけど,おそらく status id あたりを Base64エンコードしたものじゃないかと思っていろいろ試したら,以下のコードで先頭から11文字目まで一致する文字列を生成できてるっぽい.

require 'base64'

def encode(id)
  s = []
  while id != 0
    s.unshift id&0xff
    id >>= 8
  end
  Base64.urlsafe_encode64(s.map(&:chr).join).chomp
end

でもここから先がわからない.
実はどこかにドキュメントされていたり,誰かが既に完全な法則見つけていたりするんですかね.