-
Notifications
You must be signed in to change notification settings - Fork 7.6k
isgdURL
isgdURL creates a shortened url using the is.gd service's API.
is.gd's API documentation is found at http://74.208.111.132/gb/is.gd/api_info.php
TODO: we can varify that the returned shorted url points correctly by getting the headers returned by a curl request to the shortened url. We should get HTTP 301 redirect header with the location parameter set to the original long URL.
use : [code] <?php anchor(isgdURL($longurl)); ?> [/code]
[code] /**
-
@name isgdURL helper for Codeigniter
-
@author Nathan Letsinger [email protected]
-
@copyright Copyright (c) 2009, Nathan Letsinger
-
@license http://www.gnu.org/copyleft/gpl.html
-
creates a shortened url using is.gd's API when supplied with a url string
-
WARNING:
-
This function expects a well formed unencoded url and does not validate input.
-
However, is.gd does validate input, and will return an error message on malformed
-
urls like " Error: The URL entered was not valid." along with a 500 status code header.
-
PHP REQUIREMENTS:
-
This helper requires the cURL library (libcurl) to be compiled into PHP to reach is.gd
-
if curl is not installed you might opt to replace curl calls with a single
-
call to file_get_contents if the fopen wrappers have been enabled. However
-
using that function may take significantly longer (noticibly in seconds) and
-
degrade performance.
-
CI REQUIREMENTS:
-
Requires the xss_clean method of CI_input class to parse url output from is.gd
-
if xss_clean cannot be found the function returns the original input $url.
-
TERMS OF SERVICE REMINDER:
-
Note that users of the is.gd API are expected to comply with TOS
-
found here: http://74.208.111.132/gb/is.gd/terms.php
-
@link http://us3.php.net/manual/en/intro.curl.php PHP-cURL
-
@link http://74.208.111.132/gb/is.gd/api_info.php API-doc
-
@link http://74.208.111.132/gb/is.gd/terms.php API-Terms-of-Service
-
@uses CI_Input::xss_clean()
-
@param string $url unencoded url to shrink
-
@return string either the newly shrunk url or $url */ function isgdURL($url) {
$timeout_seconds = 5; //@todo finetune timeout in seconds for your app.$curl_handle = curl_init('http://is.gd/api.php?longurl=' . urlencode($url)); curl_setopt($curl_handle, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 ); curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, $timeout_seconds); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); $shrunkURL = curl_exec($curl_handle); $http_response_int = curl_getinfo($curl_handle , CURLINFO_HTTP_CODE); if (curl_errno($curl_handle)) { log_message('error','curl error: ' . curl_error($curl_handle)); return $url; } curl_close($curl_handle); /** * is.gd responds w/ header status code "HTTP/1.1 200 OK" if url is shortened as expected * and w/ "HTTP/1.1 500 Internal Server Error" if there is a problem. * We return the supplied url on any status code but 200 & that matches * the expected output pattern. */ switch ($http_response_int) { case 200: if( ! preg_match("/^http(s?):\/\/is.gd\/[a-z0-9]+/i" , $shrunkURL)) { log_message('error','Failed preg match with shrunk url ' . $shrunkURL); return $url; } break; case 500: log_message('error','500 Internal Server Error contacting is.gd api with url "' . $url . '"'); log_message('error','is.gd api responded : ' . $shrunkURL); return $url; break; default: log_message('error','Response status ' . $http_response . ' contacting is.gd api with url "' . $url . '"'); return $url; } $ci =& get_instance(); return (method_exists($ci->input, 'xss_clean')) ? $ci->input->xss_clean($shrunkURL) : $url ;
} [/code]