Created
December 14, 2011 19:49
-
-
Save joshuapowell/1478159 to your computer and use it in GitHub Desktop.
JustinTV JSON Caching
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Class SM | |
* | |
* Define a generic wrapper class with some system | |
* wide functionality. In this case we'll give it | |
* the ability to fetch a social media feed from | |
* another server for parsing and possibly caching. | |
* | |
*/ | |
class SM { | |
private $api, $init, $url; | |
public function fetch_page_contents ($url) { | |
$init = curl_init(); | |
try { | |
curl_setopt($init, CURLOPT_URL, $url); | |
curl_setopt($init, CURLOPT_HEADER, 0); | |
curl_setopt($init, CURLOPT_RETURNTRANSFER, 1); | |
} catch (Exception $e) { | |
error_log($e->getMessage()); | |
} | |
$output = curl_exec($init); | |
curl_close($init); | |
return $output; | |
} | |
} | |
/** | |
* Class JustinTV | |
* | |
* Define a specific site wrapper for getting the | |
* timeline for a specific user from the JustinTV | |
* website. Optionally you can return the code as | |
* a JSON string or as a decoded PHP array with the | |
* $api_decode argument in the get_timeline function. | |
* | |
*/ | |
class JustinTV extends SM { | |
private $timeline_document, | |
$api_user, | |
$api_format, | |
$api_url; | |
public function get_timeline ($api_user, $api_decode = 1, $api_format = 'json', $api_url = 'http://api.justin.tv/api/stream/list') { | |
$timeline_document = $api_url . '.' . $api_format . '?channel=' . $api_user; | |
$SM_init = new SM(); | |
$decoded_json = json_decode($SM_init->fetch_page_contents($timeline_document)); | |
// Make sure that our JSON is really JSON | |
if ($decoded_json === null && json_last_error() !== JSON_ERROR_NONE) { | |
error_log('Badly formed, dangerous, or altered JSON string detected. Exiting program.'); | |
} | |
if ($api_decode == 1) { | |
return $decoded_json; | |
} | |
return $SM_init->fetch_page_contents($timeline_document); | |
} | |
} | |
/** | |
* Instantiation of the class | |
* | |
* Instantiate our JustinTV class, fetch a user timeline | |
* from JustinTV for the user colcatz. The loop through | |
* the results and enter each of the individual results | |
* into a database table called cache_sm_justintv. | |
* | |
*/ | |
$SM_JustinTV = new JustinTV(); | |
$user_timeline = $SM_JustinTV->get_timeline('colcatz'); | |
foreach ($user_timeline AS $entry) { | |
// Here you could check whether the entry already exists in the system before you cache it, thus reducing duplicate ID's | |
$date = date('U'); | |
$query = sprintf("INSERT INTO `cache_sm_justintv` (`id`, `cache_content`, `date`) VALUES (%d, '%s', )", $entry->id, $entry, $date); | |
$result = mysql_query($query); | |
// Do some other stuff and then close the MySQL Connection when your done | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment