O'Reilly

Create Bit.ly Short URLs Using PHP

By on  

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!

Track.js Error Reporting

Recent Features

Incredible Demos

Discussion

  1. Tommix

    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.

  2. Thanks! There are some PHP API info at: http://to.ly/api_info.php

  3. 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!

  4. 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!

    • Thanks Jason, I found your example more effective and useful. I’m going to use it on my next project with your reference.
      :)

  5. 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?

  6. Fabian Beiner

    I create a small PHP class: http://rafb.net/p/2LLWwg88.html – maybe someone can use it…

  7. Fabian Beiner

    Oops, should be “private $strApiKey, $strLogin, $strUrl, $bolCurl = false;” :( There might be some more problems, I wrote that while eating my soup ;)

  8. Fabian Beiner

    Gosh, once again, this time with working link (hopefully): http://rafb.net/p/9RcZDk98.html

  9. Thanks for the great code. I’ll try to do something cool with it.
    Thanks again and keep up the great work.

    Don

  10. Great function, combined with Jason Lengstorf’s fixes makes the best of this functionality that lies around on the web. Short and effective.

  11. Wow! You saved my morning w. this script. Thank you. Keep up the good work.

  12. 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 */
  13. 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.

  14. Hi, thanks for sharing this tips. I’m using it. thanks again.
    Regards

  15. Really useful and good code david! I am going to use it :)

  16. @Jason Lengstorf:

    Thanks for sharing the cURL version Jason!

  17. hello, please help me, i have a problem with file_get_contents….
    my server don’t allow this …

    thx2u
    Voisin

  18. 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.

  19. Klebson

    What if the bit.ly system returns an error? or even returns nothing (due timeout or serverdown) ?
    How can I catch the error?

  20. Ice

    Thanks a lot for the very useful code. Great job.

  21. Great code, does what it says on the tin. Thanks!

  22. 2 Questions:

    1. Will this code catch and shorten ALL links from sharing plugings, etc?
    3. Where do I put the code? (functions.php, custom.css)

    Just looking for a “catch all” for any links leaving my site for sharing.

    Be kind to the newb

  23. Hi,

    This has stopped working since past 3-4 days. We have always been using your system but just a few days ago noticed it is not working anymore.

  24. Is it possible to use https instead of http://api.bit.ly ?

  25. I’m new to bit.ly – is it possible to create bit.ly links from a spreadsheet of URLs or a feedburner RSS Feed?

  26. mujaffar

    Great post david

    You saved my lots of time

    Worked fine for me
    Thanks

  27. adrian465

    Thanks! I have problems with urls with & in it. The shortner make &amp outta it.

  28. adrian465

    I mean &amp

  29. Thanks for the example. I was actually looking for examples of how to generate bit.ly within Titanium Studio for mobile apps. I found your example instead. I think I can use this, though.

  30. Gloria

    I’m having a hard time shortening my links with bitly. I know I am doing something wrong, but I don’t know what….
    I copy and paste the link to the “shorten link” box. It does change it and it shows under the box with the short form. If I leave the page and try to get back to use it, it’s gone. So I do it all over again and the same thing. I signed up with them, and it shows on the page I’m logged on.
    Is there a place where you can save the shorten links?
    I understand you can check the number of clicks on each link. I just don’t know how to save the links.
    I’m very “computer challenge”, so please don’t be to technical
    Also I bundle two links, and I can’t even find them…. Sorry this is embarrassing… I tried to follow their directions but they are kind of confusing to me.

  31. The post is really useful. It helps you make short urls for you 100-1000 word urls which looks really ugly and hard to paste on a sheet when you mail it.

  32. Pavy

    Hi..
    as per the code you have give here, I see the version is harcoded to ‘2.0.1’.. IS der any chance that we can have this version updated automatically?

  33. ProGab

    Thank you very much for this awesome function. I recommend specifying the login and appkey inside of function and call the function with only the url.

    Example:

    function make_bitly_url($url,$login = 'yourlogin',$appkey = 'yourappkey',$format = 'xml',$version = '2.0.1')
    

    Usage:

    make_bitly_url('URL');
    
  34. Hi, I am trying to add this function to my website, but when I run the file from my webhosting.
    All I get is the displayed echo “The short URL is: ” with no short url…
    Can anyone help !

  35. Armin

    Hi,
    Sorry if I ask silly question, but how can I create a button for my site which run this script?
    I’d like to have a button “Copy Page ShortURL” in each page. I think I have to insert this code in footer but how should I create the button to load and run it?
    Thanks

  36. Cheers!

    It really helps, thanks God I found this post of yours…

    Thanks :D

  37. Hello,
    Before using this script, you should get your own API infos..
    otherwise, the demo will not work..
    thanks for sharing that script,
    i was very usefull for my project

  38. karthiga

    When they click on tweet button, twitter box platform will popup and user can write or edit something before tweet

    Twitter button code:

    <a href="https://twitter.com/share" style="padding: 0px; margin: 0px; height: 40px;"class="twitter-share-button" data-url="" data-text="Check this out!" data-via="TeenLeakss">Tweet
    
    !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
    

    the mention above code only i used. it is work in while highlighting twitter button the link should be shown like shorturl.But it doesn’t seems to be tweet for twitter.

    How to fix this?

  39. Johann

    It’s even easier now !! With the V3 you can directly have your link by using the text format.

    /v3/shorten?access_token=ACCESS_TOKEN&longUrl=http%3A%2F%2Fgoogle.com%2F&format=txt

    More info here : http://dev.bitly.com/links.html#v3_shorten

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!

Recently on David Walsh Blog

  • Sort git Branches by Date

    I'll be first person to admit I don't do as much git repository maintenance as I should.  I rarely delete branches which have been merged, so a git branch execution shows me a mile-long list of branches that likely aren't relevant.  The best way to find branches I've recently...

  • Best Tools and Resources for Web Professionals in 2015

    Looking for the right resources to help you satisfy the needs of your clients? On the lookout for the best tools to help you increase your revenue? Searching for the right software to help you improve your business? Well, then you’ve come to the right place....

  • JavaScript Polling

    Polling with JavaScript is one of those ugly but important functions within advanced front-end user experience and testing practices.  Sometimes there isn't the event you can hook into to signify that a given task is complete, so you need to get your hands dirty and simply poll for...

  • OSCON Portland:  Conference Giveaway and Discount!

    O'Reilly puts on the best web industry conferences in the world.  These conferences include Fluent Conference, Velocity Conference, and the upcoming OSCON in Portland, Oregon from July 20-24.  Open Source Convention (OSCON) is a conference that focuses specifically on open source developers and the tools and possibilities...

  • Prevent Chrome from Translating a Page

    A while back I shared my favorite Google Chrome extension:  Google Art Project.  I've enjoyed seeing beautiful art when I open a new tab -- it's brought genuine happiness to my day, however small that happiness may be.  About a week ago, however, the art presented had...