postMessage("public", "just say hi to everyone"); * $pownce->execute(); * * // View public message list, but limit to 10 entries * $pownce->getPublicNotes(); * $pownce->addOption("limit", "10"); * $pownce->execute(); * * * Methods: * NOTES * getPublicNotes([$format]) * getUserNotes($user [, $format ]) * getNote($note_id [, $format ]) * getNoteRecipients($note_id [, $format ]) * * USER * getUserProfile($user [, $format]) * getRelationships($user, $relationship [, $format ]) * * AUTH * verifyAuth([$format]) * * POSTING * sendToList([$format]) * postMessage($note_to, $note_body [, $format ]) * postLink($note_to, $note_body, $url [, $format ]) * postEvent($note_to, $event_name, $event_location, $event_date [, $format ]) * postFile($note_to, $file [, $format]) * postReply($reply_to, $note_body [, $format ]) * * MODIFIER & EXECUTE * addOption($option_name, $value); * execute(); * * DEBUG * lastStatusCode() * lastAPICall() */ class Pownce { private $api_url = "http://api.pownce.com/2.0/"; private $credentials; private $app_key; private $http_status; private $last_api_call; private $api_call; private $internal_error; private $require_credentials = false; private $http_post = false; private $options_nonauth = array(""); private $options_auth = array(""); function __construct($username, $password, $app_key) { $this->credentials = base64_encode($username.":".$password); $this->app_key = $app_key; } function getPublicNotes($format = "xml") { $this->options_nonauth = array("type","limit","page","since_id", "type" => array("messages", "links", "events")); $api_call = $this->api_url ."note_lists.". $format; $api_call .= "?app_key=". $this->app_key; $this->api_call = $api_call; } function getUserNotes($user, $format = "xml") { $this->options_nonauth = array("type","limit","page","since_id", "type" => array("messages", "links", "events")); $this->options_auth = array( "filter","set", "filter" => array("notes","replies","sent","public","private","nonpublic")); $api_call = $this->api_url ."note_lists/". $user .".". $format; $api_call .= "?app_key=". $this->app_key; $this->api_call = $api_call; } function getNote($note_id, $format = "xml") { $this->options_nonauth = array("show_replies","page", "show_replies" => array("true","false")); $api_call = $this->api_url ."notes/". $note_id .".". $format; $api_call .= "?app_key=". $this->app_key; $this->api_call = $api_call; } function getNoteRecipients($note_id, $format = "xml") { $this->options_nonauth = array("limit","page"); $api_call = $this->api_url ."notes/". $note_id ."/recipients.". $format; $api_call .= "?app_key=". $this->app_key; $this->api_call = $api_call; } function getUserProfile($user, $format = "xml") { $api_call = $this->api_url ."users/". $user .".". $format; $api_call .= "?app_key=". $this->app_key; $this->api_call = $api_call; } function getRelationships($user, $relationship , $format = "xml") { $this->options_nonauth = array("limit","page"); if($relationship != "friends" && $relationship != "fans" && $relationship != "fan_of") { $this->internal_error .= "Invalid relationship value (". $relationship .")
"; } $api_call = $this->api_url ."users/". $user ."/". $relationship .".". $format; $api_call .= "?app_key=". $this->app_key; $this->api_call = $api_call; } function verifyAuth($format = "xml") { $this->require_credentials = true; $api_call = $this->api_url ."auth/verify.". $format; $api_call .= "?app_key=". $this->app_key; $this->api_call = $api_call; } function sendToList($format = "xml") { $this->require_credentials = true; $api_call = $this->api_url ."send/send_to.". $format; $api_call .= "?app_key=". $this->app_key; $this->api_call = $api_call; } function postMessage($note_to, $note_body, $format = "xml") { $this->require_credentials = true; $this->http_post = true; $api_call = $this->api_url ."send/message.". $format; $api_call .= "?app_key=". $this->app_key; $api_call .= "¬e_to=". urlencode($note_to); $api_call .= "¬e_body=". urlencode($note_body); $this->api_call = $api_call; } function postLink($note_to, $note_body, $url, $format = "xml") { $this->options_auth = array(""); $this->require_credentials = true; $this->http_post = true; $api_call = $this->api_url ."send/link.". $format; $api_call .= "?app_key=". $this->app_key; $api_call .= "¬e_to=". urlencode($note_to); $api_call .= "¬e_body=". urlencode($note_body); $api_call .= "&url=". urlencode($url); $this->api_call = $api_call; } function postEvent($note_to, $event_name, $event_location, $event_date, $format = "xml") { $this->options_auth = array("note_body"); $this->require_credentials = true; $this->http_post = true; $api_call = $this->api_url ."send/event.". $format; $api_call .= "?app_key=". $this->app_key; $api_call .= "¬e_to=". urlencode($note_to); $api_call .= "&event_name=". urlencode($event_name); $api_call .= "&event_location=". urlencode($event_location); $api_call .= "&event_date=". urlencode($event_date); $this->api_call = $api_call; } function postFile($note_to, $file, $pro = false, $format = "xml") { $this->options_auth = array("note_body"); $this->require_credentials = true; $this->http_post = true; $api_call = $this->api_url ."send/file"; $api_call .= ($pro) ? "_pro." : "."; $api_call .= $format; $api_call .= "?app_key=". $this->app_key; $api_call .= "¬e_to=". urlencode($note_to); $api_call .= "&media_file=@". $file; $this->api_call = $api_call; } function postReply($reply_to, $note_body, $format = "xml") { $this->options_auth = array("stars","rsvp", "stars" => array(1,2,3,4,5), "rsvp"=>array(1,2,3,4,5,6)); $this->require_credentials = true; $this->http_post = true; $api_call = $this->api_url ."send/reply.". $format; $api_call .= "?app_key=". $this->app_key; $api_call .= "&reply_to=". $reply_to; $api_call .= "¬e_body=". urlencode($note_body); $this->api_call = $api_call; } function addOption($option_name, $value) { /* Check to make sure a function has been called to add a filter too */ if($this->api_call == NULL) { $this->internal_error .= "No function has been called to add options to
"; } else { /* Validate filter */ if(in_array($option_name, $this->options_nonauth)) { $this->require_credentials = false; $option_validation = $this->options_nonauth; } else if(in_array($option_name, $this->options_auth)) { $this->require_credentials = true; $option_validation = $this->options_auth; } else { $this->internal_error .= "Invalid option (". $option_name .")
"; } if(count($option_validation[$option_name]) > 0) { if(!in_array($value, $option_validation[$option_name])) { $this->internal_error .= "Invalid value (". $value .") for option \"". $option_name ."\"
"; } } $this->api_call .= "&". $option_name ."=". urlencode($value); } } function execute() { if($this->internal_error) { $result = $this->internal_error . "API Call: ". $this->api_call; $this->http_status = "N/A"; } else { $result = $this->apiCall($this->api_call, $this->require_credentials, $this->http_post); } // reset to defaults $this->last_api_call = $this->api_call; $this->api_call = NULL; $this->options_nonauth = array(""); $this->options_auth = array(""); $this->require_credentials = false; $this->http_post = false; $this->internal_error = NULL; return $result; } private function apiCall($api_url, $require_credentials = false, $http_post = false) { $curl_handle = curl_init(); curl_setopt($curl_handle, CURLOPT_URL, $api_url); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE); if ($require_credentials) { curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array("Authorization: Basic ". $this->credentials)); } if ($http_post) { curl_setopt($curl_handle, CURLOPT_POST, true); $post_array = explode("&", (substr($api_url, (strpos($api_url, "?") + strlen("?app_key=". $this->app_key)+1), strlen($api_url))) ); foreach($post_array as $pair) { $thisPair = explode("=", $pair); $postvars[$thisPair[0]] = urldecode($thisPair[1]); } curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $postvars ); } $pownce_data = curl_exec($curl_handle); $this->http_status = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE); $this->last_api_call = $api_url; curl_close($curl_handle); return $pownce_data; } /* Debugging & Information methods */ function setPownceAPI($api_url) { $this->api_url = $api_url; } function getPownceAPI() { return $this->api_url; } function lastStatusCode() { return $this->http_status; } function lastAPICall() { return $this->last_api_call; } } ?>