T.coリンクがある場合、リンクが解決される場所を確認するにはどうすればよいですか?たとえば、t.co/fooがある場合、domain.com/barを返す関数またはプロセスが必要です。
私はあなたが制御できない外部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);
}
これは他の言語に適合させることも、UNIXyシステムでcurl
コマンドを使用してスクリプト化することもできます。
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を指すLocationフィールドがあります。
nshorten.me を試すことができます。 [〜#〜] api [〜#〜] があります。
[〜#〜] json [〜#〜]:
http://api.unshort.me/?r=http://theshorturl.ly/28292&t=json
あなたに与えるでしょう:
{
"requestedURL":"http://theshorturl.ly/28292",
"success":"true",
"resolvedURL":"http://thefullurl.com/a-webiste/what-a-long-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()
実際のTwitter t.coリンクでテスト済み:
url = "http://t.co/yla4TZys"
expanded = get_real(url)
展開= http://Twitter.com/shanselman/status/276958062156320768/photo/1
Try-exceptでそれをラップし、あなたは行ってもいいです。
別のPythonソリューション、今回はurllib2(およびそれらのライブラリの残りすべて)ではなくリクエストモジュールに依存します):
#!/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)
以下は、このスレッドの他の回答と、RCurlパッケージのexample()
コードから移植された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
}
}
TwitterがURLを展開します。 jsonファイルとしてエンコードされたTwitter APIを使用した単一のツイートがあるとします。
import json
urlInfo=[]
Tweet=json.loads(Tweet)
keyList=Tweet.keys() # list of all posssible keys
Tweet['entities'] # gives us values linked to entities
'urls'という値があることがわかりますTweet ['entities'] ['urls']#キーのURLにマッピングされた値を提供します
urlInfo=Tweet['entities']['expanded_url'] # move it to a list
# iterating over the list.. gives shortened URL
# and expanded URL
for item in urlInfo:
if "url" and "expanded_url" in urlInfo.keys():
print(item["url"] + " "+item["expanded_url"])
これを試すことができますJavaコード。これは、Javaが所有するHttpURLConnectionを使用するコードです。 http://www.srccodes.com/p/article/37/expand- shorted-link-using-java?fb_action_ids = 1544985322486585&fb_action_types = og.likes
このURLエキスパンダーはどのように機能しますか? HttpURLConnectionを短縮URLに設定します(たとえば http://goo.gl/WT6eFw )。
HTTPヘッダーフィールド「Location」の値を抽出します。そして、この値は、展開された、または実際のリンク先URLにすぎません。
接続を閉じます。