>>
Twitter で tinyurl にURLの一部が渡されないことがある 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=http http://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=true http://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 をアップデートしなくっちゃ。。。
最近のコメント