t.co リンクが与えられた場合、リンクが解決される場所を確認するにはどうすればよいですか? たとえば、t.co/foo がある場合、domain.com/bar を返す関数またはプロセスが必要です。
8 に答える
あなたが制御できない外部 API には近づかないでしょう。これは、潜在的な障害点となる依存関係をアプリケーションに導入するだけであり、使用に費用がかかる可能性があります。
CURL はこれを非常にうまく行うことができます。PHPで行った方法は次のとおりです。
function unshorten_url($url) {
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_FOLLOWLOCATION => TRUE, // the magic sauce
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_SSL_VERIFYHOST => FALSE, // suppress certain SSL errors
CURLOPT_SSL_VERIFYPEER => FALSE,
));
curl_exec($ch);
return curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
}
これを他の言語に適用したりcurl
、UNIX システムでコマンドを使用してスクリプト化したりすることもできると確信しています。
http://jonathonhill.net/2012-05-18/unshorten-urls-with-php-and-curl/
curl -s -o /dev/null --head -w "%{url_effective}\n" -L "https://t.co/6e7LFNBv"
--head
または-I
HTTP ヘッダーのみをダウンロードします-w
または--write-out
出力後に指定された文字列を出力します-L
または--location
ロケーションヘッダーに従います
コマンドラインから実行したい場合は、curlの詳細オプションが役に立ちます。
curl -v <url>
HTTP応答を提供します。t.coの場合、HTTP / 301応答(永続的に移動)が返されるようです。次に、短縮されたURLの背後にあるURLを指す[場所]フィールドがあります。
これがPythonソリューションです。
import urllib2
class HeadRequest(urllib2.Request):
def get_method(self): return "HEAD"
def get_real(url):
res = urllib2.urlopen(HeadRequest(url))
return res.geturl()
実際のTwittert.coリンクでテスト済み:
url = "http://t.co/yla4TZys"
expanded = get_real(url)
拡張= http://twitter.com/shanselman/status/276958062156320768/photo/1
試してみてください-例外として、あなたは行ってもいいです。
別の Python ソリューション。今回は、urllib2 (および残りのすべてのライブラリ) の代わりに requests モジュールに依存しています。
#!/usr/bin/env python
import requests
shorturl = raw_input("Enter the shortened URL in its entirety: ")
r = requests.get(shorturl)
print("""
The shortened URL forwards to:
%s
""" % r.url)
これは、このスレッドの他の回答とexample()
RCurl パッケージのコードから移植された R ソリューションです。
unshorten_url <- function(uri){
require(RCurl)
if(RCurl::url.exists(uri)){
# listCurlOptions()
opts <- list(
followlocation = TRUE, # resolve redirects
ssl.verifyhost = FALSE, # suppress certain SSL errors
ssl.verifypeer = FALSE,
nobody = TRUE, # perform HEAD request
verbose = FALSE
);
curlhandle = getCurlHandle(.opts = opts)
getURL(uri, curl = curlhandle)
info <- getCurlInfo(curlhandle)
rm(curlhandle) # release the curlhandle!
info$effective.url
} else {
# just return the url as-is
uri
}
}
この Java コードを試すことができます。そのようなコードは、Java が所有する HttpURLConnection を使用します。: http://www.srccodes.com/p/article/37/expand-shortened-link-using-java?fb_action_ids=1544985322486585&fb_action_types=og.likes
この URL Expander はどのように機能しますか? 短縮 URL への HttpURLConnection を作成します ( http://goo.gl/WT6eFwなど)。
HTTPヘッダーフィールド「Location」の値を抽出します。この値は、展開された、または実際のリンク先 URL に他なりません。
接続を閉じます。