Notice
This API is now deprecated and will receive no further development or improvements, except for security updates.
Please use our new improved API instead at https://populi.co/api.
Example PHP Class
(Requires PHP 5) This is only an example - it's probably not production-ready, so please use at your own risk.
class Populi{ //Set to the correct URL for your college protected $api_url = 'https://YOUR_SUBDOMAIN_HERE.populiweb.com/api/index.php'; //You can set this to a valid access token - if null, you'll need to call login() before calling doTask() private $api_token = null; public function login( $user_name, $password ){ $post_params = [ 'username' => $user_name, 'password' => $password ]; $curl = curl_init(); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_params); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_URL, $this->api_url); $response = curl_exec($curl); curl_close($curl); if( $response !== false) { // Use SimpleXML to put results into Simple XML object (requires PHP5) $xml = new SimpleXMLElement($response); if( isset($xml->access_key) ){ $this->api_token = (string)$xml->access_key; } else{ throw new PopuliException("Oops! Please enter a valid username/password.", 'AUTHENTICATION_ERROR'); } } else{ throw new PopuliException("Oops! We're having trouble connecting to Populi right now... please try again later.", 'CONNECTION_ERROR'); } } public function logout(){ $this->api_token = null; } //By default, we'll attempt to parse the response into a SimpleXML object and return that. //For certain tasks, though, (like downloadFile), you'll want the raw response and will need to set return_raw to true. public function doTask( $task, $params = array(), $return_raw = false ){ if( !$this->api_token ){ throw new Exception("Whoops! Please call login before trying to perform a task!"); } $header = [ 'Authorization: ' . $this->api_token ]; $post_params = [ 'task' => $task ]; foreach($params as $param => $value){ if( is_array($value) ){ foreach($value as $array_key => $array_value){ if( is_array($array_value) ){
foreach($array_value as $array_value_key => $array_value_value){
$post_params["{$param}[{$array_key}][{$array_value_key}]"] = $array_value_value;
}
}
else{
$post_params["{$param}[{$array_key}]"] = $array_value;
} } } else{ $post_params[$param] = $value; } } $curl = curl_init(); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_params); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_URL, $this->api_url); $response = curl_exec($curl); curl_close($curl); if( $curl !== false ){ if( $return_raw ){ return $response; } else{ // Use Simple XML to put results into Simple XML object (requires PHP5) try{ $xml = new SimpleXMLElement($response); } catch(Exception $e){ throw new PopuliException('Problem parsing the XML response: ' . $e->getMessage()); } if( $xml->getName() == 'response' ){ return $xml; } else if( $xml->getName() == 'error' ){ throw new PopuliException((string)$xml->message, (string)$xml->code); } else{ //Woah - response or error should always be the root element throw new PopuliException('Problem parsing the XML response: invalid root element.'); } } } else{ throw new PopuliException('Could not connect to Populi.', 'CONNECTION_ERROR'); } } } class PopuliException extends Exception{ /******************************************************************************************* * We have our own variable since we don't feel like using numeric error codes * Should be one of: * AUTHENTICATION_ERROR - Couldn't login to the API (bad username/password) * BAD_PARAMETER - You called a task using parameters it didn't like * CONNECTION_ERROR - Thrown if we can't connect to Populi * LOCKED_OUT - Your user account is blocked (too many failed login attempts?) * OTHER_ERROR - Default generic error * PERMISSIONS_ERROR - You aren't allowed to call that task with those parameters * UKNOWN_TASK - You tried to call an API task that doesn't exist *********************************************************************************************/ public $populi_code = null; public function __construct($message, $populi_code = 'OTHER_ERROR'){ parent::__construct($message); $this->populi_code = $populi_code; } public function getPopuliCode(){ return $this->populi_code; } }
Usage:
$populi = new Populi(); $populi->login(YOUR_USERNAME, YOUR_PASSWORD); echo htmlentities($populi->doTask('getRoles', array(), true));usleep(1000000); // Wait 1 second before making another call, to avoid rate limiting
0 Comments