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

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

  1. CialisHaugh Avatar

    Musc Pharm: MuscPharm – Musc Pharm

  2. JoshuaMiz Avatar
    JoshuaMiz

    pharmacy drug store http://neokamagra.com/# Neo Kamagra

  3. DmuSaT Avatar

    Generic Tadalafil 20mg price: DmuCialis – cialis for sale

  4. JamesHow Avatar

    Ed Pills Afib: buy ed medication – EdPillsAfib

  5. DanielLox Avatar

    CorPharmacy: online pharmacy com – CorPharmacy

  6. SteveMar Avatar
    SteveMar

    rx online no prior prescription https://viagranewark.xyz/# Viagra Newark

  7. Williamopete Avatar
    Williamopete

    ViagraNewark ViagraNewark Viagra Newark

  8. SteveMar Avatar
    SteveMar

    legitimate canadian internet pharmacies https://corpharmacy.com/# Cor Pharmacy

  9. JamesHow Avatar

    EdPillsAfib: EdPillsAfib – ed medicines online

  10. Williamopete Avatar
    Williamopete

    EdPillsAfib EdPillsAfib low cost ed meds online

  11. SteveMar Avatar
    SteveMar

    canadian pharmacy pain meds http://viagranewark.com/# Generic Viagra for sale

  12. JamesHow Avatar

    Viagra Newark: ViagraNewark – viagra canada

  13. Williamopete Avatar
    Williamopete

    buy ed meds EdPillsAfib EdPillsAfib

  14. SteveMar Avatar
    SteveMar

    canadian online pharmacies ratings http://edpillsafib.com/# Ed Pills Afib

  15. JamesHow Avatar

    Viagra Newark: generic sildenafil – Viagra Newark

  16. Williamopete Avatar
    Williamopete

    EdPillsAfib ed treatments online low cost ed pills

  17. SteveMar Avatar
    SteveMar

    best canadian pharmacies https://corpharmacy.xyz/# Cor Pharmacy

  18. JamesHow Avatar

    canadian pharmacy no scripts: Cor Pharmacy – ez pharmacy

  19. Williamopete Avatar
    Williamopete

    Ed Pills Afib Ed Pills Afib Ed Pills Afib

  20. DanielLox Avatar

    CorPharmacy: bitcoin pharmacy online – Cor Pharmacy

  21. SteveMar Avatar
    SteveMar

    canadian pharmacy canada https://corpharmacy.com/# mail order pharmacy

  22. JamesHow Avatar

    Viagra Newark: Viagra Newark – ViagraNewark

  23. Williamopete Avatar
    Williamopete

    Sildenafil Citrate Tablets 100mg Viagra Newark cheapest viagra

  24. DanielLox Avatar

    ViagraNewark: best price for viagra 100mg – Sildenafil Citrate Tablets 100mg

  25. SteveMar Avatar
    SteveMar

    online pharmacies legitimate https://corpharmacy.xyz/# Cor Pharmacy

  26. JamesHow Avatar

    over the counter sildenafil: Order Viagra 50 mg online – Viagra Newark

  27. Williamopete Avatar
    Williamopete

    Cor Pharmacy CorPharmacy Cor Pharmacy

  28. DanielLox Avatar

    CorPharmacy: CorPharmacy – Cor Pharmacy

  29. SteveMar Avatar
    SteveMar

    canadian drugstore reviews http://corpharmacy.com/# Cor Pharmacy

  30. Williamopete Avatar
    Williamopete

    Ed Pills Afib discount ed pills ed rx online

  31. JamesHow Avatar

    CorPharmacy: Cor Pharmacy – Cor Pharmacy

  32. DanielLox Avatar

    CorPharmacy: canadian pharmacy 24 com – Cor Pharmacy

  33. SteveMar Avatar
    SteveMar

    cheapest canadian online pharmacy https://corpharmacy.xyz/# Cor Pharmacy

  34. Williamopete Avatar
    Williamopete

    buy viagra here ViagraNewark sildenafil online

  35. JamesHow Avatar

    ViagraNewark: buy Viagra online – ViagraNewark

  36. DanielLox Avatar

    online prescription for ed: Ed Pills Afib – ed online meds

  37. SteveMar Avatar
    SteveMar

    canadian pharmacy online cialis https://viagranewark.com/# Viagra Newark

  38. Williamopete Avatar
    Williamopete

    erectile dysfunction drugs online Ed Pills Afib EdPillsAfib

  39. JamesHow Avatar

    ViagraNewark: ViagraNewark – Generic Viagra for sale

  40. DanielLox Avatar

    Cor Pharmacy: cialis canadian pharmacy – Cor Pharmacy

  41. SteveMar Avatar
    SteveMar

    us online pharmacy https://viagranewark.com/# Cheapest Sildenafil online

  42. Williamopete Avatar
    Williamopete

    CorPharmacy CorPharmacy 77 canadian pharmacy

  43. JamesHow Avatar

    CorPharmacy: rx pharmacy online – CorPharmacy

Leave a Reply

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