Найти, куда идет ссылка на t.co - PullRequest
28 голосов
/ 28 июня 2011

Учитывая ссылку t.co, как я могу найти информацию о том, где ссылка разрешается? Например, если у меня есть t.co/foo, я хочу функцию или процесс, который возвращает domain.com/bar.

Ответы [ 9 ]

19 голосов
/ 19 мая 2012

Я бы держался подальше от внешних 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 в системах UNIXy.

http://jonathonhill.net/2012-05-18/unshorten-urls-with-php-and-curl/

7 голосов
/ 04 июля 2012

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

  • --head или -I загружает только заголовки HTTP
  • -w или --write-out печатает указанную строку после вывода
  • -L или --location следует за заголовками местоположений
6 голосов
/ 28 июня 2011

Если вы хотите сделать это из командной строки, на помощь придет подробный вариант curl:

curl -v <url>

дает вам ответ HTTP. Для t.co, похоже, вы получите ответ HTTP / 301 (постоянно перемещенный). Затем есть поле Location, которое указывает на URL-адрес позади сокращенного.

5 голосов
/ 28 июня 2011

Вы можете попробовать unshorten.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"
}
4 голосов
/ 07 декабря 2012

Вот решение 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()

Протестировано с фактической ссылкой твиттера:

url = "http://t.co/yla4TZys"
expanded = get_real(url)

расширенный = http://twitter.com/shanselman/status/276958062156320768/photo/1

Заверните это с попыткой, кроме, и вы готовы идти.

2 голосов
/ 22 сентября 2013

Другое решение 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)
1 голос
/ 20 декабря 2015

Вот решение R, портированное из других ответов в этой теме и из example() кода пакета RCurl:

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
        }
}
0 голосов
/ 25 марта 2016

Твиттер расширяет URL.Предположим, у вас есть один твит с использованием Twitter API, закодированный в виде файла json.

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 ['entity'] ['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 голосов
/ 26 декабря 2015

Вы можете попробовать этот код Java. Такой код использует HttpURLConnection, принадлежащий Java. : http://www.srccodes.com/p/article/37/expand-shortened-link-using-java?fb_action_ids=1544985322486585&fb_action_types=og.likes

Как будет работать этот расширитель URL? Сделайте HttpURLCподключением к сокращенному URL (скажем, http://goo.gl/WT6eFw).

Извлечь значение HTTP-заголовка из поля «Местоположение». И это значение - не что иное, как расширенный или фактический целевой URL.

Закрыть соединение.

...