web-dev-qa-db-ja.com

t.coリンクの行き先を見つける

T.coリンクがある場合、リンクが解決される場所を確認するにはどうすればよいですか?たとえば、t.co/fooがある場合、domain.com/barを返す関数またはプロセスが必要です。

28
hookedonwinter

私はあなたが制御できない外部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/

19
Jonathon Hill

curl -s -o /dev/null --head -w "%{url_effective}\n" -L "https://t.co/6e7LFNBv"

  • --headまたは-I HTTPヘッダーのみをダウンロードします
  • -wまたは--write-out指定した文字列を出力後に出力します
  • -Lまたは--locationはロケーションヘッダーに従います
7
Lri

コマンドラインから実行する場合は、curlの詳細オプションが役立ちます。

curl -v <url>

hTTP応答を返します。 t.coの場合は、HTTP/301応答が返されるようです(永続的に移動されます)。次に、短縮されたURLの背後にあるURLを指すLocationフィールドがあります。

6
BjoernD

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"
}
5
Acorn

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でそれをラップし、あなたは行ってもいいです。

4
exbctel

別の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)
2
Ben

以下は、このスレッドの他の回答と、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
        }
}
1
knb

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"])
0
Sarvesh

これを試すことができます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にすぎません。

接続を閉じます。

0
Jianping