Create Bit.ly Short URLs Using PHP
One of the more popular URL shortening services is Bit.ly. I've showed you how to create short URLs with TinyURL and Is.Gd, so why not show you how to create Bit.ly URLs remotely?
The PHP
/* make a URL small */
function make_bitly_url($url,$login,$appkey,$format = 'xml',$version = '2.0.1')
{
//create the URL
$bitly = 'http://api.bit.ly/shorten?version='.$version.'&longUrl='.urlencode($url).'&login='.$login.'&apiKey='.$appkey.'&format='.$format;
//get the url
//could also use cURL here
$response = file_get_contents($bitly);
//parse depending on desired format
if(strtolower($format) == 'json')
{
$json = @json_decode($response,true);
return $json['results'][$url]['shortUrl'];
}
else //xml
{
$xml = simplexml_load_string($response);
return 'http://bit.ly/'.$xml->results->nodeKeyVal->hash;
}
}
/* usage */
$short = make_bitly_url('http://davidwalsh.name','davidwalshblog','R_96acc320c5c423e4f5192e006ff24980','json');
echo 'The short URL is: '.$short;
// returns: http://bit.ly/11Owun
Note that Bit.ly requires you to sign up for an account. Once you have an account, you may attain your login and URL information. I've also created functionality to recieve the shortened URL using JSON or XML.
Happy shortening!
Discussion
Be Heard!
Share your thoughts with fellow developers of all skill levels! I want to hear from you!
Hi David, I as always enjoyed your codes they are really helpful… I really interested in Facebook connect… There is no any examples and so… Can you one day make some simple basic example how we can implement it to our sites.. how get data from FB and so on :) Thanks.
Thanks! There are some PHP API info at: http://to.ly/api_info.php
Not sure if there is anything that can be done about this, but the xml rss feed does not show the code in a friendly format within Outlook. But other then that.. This is great!!! Thanks a lot David!
I played around with this function a bit and added cURL into it.
Also, if you want the shortened URL to show up in your history on bit.ly (which is useful for statistics and the like), you have to add ‘&history=1′ to the URL.
I added that parameter to the function (along with cURL), for anyone who’s interested:
function make_bitly_url($url, $login, $appkey, $format=’xml’, $history=1, $version=’2.0.1′)
{
//create the URL
$bitly = ‘http://api.bit.ly/shorten’;
$param = ‘version=’.$version.’&longUrl=’.urlencode($url).’&login=’
.$login.’&apiKey=’.$appkey.’&format=’.$format.’&history=’.$history;
//get the url
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $bitly . “?” . $param);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
//parse depending on desired format
if(strtolower($format) == ‘json’) {
$json = @json_decode($response,true);
return $json['results'][$url]['shortUrl'];
} else {
$xml = simplexml_load_string($response);
return ‘http://bit.ly/’.$xml->results->nodeKeyVal->hash;
}
}
Great post, David!
I wonder why you need to set the format? Shouldn’t that be handled internally?
With the recent discussion about url shortening services is it a good thing you present a function for one of these services?
I create a small PHP class: http://rafb.net/p/2LLWwg88.html – maybe someone can use it…
Oops, should be “private $strApiKey, $strLogin, $strUrl, $bolCurl = false;” :( There might be some more problems, I wrote that while eating my soup ;)
Gosh, once again, this time with working link (hopefully): http://rafb.net/p/9RcZDk98.html
Thanks for the great code. I’ll try to do something cool with it.
Thanks again and keep up the great work.
Don
Great function, combined with Jason Lengstorf’s fixes makes the best of this functionality that lies around on the web. Short and effective.
Wow! You saved my morning w. this script. Thank you. Keep up the good work.
Great stuff David,
I would suggest tweaking the code as the following to make it more tolerant of network timeouts.
Cheers
Line 9:
$response = @file_get_contents($bitly);
if ($response == false) return false /* or something else */
Thanks a lot for your code! I’m using this on a WordPress project and it’s far better and slimmer than using a bloated social media plugin. I just put a direct link to Twitter and add in the short link with it. Works great.
Hi, thanks for sharing this tips. I’m using it. thanks again.
Regards
Really useful and good code david! I am going to use it :)
@Jason Lengstorf:
Thanks for sharing the cURL version Jason!
hello, please help me, i have a problem with file_get_contents….
my server don’t allow this …
thx2u
Voisin
I modified this function to make it compliant with the v3 version of the bit.ly API, you can find the article over here: http://www.bumpershine.com/making-short-wordpress-urls-with-bit-ly-and-php. I also added in an example of how I am using it shorten wordpress URLs specifically.
What if the bit.ly system returns an error? or even returns nothing (due timeout or serverdown) ?
How can I catch the error?
Thanks a lot for the very useful code. Great job.