"Frequencies", "Pattern" =>"", "Limit" => 3, "Wortlaenge" => 10, "Wort" => "Hund", "Word" => "Hund", "Wort 1" => "Hund", "Wort 2" => "Katze", "Wortart" => "N", "Mindestsignifikanz" => 0.75 ); echo "Retrieving $servletUrl...\n"; $content = file_get_contents($servletUrl); $content = mb_convert_encoding($content, "UTF-8", $servletUrlEncoding); $doc = new DOMDocument(); $previous_value = libxml_use_internal_errors(TRUE); //surpress HTML validation warnings, see http://stackoverflow.com/a/7082487/413531 if(!$doc->loadHTML($content)){ die("Error: Could not generate HTML document from $servletUrl!"); } libxml_clear_errors(); libxml_use_internal_errors($previous_value); $xpath = new DOMXPath($doc); $expression = "//b"; echo "Generating WSDL URLs...\n"; $nodes = $xpath->query($expression); if($nodes->length == 0){ die("Error: No services found on $servletUrl!"); } $allFiles = array(); $serviceId = 0; foreach($nodes as $node){ $serviceName = $node->nodeValue; $wsdlUrl = sprintf($wsdlPattern, $serviceName); $serviceInfos[$serviceId] = array("name" => $serviceName, "wsdl"=> $wsdlUrl, "description" => "", "input" => array(), "status" => "", "authorization" => ""); $serviceId++; } echo "Starting generation of wrapper class...\n"; $wrapperContent = array(); $wrapperContentHeader = array(); $wrapperContentFooter = array(); $wrapperContentHeader[] = "1, exceptions=>1]. Options array for SoapClient'; $wrapperContent[] = '**/'; $wrapperContent[] = 'public function __construct($username = "anonymous", $password = "anonymous", $options = array("trace" => 1, "exceptions" => 1)){'; $wrapperContent[] = "\t".'$this->username = $username;'; $wrapperContent[] = "\t".'$this->password = $password;'; $wrapperContent[] = "\t".'$this->options = $options;'; $wrapperContent[] = '}'; $wrapperContent[] = ''; // descriptions $expression = "//tr[4]/td[4]"; $nodes = $xpath->query($expression); $serviceId = 0; foreach($nodes as $node){ $description = trim(html_entity_decode($node->nodeValue)); $serviceInfos[$serviceId]["description"] = $description; $serviceId++; } // input $expression = "//tr[6]/td[4]"; $nodes = $xpath->query($expression); $serviceId = 0; foreach($nodes as $node){ $input = trim(html_entity_decode($node->nodeValue)); $inputs = explode(",", $input); foreach($inputs as $input){ $serviceInfos[$serviceId]["input"][] = trim($input); } $serviceId++; } // status $expression = "//tr[8]/td[4]"; $nodes = $xpath->query($expression); $serviceId = 0; foreach($nodes as $node){ $status = trim(html_entity_decode($node->nodeValue)); $serviceInfos[$serviceId]["status"] = $status; $serviceId++; } // authorization $expression = "//tr[10]/td[4]"; $nodes = $xpath->query($expression); $serviceId = 0; foreach($nodes as $node){ $authorization = trim(html_entity_decode($node->nodeValue)); $serviceInfos[$serviceId]["authorization"] = $authorization; $serviceId++; } foreach($serviceInfos as $info){ $wrapperContent[] = "/**"; $wrapperContent[] = "* ".$info["description"]; $wrapperContent[] = "*"; $wrapperContent[] = "* Status: ".$info["status"]; $wrapperContent[] = "*"; $wrapperContent[] = "* Authorization: ".$info["authorization"]; $wrapperContent[] = "*"; $wrapperContent[] = "* WSDL-URL: @see ".$info["wsdl"]; $wrapperContent[] = "*"; $wrapperContent[] = "* Service overview: @see ".$servletUrl; $wrapperContent[] = "*"; $params = array(); foreach($info["input"] as $param){ $phpParam = String2Param($param); //TODO figure correct type out (instead of mixed) $wrapperContent[] = "* @param mixed ".$phpParam; $params[$param] = $phpParam; } $wrapperContent[] = "*"; //TODO figure correct return type out $wrapperContent[] = "* @return DataVector"; $wrapperContent[] = "*/"; $paramString = implode(", ",$params); $wrapperContent[] = 'public function '.$info["name"].'('.$paramString.', $corpus = "de"){'; $wrapperContent[] = "\t".'$url = "'.$info["wsdl"].'";'; $wrapperContent[] = "\t".'$options = $this->GetOptions();'; $wrapperContent[] = "\t".'$service = new SoapClient($url, $options);'; $wrapperContent[] = "\t".'$params = array();'; foreach($params as $param => $phpParam){ $wrapperContent[] = "\t".'$params[] = array("'.$param.'", '.$phpParam.');'; } $wrapperContent[] = "\t".'return $this->CallMethod($service, $params, $corpus);'; $wrapperContent[] = "}"; $wrapperContent[] = ""; echo "Method {$info["name"]} done...\n"; } $wrapperContent[] = '/**'; $wrapperContent[] = '*'; $wrapperContent[] = '* @return string[]'; $wrapperContent[] = '*/'; $wrapperContent[] = 'private function GetOptions(){'; $wrapperContent[] = "\t".'$options = $this->options;'; $wrapperContent[] = "\t".'$options["login"] = $this->username;'; $wrapperContent[] = "\t".'$options["password"] = $this->password;'; $wrapperContent[] = "\t".'return $options;'; $wrapperContent[] = "}"; $wrapperContent[] = ""; $wrapperContent[] = '/**'; $wrapperContent[] = '*'; $wrapperContent[] = '* @param SoapClient $service'; $wrapperContent[] = '* @param array $params'; $wrapperContent[] = '* @param string $corpus'; $wrapperContent[] = '* @return DataVector'; $wrapperContent[] = '*/'; $wrapperContent[] = 'private function CallMethod(SoapClient $service, array $params, $corpus = "de"){'; $wrapperContent[] = "\t".'$dataVectors = array();'; $wrapperContent[] = "\t".'foreach($params as $p){'; $wrapperContent[] = "\t"."\t".'$dataVectors[] = array("dataRow" => $p);'; $wrapperContent[] = "\t".'}'; $wrapperContent[] = "\t".'$parameters = array("dataVectors" => $dataVectors);'; $wrapperContent[] = "\t".'$request = array("objRequestParameters" => array("corpus" => $corpus, "parameters" => $parameters));'; $wrapperContent[] = "\t".'$result = $service->execute($request);'; $wrapperContent[] = "\t".'if(isset($result->executeReturn->result->dataVectors)){'; $wrapperContent[] = "\t\t".'return $result->executeReturn->result->dataVectors;'; $wrapperContent[] = "\t".'}'; $wrapperContent[] = "\t".'return null;'; $wrapperContent[] = "}"; $wrapperContent[] = ""; echo "Helper methods done...\n"; $wrapperContentFooter[] = "}"; $wrapperContentFooter[] = "?>"; $filepath = PathCombine($outputFolder, $wrapperFilename); echo "Saving wrapper class to $filepath...\n"; $content = implode("\n",$wrapperContentHeader)."\n".implode("\n\t",$wrapperContent)."\n".implode("\n",$wrapperContentFooter); file_put_contents($filepath,$content); echo "All done!\n"; echo "\n"; echo "Start generation of example file...\n"; $wrapperContent = array(); $wrapperContentFooter = array(); $wrapperContentHeader = array(); $wrapperContentHeader[] = " 1, "exceptions" => 1);'; $wrapperContent[] = '$wrapper = new '.$wrapperClassname.'($username, $password, $options);'; foreach($serviceInfos as $info){ $wrapperContent[] = "echo \"Test of method \\\"{$info['name']}\\\".\\n\";"; $wrapperContent[] = "echo \"This method is currently {$info['status']}.\\n\";"; if($info['authorization'] != 'FREE'){ $wrapperContent[] = "echo \"CAUTION: This method requires authorization. Please contact http://wortschatz.uni-leipzig.de/ to apply for an account.\\n\";"; } $params = array(); $wrapperContent[] = "echo \"Input parameters:\\n\";"; foreach($info["input"] as $param){ $phpParam = String2Param($param); //TODO figure correct type out (instead of mixed) if(!array_key_exists($param, $exampleValues)){ die("Error: Could not find example value for input parameter '$param'."); } $wrapperContent[] = $phpParam." = '".$exampleValues[$param]."';"; $params[$param] = $phpParam; $wrapperContent[] = "echo '".$phpParam."'.\" = '".$exampleValues[$param]."'\\n\";"; } $paramString = implode(", ",$params); $wrapperContent[] = 'try{'; $wrapperContent[] = "\t".'$result = $wrapper->'.$info["name"].'('.$paramString.');'; $wrapperContent[] = "\t".'echo "SUCCESS!\\n";'; $wrapperContent[] = "\techo \"Result:\\n\";"; $wrapperContent[] = "\t".'var_dump($result);'; $wrapperContent[] = '}'; $wrapperContent[] = 'catch(Exception $e){'; $wrapperContent[] = "\t".'echo "ERROR! ".$e->getMessage()."\n";'; $wrapperContent[] = '}'; $wrapperContent[] = 'echo "\n\n";'; $wrapperContent[] = ''; } $wrapperContentFooter[] = "?>"; $filepath = PathCombine($outputFolder, $exampleFilename); echo "Saving example file to $filepath...\n"; $content = implode("\n",$wrapperContentHeader)."\n\t".implode("\n\t",$wrapperContent)."\n".implode("\n",$wrapperContentFooter); file_put_contents($filepath,$content); echo "All done!\n";