Using the BitLy API to shorten urls

I was asked to place Twitter messages with product links when new products were added to a webshop. I’ve used my own Twitter class for posting the first test Tweet then I went looking for a shorten url a service to shorten the product links.

There are many url shorten services available on the internet, one of these services is Bitly.
The reasons why I’ve chosen Bitly:
– Urls don’t expire after a period of time.
– Bitly provides a click url summary (although Google Analytics can be used for this instead)
– Urls are short in length so i could use the remaining Tweet length for a small product description.
– And more important, they provide an easy to use API.
– Authentication does not require a password, we can use our API key instead.

Before we can connect to the API, we need a Bitly account, the account can be created at http://bit.ly/ to obtain a free API key.

The communication process is quite simple:
– Authenticate with your Bitly username and API key
– Call the right Bitly API url with the correct parameters for the action we want to perform
– Process the result

Below are some snippets of my Bitly class:

class BitLy
{
	/**
	 * Version of the bit ly api
	 * @var string
	 */
	private $sApiVersion = '2.0.1';

	/**
	 * Url of the api
	 * @var string
	 */
	private $sApiUrl = 'http://api.bit.ly/';

	/**
	 * username
	 * @var string
	 */
	private $sUsername;

	/**
	 * apikey
	 * @var string
	 */
	private $sApiKey;

	/**
	 * Set username and apikey
	 *
	 * @param string $sUsername
	 * @param string $sApiKey
	 * @return void
	 */
	public function  __construct($sUsername, $sApiKey) {
		$this->setUsername($sUsername);
		$this->setApiKey($sApiKey);
	}

	...

	/**
	 * shorten
	 *
	 * @param string $sLongUrl
	 * @return object with shortend url and hash
	 */
	public function shorten($sLongUrl)
	{
		return $this->process('shorten', urlencode($sLongUrl));
	}

	/**
	 * expand
	 *
	 * @param string $sShortUrl
	 * @return object with original url
	 */
	public function expand($sShortUrl)
	{
		return $this->process('expand', urlencode($sShortUrl));
	}

	...

	/**
	 * process, checks the action and returns the result
	 *
	 * @param string $sAction
	 * @param string $sParam
	 */
	private function process($sAction, $sUrlToParse)
	{
		// Check the url, if no http is present, add it
		if(strstr($sUrlToParse, 'http://') === false) {
			$sUrlToParse = 'http://'.$sUrlToParse;
		}

		// Compose action url
		$sParam = ($sAction == 'shorten') ? 'longUrl='.$sUrlToParse : 'shortUrl='.$sUrlToParse;
		$sActionUrl = $this->sApiUrl.$sAction.'?version='.$this->sApiVersion.'&'.$sParam.'&login='.$this->sUsername.'&apiKey='.$this->sApiKey.'&format=xml';

		// Get data
		libxml_use_internal_errors(true);
		$oData = simplexml_load_file($sActionUrl);
		if(!$oData) {
			throw new Exception('Api returned an invalid response!');
		}

		// Check for errors
		if($oData->statusCode == 'ERROR') {
			throw new Exception($oData->errorCode.': '.$oData->errorMessage);
		}

		// Build result object
		$oResult				= new stdClass();
		$oResult->requestedUrl	= $sUrlToParse;
		$oResult->resultUrl	= (string)$oData->results->nodeKeyVal->shortUrl;
		$oResult->hash		= (string)$oData->results->nodeKeyVal->hash;

		return $oResult;
	}

The reason why I build a result object is because of the fact that the server where the class is deployed doesn’t support JSON but JSON is also available as return format.

Furthermore, generated urls can be saved to our Bitly account history by adding an additional parameter to the url (history = 1). Another nice option of the API is to shorten the URL to a keyword, this can be achieved by sending the (keyword=your keyword) parameter along.

The complete API manual can be found at Google Code which also describes how to get click statistics of the shortened links.

Comments

969 responses to “Using the BitLy API to shorten urls”

  1. Uofmsipudge Avatar

    stromectol without prescription: PennIvermectin – Penn Ivermectin

  2. Philipjum Avatar
    Philipjum

    stromectol where to buy stromectol price stromectol tablets for humans

  3. Robertsoops Avatar
    Robertsoops
  4. Uofmsipudge Avatar

    PennIvermectin: ivermectin apple paste – Penn Ivermectin

  5. Philipjum Avatar
    Philipjum

    Uofm Sildenafil Uofm Sildenafil UofmSildenafil

  6. Uofmsipudge Avatar

    tadalafil online in india: Av Tadalafil – AvTadalafil

  7. Philipjum Avatar
    Philipjum

    Mass Antibiotics Mass Antibiotics zithromax prescription

  8. ArthurTah Avatar
    ArthurTah

    https://massantibiotics.com/# Over the counter antibiotics pills

  9. Robertsoops Avatar
    Robertsoops
  10. Uofmsipudge Avatar

    buy antibiotics: get antibiotics quickly – buy antibiotics from india

  11. Philipjum Avatar
    Philipjum

    Av Tadalafil AvTadalafil Av Tadalafil

  12. ArthurTah Avatar
    ArthurTah

    https://massantibiotics.com/# antibiotic without presription

  13. Uofmsipudge Avatar

    Uofm Sildenafil: how to get sildenafil cheapest – Uofm Sildenafil

  14. Philipjum Avatar
    Philipjum

    cheapest antibiotics get antibiotics quickly MassAntibiotics

  15. RichardCreab Avatar
    RichardCreab

    Av Tadalafil: buy generic tadalafil online – AvTadalafil

  16. Robertsoops Avatar
    Robertsoops
  17. Uofmsipudge Avatar

    Uofm Sildenafil: UofmSildenafil – Uofm Sildenafil

  18. Philipjum Avatar
    Philipjum

    ivermectin new zealand PennIvermectin ivermectin for dogs side effects

  19. RichardCreab Avatar
    RichardCreab

    ivermectin amazon: what worms does ivermectin kill in dogs – Penn Ivermectin

  20. Uofmsipudge Avatar

    UofmSildenafil: Uofm Sildenafil – sildenafil canada price

  21. Philipjum Avatar
    Philipjum

    buy ivermectin nz stromectol price in india j r enterprises ivermectin

  22. RichardCreab Avatar
    RichardCreab

    tadalafil 10mg generic: Av Tadalafil – AvTadalafil

  23. ArthurTah Avatar
    ArthurTah

    https://avtadalafil.xyz/# buy tadalafil 5mg online

  24. Uofmsipudge Avatar

    Av Tadalafil: AvTadalafil – cheapest tadalafil india

  25. Philipjum Avatar
    Philipjum

    Av Tadalafil generic tadalafil no prescription Av Tadalafil

  26. Robertsoops Avatar
    Robertsoops

    https://avtadalafil.com/# tadalafil 10mg coupon

  27. RichardCreab Avatar
    RichardCreab

    Uofm Sildenafil: sildenafil no prescription free shipping – UofmSildenafil

  28. binance h"anvisning Avatar

    Your point of view caught my eye and was very interesting. Thanks. I have a question for you.

  29. Bryanvat Avatar
    Bryanvat

    Fun88 Vietnam official access link Fun88 Vietnam main access page fun88

  30. Fun88Daw Avatar

    planbet login: planbet – PLANBET Bangladesh অফিসিয়াল লিংক

  31. DouglasVox Avatar
    DouglasVox

    d?a ch? vao Fun88 m?i nh?t: current Fun88 Vietnam URL – Fun88 updated entry link

  32. DonaldImpaw Avatar
    DonaldImpaw

    https://darazplay.blog/# DarazPlay রেফারেন্স লিংক Bangladesh

  33. JuliusRam Avatar
    JuliusRam

    https://fun88.sale/# Fun88 updated entry link

  34. Bryanvat Avatar
    Bryanvat

    Nagad88 updated access link Nagad88 latest working link Nagad88 Bangladesh বর্তমান লিংক

  35. Fun88Daw Avatar

    Nagad88 Bangladesh বর্তমান লিংক: nagad88 login – Nagad88 এ ঢোকার রেফারেন্স পেজ

  36. DouglasVox Avatar
    DouglasVox

    DarazPlay updated entry link: DarazPlay updated entry link – DarazPlay updated entry link

  37. DonaldImpaw Avatar
    DonaldImpaw

    https://fun88.sale/# Fun88 Vietnam official access link

  38. Bryanvat Avatar
    Bryanvat

    Dabet updated working link dabet Dabet Vietnam liên kết đang sử dụng

  39. Fun88Daw Avatar

    DarazPlay Bangladesh আপডেটেড লিংক: darazplay – DarazPlay updated entry link

  40. DouglasVox Avatar
    DouglasVox

    dabet: Dabet main access URL – Dabet updated working link

  41. DonaldImpaw Avatar
    DonaldImpaw

    https://darazplay.blog/# DarazPlay ব্যবহার করার বর্তমান ঠিকানা

  42. Bryanvat Avatar
    Bryanvat

    Nagad88 updated access link nagad88 nagad88 login

  43. Fun88Daw Avatar

    working DarazPlay access page: darazplay – DarazPlay Bangladesh official link

Leave a Reply

Your email address will not be published. Required fields are marked *