Get a URL’s Reddit Score Using PHP and JSON

Since we can see Digg turning more into a funny-pic-and-vid site each day, I've turned my attention to Reddit. Reddit just seems more controlled and programmer-friendly. Since I have respect for Reddit I thought I'd put together a quick tutorial on how you can retrieve a URL's Reddit score using PHP.

The PHP

<?php /* settings */ $url = 'https://davidwalsh.name/9-signs-not-to-hire-that-web-guy'; $reddit_url = 'http://www.reddit.com/api/info.{format}?url='.$url; $format = 'json'; //use XML if you'd like...JSON FTW! $score = $ups = $downs = 0; //initialize /* action */ $content = get_url(str_replace('{format}',$format,$reddit_url)); //again, can be xml or json if($content) { if($format == 'json') { $json = json_decode($content,true); foreach($json['data']['children'] as $child) { // we want all children for this example $ups+= (int) $child['data']['ups']; $downs+= (int) $child['data']['downs']; //$score+= (int) $child['data']['score']; //if you just want to grab the score directly } $score = $ups - $downs; } } /* output */ echo "Ups: $ups<br />"; //21 echo "Downs: $downs<br />"; //8 echo "Score: $score<br />"; //13 /* utility function: go get it! */ function get_url($url) { $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,1); $content = curl_exec($ch); curl_close($ch); return $content; } ?>

Parsing the JSON is simple using json_encode with the value of true to make turn the JSON into an associate array. My example shows how you can grab the number of "ups" and "downs" -- not just the score. As with every API/web service, I highly recommend caching the result of your request.