tinyurl、Goo.gl、bit.ly、およびその他の URL 短縮 URL を CURL リクエストを行わずにデコードできる PHP 用のライブラリはありますか?
4 に答える
CURL リクエストを行わずに
- いいえ
URL 短縮を使用すると、作成されたハッシュは、短縮される URL とは関係ありませんが、シンプルでエレガントな内部データベース識別子にすぎません。
URL の場所を取得する唯一の方法は、リンク短縮サイトにリクエストを処理してから応答データを取得するように依頼することです。これを行う唯一の方法は、そのサイトへのネットワークを使用することです。
場所のハッシュが長い URL の可逆ハッシュでない限り、他の方法はありません。
少なくともbit.lyとTinyURLはHTTPリダイレクトを使用するだけです。
したがって、Location応答ヘッダーを取得するだけです。HTTP_Request2
たとえば、PEARを使用できます。すべてのサービスがこの方法を使用しているかどうかはわかりませんが、使用するのが最も明白な方法です...
なぜカールを使いたくないのかわかりません。特定のライブラリまたはネットワークライブラリ全般のカールについて話しているのですか?Webページに接続せずにWebページから情報を取得することは、私には無意味に思えます:-)
これは、ライブラリを使用しない「最小限の労力ですばやく」nダーティな方法です...(ヘッダーに使用できます)...ソケットを使用して同じことを実行できますgrep
...Location
[~]% telnet tinyurl.com 80
Trying 64.62.243.89...
Connected to tinyurl.com.
Escape character is '^]'.
GET /69gb3gl HTTP/1.1
Host: tinyurl.com
HTTP/1.1 301 Moved Permanently
X-Powered-By: PHP/5.3.6
Location: http://www.thinkwithportals.com/media_17.php
X-tiny: db 0.1608510017395
Content-type: text/html
Content-Length: 0
Connection: close
Date: Tue, 02 Aug 2011 00:45:59 GMT
Server: TinyURL/1.6
Connection closed by foreign host.
[~]% telnet bit.ly 80
Trying 168.143.172.53...
Connected to bit.ly.
Escape character is '^]'.
GET /nm0ZIh HTTP/1.1
Host: bit.ly
HTTP/1.1 301 Moved
Server: nginx
Date: Tue, 02 Aug 2011 00:47:12 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Set-Cookie: _bit=4e374910-002c2-05b82-d5ac8fa8;domain=.bit.ly;expires=Sat Jan 28 19:47:12 2012;path=/; HttpOnly
Cache-control: private; max-age=90
Location: http://richarddawkins.net/videos/642324-iq2-shorts-stephen-fry-vs-ann-widdecombe-catholic-church-debate
MIME-Version: 1.0
Content-Length: 195
いいえ、できません。ほとんどのホストで動作する関数の小さなパックを作成しました。
<?php
class url{
function get_location_header($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$response = curl_exec ($ch);
curl_close ($ch);
preg_match("~(http://.*)~", $response, $match);
return $match[0];
}
function cache_save($file, $content){
$f = fopen('cache/'.$file, 'w+');
fwrite($f, $content);
fclose($f);
}
function long_url($short_url){
$patterns = array('goo\.gl', 'tinyurl\.com', 'bit\.ly');
$header = $this->get_location_header($short_url);
if ($header){
$long_url = $header;
return $long_url;
}
}
}
$url = new url();
echo $url->long_url('http://goo.gl/0A3kH').'<br />';
echo $url->long_url('http://tinyurl.com/5b2su2').'<br />';
echo $url->long_url('http://bit.ly/4Agih5');
それはcurlを使用していますが、CURL /ネットワークなしでは実行できません
shortner サービスのデータベースの独自のコピーを持っていない限り、何らかの要求を行う必要があります。短縮URL自体でない場合は、サービスのAPIに。実際、短い URL を要求してリダイレクト ヘッダーを取得することは、技術的には API であると思います。
だから私はそれをcURLと言います。リダイレクトに従わず、ヘッダーを返すように cURL を設定してください (他に何もないため)。Location: ....
ヘッダーを探しています