Create Digg URLs Using PHP

By  on  

Digg recently came out with a sweet new feature that allows users to create Tiny Digg URLs which show a Digg banner at the top allowing easy access to vote for the article from the page. While I love visiting Digg every once in a while, I'd rather grab the URL remotely. Here's how to do so using PHP.

The PHP

/* function that grabs the response from digg */
function get_digg_url($url,$app_key)
{
	$return_xml = file_get_contents('http://services.digg.com/url/short/create?type=xml&appkey='.urlencode($app_key).'&url='.urlencode($url));
	$digg_url = get_match('/short_url="(.*)"/isU',$return_xml);
	return $digg_url;
}

/* function that runs a regex to scrub for the url */
function get_match($regex,$content)
{
	preg_match($regex,$content,$matches);
	return $matches[1];
}

/* important! set a fake user agent */
ini_set('user_agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6');

/* url i want the digg URL for, and my app key which is a URL */
$url = 'https://davidwalsh.name/penetrated-diggnation';
$app = 'https://davidwalsh.name';

/* get the digg URL! */
$digg_url = get_digg_url($url,$app);  //returns:  http://digg.com/u1DOk

Very quick and simple. You could also use PHP's cURL library if you wanted.

The XML Response

<?xml version="1.0" encoding="UTF-8"?>
<shorturls count="1" offset="0" timestamp="1238884894" total="1">
	<shorturl link="https://davidwalsh.name/penetrated-diggnation" short_url="http://digg.com/u1DOk" view_count="0"/>
</shorturls>

XML is a beautiful thing, isn't it? You may also request a JSON response.

Like this Digg article? I suppose you could Digg it! Or you can check out the time I was featured on DiggNation!

Recent Features

  • By
    Responsive Images: The Ultimate Guide

    Chances are that any Web designers using our Ghostlab browser testing app, which allows seamless testing across all devices simultaneously, will have worked with responsive design in some shape or form. And as today's websites and devices become ever more varied, a plethora of responsive images...

  • By
    fetch API

    One of the worst kept secrets about AJAX on the web is that the underlying API for it, XMLHttpRequest, wasn't really made for what we've been using it for.  We've done well to create elegant APIs around XHR but we know we can do better.  Our effort to...

Incredible Demos

  • By
    MooTools Equal Heights Plugin:  Equalizer

    Keeping equal heights between elements within the same container can be hugely important for the sake of a pretty page. Unfortunately sometimes keeping columns the same height can't be done with CSS -- you need a little help from your JavaScript friends. Well...now you're...

  • By
    CSS Transforms

    CSS has become more and more powerful over the past few years and CSS transforms are a prime example. CSS transforms allow for sophisticated, powerful transformations of HTML elements.  One or more transformations can be applied to a given element and transforms can even be animated...

Discussion

  1. Note: My attempts with cURL were unsuccessful but that was likely a hosting provider issue.

  2. Excellent David.

    However, maybe this would be better suited to an object to bring those depended functions together. Additionally, it maybe best to avoid all those ini_set shenanigans and embrace the XML rather that RegEx’n it.

    #Object
    class ShortDiggURL
    {
        protected $sAppKey;
    
        public function __construct($sAppKey)
        {
            $this->sAppKey = $sAppKey;
        }
    
        public function getShortURLFor($sLongURL)
        {
            $rContext = stream_context_create(
                array(
                    'http' => array(
                        'timeout'       =>  15,
                        'user_agent'    => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6'
                    )
                )
            );
            $oResponse = @new SimpleXMLElement(
                file_get_contents(
                    sprintf(
                        'http://services.digg.com/url/short/create?type=xml&appkey=%s&url=%s',
                        urlencode($this->sAppKey),
                        urlencode($sLongURL)
                    ),
                    null,
                    $rContext
                )
            );
            if($oResponse instanceof SimpleXMLElement)
            {
                return $oResponse->shorturl['short_url'];
            }
            return false;
        }
    }
    
    #Usage
    $oShortDiggURL = new ShortDiggURL('http://davidwalsh.name');
    echo $oShortDiggURL->getShortURLFor('http://davidwalsh.name/penetrated-diggnation');
    
  3. @Anthony Sterling: I like the regex because it prevents the overhead of bringing in XML parsing. In all honesty, not using a XML reader is probably safer.

  4. Thanks, this is nice… I wonder how long tinyurl will last now that digg competes with them?

  5. Very nice! For some reason I wasn’t getting any return HTTP request – and the reason was because I didn’t set the User Agent! Thanks for the tip!

  6. Keith

    How would I get this to link from an image?

    I have my own image, how would I get that image to link to the Auto-generated DIGG Url?

    Thanks,
    Keith.

  7. This script does not work anymore, can you please tell me how to post to digg using PHP. Thanks.

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