Skip to the content...

Welcome to the David Walsh Blog. I'm a MooTools, Dojo, jQuery, CSS, and PHP Web Developer located in Madison, Wisconsin, United States. Please contact me if I can make your experience on my website better.

Create Digg URLs Using PHP

7 Responses »

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 = 'http://davidwalsh.name/penetrated-diggnation';
$app = 'http://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="http://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!

Discussion

  1. April 6, 2009 @ 7:27 am

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

  2. April 6, 2009 @ 7:43 am

    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.

    <?php
    #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. April 6, 2009 @ 7:54 am

    @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. April 6, 2009 @ 8:44 am

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

  5. May 19, 2009 @ 1:24 pm

    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
    June 9, 2009 @ 12:28 pm

    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.

Be Heard!

Share your thoughts with fellow developers of all skill levels! I want to hear from you!

Name*:
Email*:
Website:  
Wrap your code with <code> tags, f00!