diff --git a/composer.json b/composer.json index f2aa192..865079d 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,10 @@ { "autoload": { "files": [ - "src/functions/simple-router.php" + "src/routing.php", + "src/validators.php", + "src/parsers.php", + "src/actions.php" ] }, "require": { diff --git a/src/actions.php b/src/actions.php new file mode 100644 index 0000000..ba0f066 --- /dev/null +++ b/src/actions.php @@ -0,0 +1,57 @@ +httpCode(200) + ->json([]); + } + + /** + * Parser action. + * + * @param string $parser + * + * @return string + */ + public function parse(string $parser):string + { + $url = input()->get('url')->value; + + if (!isValidUrl($url, getenv('API_HOSTNAME'))) { + return response() + ->httpCode(400) + ->json(['error' => 'Invalid URL']); + } + + $parsers = [ + 'graby' => 'graby', + 'opengraph' => 'opengraph', + ]; + + if (!isset($parsers[$parser])) { + return response() + ->httpCode(400) + ->json(['error' => 'Invalid parser']); + } + + try { + $result = call_user_func_array($parsers[$parser], [$url]); + + return response() + ->httpCode(200) + ->json($result); + } catch (\Exception $e) { + return response() + ->httpCode(500) + ->json(['error' => $e->getMessage()]); + } + } +} diff --git a/src/parsers.php b/src/parsers.php new file mode 100644 index 0000000..673c052 --- /dev/null +++ b/src/parsers.php @@ -0,0 +1,37 @@ +fetchContent($url); + + if (isset($result['headers'])) { + unset($result['headers']); + } + + return $result; +} + +/** + * Opengraph + * + * @param string $url + * + * @return array + */ +function opengraph(string $url) : array +{ + $consumer = new Consumer(); + $object = $consumer->loadUrl($url); + + return json_decode(json_encode($object), true); +} diff --git a/src/functions/simple-router.php b/src/routing.php similarity index 100% rename from src/functions/simple-router.php rename to src/routing.php diff --git a/src/validators.php b/src/validators.php new file mode 100644 index 0000000..61d5fbe --- /dev/null +++ b/src/validators.php @@ -0,0 +1,26 @@ +load(); -function isValidUrl( ? string $url, ? string $hostname) : bool -{ - if ($url === null) { - return false; - } - - if (trim($url) === '') { - return false; - } - - if (filter_var($url, FILTER_VALIDATE_URL) === false) { - return false; - } - - return parse_url($url)['host'] !== $hostname; -} - -function graby(string $url) : array -{ - $graby = new Graby(); - $result = $graby->fetchContent($url); - - if (isset($result['headers'])) { - unset($result['headers']); - } - - return $result; -} - -function opengraph(string $url) : array -{ - $consumer = new Consumer(); - $object = $consumer->loadUrl($url); - - return json_decode(json_encode($object), true); -} - -SimpleRouter::get('/', function() { - return response() - ->httpCode(200) - ->json([]); -}); - -SimpleRouter::get('/do/{parser}', function ($parser) { - $url = input()->get('url')->value; - - if (!isValidUrl($url, getenv('API_HOSTNAME'))) { - return response() - ->httpCode(400) - ->json(['error' => 'Invalid URL']); - } - - $parsers = [ - 'graby' => 'graby', - 'opengraph' => 'opengraph', - ]; - - if (!isset($parsers[$parser])) { - return response() - ->httpCode(400) - ->json(['error' => 'Invalid parser']); - } - - try { - $result = call_user_func_array($parsers[$parser], [$url]); - - return response() - ->httpCode(200) - ->json($result); - } catch (\Exception $e) { - return response() - ->httpCode(500) - ->json(['error' => $e->getMessage()]); - } -}); - +SimpleRouter::get('/', 'Action@home'); +SimpleRouter::get('/do/{parser}', 'Action@parse'); SimpleRouter::start();