folder = $imgFolder; $this->word = $word; $this->hitPosition = (int) rand(0,10); if (ZAP_LOG == true) { $this->log = new Log($this->folder); } $config = Config::getInstance(); $engines = $config->retrieve('engines'); $this->engine = $engines[array_rand($engines)]; } /** * download image that corresponds to $keyWord * returns filename of image if downloaded succeeded, or false if failed * @return string $localUrl / boolean */ public function getImage() { $imgData = $this->getImageData(); if ($imgData == false) { $this->addLog('error','Search: ', 'bad search data received' ); return false; } $this->addLog('ok', 'Engine: ', $imgData['engine']); $localUrl = $this->imageToTmp($imgData['results'], $this->folder); return $localUrl; } /** * Returns an array that contains searchdata for $word * @return array $searchData or false */ public function getImageData() { $clazz = ucfirst($this->engine); $search = new $clazz(); $search->setQuery(urlencode($this->word)); $search->setParam('start', $this->hitPosition); $search->setParam('size', $this->numberResults); $searchData = $search->getData(); return $searchData['result'] == false ? false : $searchData; } /** * Saves image or returns false * @param array $results * @param string $tmpDir * @param integer $hit * @return mixed */ private function imageToTmp($results, $tmpDir, $hit = 0) { $first = $results[$hit]['clickurl']; $imageName = $tmpDir . DIRECTORY_SEPARATOR . $this->filename($first); $myCurl = new ZAPCurl($first, true); $imageData = $myCurl->fetchCurlData(); if($imageData == false) { $this->addLog('error', 'Search: ', 'received empty file' . PHP_EOL); return false; } if(file_put_contents($imageName, $imageData)) { if($this->imageTypeOk($imageName)) { $this->addLog('ok', 'Search: ', "downloaded to $imageName"); $this->addLog('ok', 'Search: ', 'source: ' . $results[$hit]['referer']); $this->addLog('ok', 'Search: ', 'thumb: ' . $results[$hit]['thumb'] . PHP_EOL); return $imageName; } else { $this->addLog('error', 'Search: ', 'wrong file type: image removed'); unlink($imageName); $nextHit = $hit + 1; return $this->imageToTmp($results, $tmpDir, $nextHit); } } else { $this->addLog('error', 'Search: ', 'failed saving image'); return false; } } /** * Check mime type of image * @param string $fileUri * @return boolean */ private function imageTypeOk($fileUri) { $mimeType = mime_content_type($fileUri); return in_array($mimeType, $this->allowedFileTypes); } /** * Gets filename from a url * @param string $urlString * @return string */ private function filename($urlString) { $ar = explode('/', $urlString); $filename = array_pop($ar); // Strip query string so the saved file has a real extension $filename = explode('?', $filename)[0]; return $filename; } /** * Log messages */ private function addLog($type, $head, $message) { if (ZAP_LOG == true) { $this->log->addToLog($type, $head, $message); } return; } } ?>