ワンライナー
ruby -r uri -e "puts [URI.parse(STDIN.read).path.split('/').last].pack('H*')"
使用方法
標準入力として Camo のプロキシURLを受け取って、元画像のURLを出力するようになっています。
$ echo 'https://camo.qiitausercontent.com/.../....' | ruby -r uri -e "puts [URI.parse(STDIN.read).path.split('/').last].pack('H*')"
https://qiita-image-store.s3.amazonaws.com/0/7048/0ca50e9d-7428-5708-be67-1321af6465de.gif
解説
QiitaやGitHubでは埋め込んだ画像は Camo でプロキシして配信されます。
なので、↓のように元の画像のURLから変形されて異なるURLになります。
https://qiita-image-store.s3.amazonaws.com/0/7048/0ca50e9d-7428-5708-be67-1321af6465de.gif
↓
https://camo.qiitausercontent.com/4bfce19b86cb7d5eaf053c5aa4b9fb297904225a/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f373034382f30636135306539642d373432382d353730382d626536372d3133323161663634363564652e676966
ただ、変形後のURLには元のURLがエンコードされて埋め込まれているので、それを展開してあげれば、変形後のURLから元の画像URLを取り出せるというわけです。
ちなみに、Camoではsecret_keyと元画像URLをdigestを計算することで、sercet_keyを知らないとvalidなプロキシURLを作れないようになっているのですが、画像URLのエンコードではsecret_keyを使用していないので、secret_keyを知らなくても元画像が何なのか取り出すことができます。
参考URL
- エンコード処理の実装
- デコード処理の実装
ちなみに
Markdownの元ソース見れるならそっち見たほうが早いです。