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
    CSS @supports

    Feature detection via JavaScript is a client side best practice and for all the right reasons, but unfortunately that same functionality hasn't been available within CSS.  What we end up doing is repeating the same properties multiple times with each browser prefix.  Yuck.  Another thing we...

  • By
    How I Stopped WordPress Comment Spam

    I love almost every part of being a tech blogger:  learning, preaching, bantering, researching.  The one part about blogging that I absolutely loathe:  dealing with SPAM comments.  For the past two years, my blog has registered 8,000+ SPAM comments per day.  PER DAY.  Bloating my database...

Incredible Demos

  • By
    MooTools Zebra Table Plugin

    I released my first MooTools class over a year ago. It was a really minimalistic approach to zebra tables and a great first class to write. I took some time to update and improve the class. The XHTML You may have as many tables as...

  • By
    Check All/None Checkboxes Using MooTools

    There's nothing worse than having to click every checkbox in a list. Why not allow users to click one item and every checkbox becomes checked? Here's how to do just that with MooTools 1.2. The XHTML Note the image with the ucuc ID -- that...

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!