ツイッターにURLを投稿すると、自動で「t.co」で始まる短縮URLに置換されます。そして、この短縮URLがクリックされると、自動で見事に置換前のURLのウェブページが開きます。
置換後の短縮URLが与えられたとき、置換前のURLを知るにはどうしたらよいでしょうか?
人間が知りたいと思っている場合は、実際にリンクをクリックし目的のページが開かれるのを見届け、そのときのブラウザのアドレスバーの値を確認すれば良いですね。
それでは、知りたい人が人間ではなくて、プログラムの場合は何か良い方法があるでしょうか。
これについて、少し調べたところ、結構簡単にできることがわかりました。以下がChromeアプリ内部でTwitterの短縮URLから元のURLを得る実験の手順です。手順を飛ばして結論のみを見て頂いてもOKです!
とりあえずXHRでt.coを開いてみる
次のJavaScriptをアプリのプログラム内の適当な場所に記述し実行します。
var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://t.co/aykMvbprE2', true); xhr.responseType = 'document'; xhr.onload = function(e) { console.log(xhr.response); } xhr.send();
Chromeのconsole画面を開く
アプリ画面上で右クリックして表示されるメニュー「要素を検証」からコンソール画面を開きます。すると以下の様なHTMLコードが出力されていると思います。
<html> <head> <noscript> <meta http-equiv="refresh" content="0; URL=https://www.google.co.jp"> </noscript> <title>https://www.google.co.jp</title> <script> window.opener = null; location.replace("https:\/\/www.google.co.jp"); </script> </head> <body> </body> </html>
考察
これは、前ステップのプログラムの5行目の結果です。つまり、「t.coで始まる短縮URL」をXMLHttpRequest()
で開いたときのレスポンスです。
このHTMLを見てみると、script
タグ内のlocation.replace()
でhttps://www.google.co.jp
に誘導しようとしていることがわかります。短縮前の投稿されたオリジナルURLが判明しました。さらにtitle
タグ内にも同じく、短縮前のURLが記述されています。
Chromeアプリのプログラム内部では、このtitle
タグ内の文字列を取得すれば良さそうです。
結論
「Chromeアプリ内部で、Twitterの短縮URLから元のURLを得る」ためには、
xhr
(XMLHttpRequest)で短縮URLをレスポンスタイプをdocument
として呼び出す- 得られた結果(
xhr.response
)のtitle
を読む
だけで良い。具体的に、プログラムは以下のように書けば良い。
var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://t.co/aykMvbprE2', true); xhr.responseType = 'document'; xhr.onload = function(e) { var originalURL = xhr.response.title; /* 2. */ } xhr.send(); /* 1. */
さいごに
Chromeアプリ内部でTwitterを扱う関連記事として、よろしければ、こちらもどうぞ。