Twitter で tinyurl にクエリ文字列の一部が渡されないことがある。
twitter.com で以下のようなにクエリ文字列を含むURLをポストすると、
https://www.google.com/accounts/ServiceLogin?service=youtube &continue=http://www.youtube.com/signup&passive=true
http://local.google.co.jp/maps?f=l&hl=ja&view=map&ie=UTF8&om=1 &ll=35.683861,139.75258&spn=0.029246,0.029826&z=15
このように表示される。
http://tinyurl.com/yo32xk://www.youtube.com/signup&passive=true
http://tinyurl.com/27ee5x,139.75258&spn=0.029246,0.029826&z=15
そして、tinyurl を展開すると、
http://tinyurl.com/yo32xk
→https://www.google.com/accounts/ServiceLogin?service=youtube &continue=httphttp://tinyurl.com/27ee5x
→http://local.google.co.jp/maps?f=l&hl=ja&view=map&ie=UTF8 &om=1&ll=35.683861
となるので、残りの
://www.youtube.com/signup&passive=true
,139.75258&spn=0.029246,0.029826&z=15
とくっつけると、元に戻るんだけど…
たしかに、","や":"は URLエンコードしなければならないのだが、API経由でこれらをURLエンコードして
https%3A%2F%2Fwww.google.com%2Faccounts%2FServiceLogin %3Fservice%3Dyoutube%26continue%3Dhttp%3A%2F %2Fwww.youtube.com%2Fsignup%26passive%3Dtrue
http%3A%2F%2Flocal.google.co.jp%2Fmaps%3Ff%3Dl%26hl%3Dja %26view%3Dmap%26ie%3DUTF8%26om%3D1%26ll%3D35.683861 %2C139.75258%26spn%3D0.029246%2C0.029826%26z%3D15
と送っても結果は、同じ。
クエリ文字列を含めた全てを tinyurl に渡すには、クエリ文字列を一度URLエンコードしてから(ただし、"&" "=" "%" はエンコードしない)、全体をURLエンコードする必要があるようだ。
具体的には、
- クエリー文字列の "a〜z" "A〜Z" "0〜9" "'" "." "-" "*" "(" ")" "_" "&" "=" "%" 以外の文字をURLエンコード
service=youtube&continue=http://www.youtube.com/signup &passive=true
→service=youtube&continue=http%3A%2F%2Fwww.youtube.com %2Fsignup&passive=true
f=l&hl=ja&view=map&ie=UTF8&om=1&ll=35.683861,139.75258 &spn=0.029246,0.029826&z=15
→f=l&hl=ja&view=map&ie=UTF8&om=1&ll=35.683861%2C139.75258 &spn=0.029246%2C0.029826&z=15 - これらを含めて "a〜z" "A〜Z" "0〜9" "'" "." "-" "*" "(" ")" "_" 以外の文字をURLエンコード
https://www.google.com/accounts/ServiceLogin?service=youtube &continue=http%3A%2F%2Fwww.youtube.com%2Fsignup&passive=true
→ https%3A%2F%2Fwww.google.com%2Faccounts%2FServiceLogin %3Fservice%3Dyoutube%26continue%3Dhttp%253A%252F %252Fwww.youtube.com%252Fsignup%26passive%3Dtrue
http://local.google.co.jp/maps?f=l&hl=ja&view=map&ie=UTF8&om=1 &ll=35.683861%2C139.75258&spn=0.029246%2C0.029826&z=15
→ http%3A%2F%2Flocal.google.co.jp%2Fmaps%3Ff%3Dl%26hl%3Dja %26view%3Dmap%26ie%3DUTF8%26om%3D1%26ll%3D35.683861 %252C139.75258%26spn%3D0.029246%252C0.029826%26z%3D15
とすることで、
http://tinyurl.com/ytlcxb
→https://www.google.com/accounts/ServiceLogin?service=youtube &continue=http%3A%2F%2Fwww.youtube.com%2Fsignup&passive=truehttp://tinyurl.com/yshtdz
→http://local.google.co.jp/maps?f=l&hl=ja&view=map&ie=UTF8 &om=1&ll=35.683861%2C139.75258&spn=0.029246%2C0.029826 &z=15
無事、tinyurl のみとなった。
クエリ文字列中の ":" "/" "," が、"%3A" "%2F" "%2C" にエンコードされているが、上記サイトは正しく表示された。
Twitter 側では、全体をデコードして URLと思われる文字列を tinyurl に渡すのだから、しかたがないのかな?
さて、twitte.rb をアップデートしなくっちゃ。。。
最近のコメント