openMemory(); $xml->startDocument('1.0', 'UTF-8'); $xml->startElement('root'); function write(XMLWriter $xml, $data) { foreach($data as $key => $value) { if(is_array($value)) { echo "$key\n"; $xml->startElement($key); write($xml, $value); $xml->endElement(); continue; } $xml->writeElement($key, $value); } } write($xml, $data); $xml->endElement(); return $xml->outputMemory(true); } $API = new ReflectionClass('MTAPIi'); if( $API->hasMethod($_GET['method']) ) { $method = $API->getMethod($_GET['method']); $parameters = $method->getParameters(); $method_parameters = Array(); foreach($parameters as $parameter) { $param = (Array) $parameter; $parameter_name = reset($param); if(isset( $_GET[$parameter_name] )) array_push($method_parameters, $_GET[$parameter_name]); elseif( 'xml' == $parameter->getName() && 'xml' == $_GET['output-type'] ) array_push($method_parameters, true); elseif( $parameter->isOptional() ) { /* empty */ } else { header('HTTP/1.0 400 Bad Request'); printf( 'Parameter %s is required but not supplied', $parameter_name ); } } $result = $method->invokeArgs($API, $method_parameters); switch($_GET['output-type']) { case 'json': $result = json_encode($result); header('Content-Type: application/json'); echo $result; break; case 'xml': header('Content-Type: application/xml'); echo $result; break; default: header('HTTP/1.0 400 Bad Request'); header('Content-Type: text/plain'); print_r($result); break; } } else { header('HTTP/1.0 404 Not Found'); echo 'There is no such method in the MT API.'; } ?>