Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
hacman rpc
<?php
$header = <<<EOH
/*****************************************************************************
* Hacman Active Member RFIDs
* Requirements: PHP 5.3+, PHP XMLRPC and CURL Extensions
*
* Options Available:
* ---------------------
* -h, --help shows this message
* -u, --username the username for the RPC call
* -p, --password the password for the RPC call
* -b, --blogid the blogid for RPC call, defaults to 1 if not set
* --filename set the filename to be exported, defaults to stdOut
*
*****************************************************************************/
EOH;
$required_extensions = array(
'xmlrpc' => "Script requires XMLRPC php Extension installed and enabled",
'curl' => "Script requires CURL php Extension installed and enabled"
);
foreach ($required_extensions as $extension => $message) {
if (!extension_loaded($extension)) {
die($message."\n");
}
}
$options = getopt('u:p:b::h::', array('username', 'password', 'blogid', 'filename', 'help'));
if (isset($options['h']) || isset($options['help'])) {
die(trim(str_replace('*', '', $header), '\\/'));
}
$maps = array(
'u' => 'username',
'p' => 'password',
'b' => 'blogid'
);
foreach($maps as $from => $to) {
if (isset($options[$from])) {
$options[$to] = $options[$from];
}
}
if (!isset($options['password']) || !isset($options['username'])) {
die('Username and Password required for operation');
}
if (!isset($options['blogid'])) {
$options['blogid'] = 1;
}
class XMLRPC_Client
{
private $url;
function __construct($url)
{
$this->url = $url;
}
/**
* Call the XML-RPC method named $method and return the results, or die trying!
*
* @param string $method XML-RPC method name
* @param mixed ... optional variable list of parameters to pass to XML-RPC call
*
* @return array result of XML-RPC call
*/
public function call()
{
// get arguments
$params = func_get_args();
$method = array_shift($params);
$post = xmlrpc_encode_request($method, $params);
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// issue the request
$response = curl_exec($ch);
$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curl_errorno = curl_errno($ch);
$curl_error = curl_error($ch);
curl_close($ch);
// check for curl errors
if ($curl_errorno != 0) {
die("Curl ERROR: {$curl_errorno} - {$curl_error}n");
}
// check for server errors
if ($response_code != 200) {
die("ERROR: non-200 response from server: {$response_code} - {$response}n");
}
return xmlrpc_decode($response);
}
}
$client = new XMLRPC_Client("http://hacman.org.uk/xmlrpc.php");
$users = $client->call(
'wp.getUsers',
$options['blogid'],
$options['username'],
$options['password'],
array(
'role' => 'active_member'
),
array(
'rfid_code',
'nickname'
)
);
if (isset($users['faultCode'])) {
die($users['faultString']);
}
$target = 'php://output';
if (isset($options['filename'])) {
$target = $options['filename'];
}
$fp = fopen($target, 'w');
foreach ($users as $user) {
if (!isset($user['rfid_code'])) {
continue;
}
fputcsv($fp, array($user['nickname'], $user['rfid_code']));
}
fclose($fp);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment