diff --git a/DataStorage/Web/Builder.php b/DataStorage/Web/Builder.php new file mode 100644 index 000000000..4bcaa0da7 --- /dev/null +++ b/DataStorage/Web/Builder.php @@ -0,0 +1,106 @@ + + * @author Dennis Eichhorn + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://orange-management.com + */ +declare(strict_types=1); +namespace phpOMS\Utils\Crawler; + +use phpOMs\DataStorage\Database\Query\Builder as DatabaseQueryBuilder; + +/** + * Array utils. + * + * @category Framework + * @package phpOMS\Utils + * @author OMS Development Team + * @author Dennis Eichhorn + * @license OMS License 1.0 + * @link http://orange-management.com + * @since 1.0.0 + */ +class Builder extends DatabaseQueryBuilder +{ + + private function download($uri) + { + $finder = []; + $l11n = new Localization(); + + foreach($this->from as $from) { + $doc = new \DOMDocument(); + $doc->loadHTML(Rest::request($l11n, new Http($from))); + $finder[$from] = new \DomXPath($doc); + } + + return $finder; + } + + public function get(string $xpath) + { + $nodes = $finder->query($xpath); + } + + public function execute() + { + $finder = $this->download(); + $result = []; + $table = null; + + foreach($this->wheres as $column => $where) { + if($column === 'xpath') { + $table = $this->createTable($finder->query($where['value'])); + } + } + + foreach($this->columns as $column) { + } + } + + private function createTable($node) : array + { + if(strtolower($node->tagName) === 'table') { + return $this->createTableFromTable(); + } elseif(strtolower($node->tagName) === 'li') { + return $this->createTableFromList(); + } else { + return $this->createTableFromContent(); + } + } + + private function createTableFromTable($node) : array + { + // todo: get header either thead or (either first row or first column) + + // todo: get rest except tfoot + + // find first unique column and define as additional id (in addition to row number) + } + + private function createTableFromList($node) : array + { + $table = []; + $children = $node->childNodes; + + foreach($children as $child) { + $table[] = $child->asXML(); + } + + return $table; + } + + private function createTableFromContent($node) : array + { + return [$node->asXML()]; + } +} diff --git a/Message/Http/Rest.php b/Message/Http/Rest.php index a910f6e2c..37ab35dd9 100644 --- a/Message/Http/Rest.php +++ b/Message/Http/Rest.php @@ -30,26 +30,6 @@ namespace phpOMS\Message\Http; */ class Rest { - /** - * Url. - * - * @var Request - * @since 1.0.0 - */ - private $request = ''; - - /** - * Set url. - * - * @param Request $request Request - * - * @since 1.0.0 - * @author Dennis Eichhorn - */ - public function setRequest(Request $request) /* : void */ - { - $this->request = $request; - } /** * Make request. @@ -61,16 +41,16 @@ class Rest * @since 1.0.0 * @author Dennis Eichhorn */ - public function callApi($data = false) : string + public static function request(Request $request) : string { $curl = curl_init(); - switch ($this->request->getMethod()) { + switch ($request->getMethod()) { case RequestMethod::POST: curl_setopt($curl, CURLOPT_POST, 1); if ($data) { - curl_setopt($curl, CURLOPT_POSTFIELDS, $data); + curl_setopt($curl, CURLOPT_POSTFIELDS, $request->getData()); } break; case RequestMethod::PUT: @@ -81,7 +61,7 @@ class Rest curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, "username:password"); - curl_setopt($curl, CURLOPT_URL, $this->request->getUri()->__toString()); + curl_setopt($curl, CURLOPT_URL, $request->getUri()->__toString()); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); diff --git a/Utils/Crawler/WebParser.php b/Utils/Crawler/WebParser.php deleted file mode 100644 index d9559830c..000000000 --- a/Utils/Crawler/WebParser.php +++ /dev/null @@ -1,62 +0,0 @@ - - * @author Dennis Eichhorn - * @copyright Dennis Eichhorn - * @license OMS License 1.0 - * @version 1.0.0 - * @link http://orange-management.com - */ -declare(strict_types=1); -namespace phpOMS\Utils\Crawler; -/** - * Array utils. - * - * @category Framework - * @package phpOMS\Utils - * @author OMS Development Team - * @author Dennis Eichhorn - * @license OMS License 1.0 - * @link http://orange-management.com - * @since 1.0.0 - */ -class WebParser -{ - private $uri = ''; - private $doc = null; - private $finder = null; - - public function __construct(string $uri) - { - $this->uri = $uri; - } - - private function download($uri) - { - $handle = curl_init($uri); - curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); - - $this->doc = new \DOMDocument(); - $this->doc->loadHTML($this->content); - $this->finder = new \DomXPath($this->doc); - } - - public function get(string $xpath) - { - $nodes = $finder->query($xpath); - } - - private function parseTable($node) - { - } - - private function parseList($node) - { - } -}