*/ class Etym { protected $baseURL; protected $domSearch; protected $pasteCmd; /** * Initalise with config options * * @param string $baseURL * @param string $domSearch * @param string $pasteCmd * @author Phil Burton */ public function __construct(string $baseURL, string $domSearch) { $this->baseURL = $baseURL; $this->domSearch = $domSearch; } /** * Search for and return etym defeiniton * * @return string * @author Phil Burton */ public function getDefinition(): string { $input = $this->readStdin(); $targetURL = $this->baseURL . $input; $dom = new Dom; $dom->loadFromUrl($targetURL, [], new Curl); $html = $dom->find($this->domSearch); if (!$html instanceof \PHPHtmlParser\Dom\Collection || count($html) <= 0) { echo "No entry found for '$input'!\n"; exit(2); } $definition = $this->cleanUpHtml($html[0]->innerHtml()); // echo $definition . "\n"; return $definition; } /** * Get and return the user input * * @return string * @author Phil Burton */ protected function readStdin(): string { $input = fgets(STDIN); if ($input === false) { echo "No input supplied!\n"; exit(1); } $input = rtrim($input, "\n"); return $input; } /** * Tidy and return the hmtl * * @param string $input * @return string * @author Phil Burton */ protected function cleanUpHtml(string $input): string { // Strip HTML Tags $clear = strip_tags($input); // Clean up things like & $clear = html_entity_decode($clear); // Strip out any url-encoded stuff $clear = urldecode($clear); // Replace Multiple spaces with single space $clear = preg_replace('/ +/', ' ', $clear); // Trim the string of leading/trailing space $clear = trim($clear); // Capitalise the first char. $clear = ucfirst($clear); return $clear; } }