🏗️ Allow access to Config from Collectors

This commit is contained in:
Clément 2021-02-22 17:43:40 +01:00
parent c8bbc35886
commit 48cc6e9f28
3 changed files with 32 additions and 7 deletions

View File

@ -14,6 +14,14 @@ abstract class Collector
$this->pool = $pool;
}
/**
* @return \Shikiryu\WebGobbler\Config
*/
public function getConfig(): Config
{
return $this->pool->getConfig();
}
/**
* @return string
*/

View File

@ -22,13 +22,13 @@ class YahooImageCollector extends Collector
*/
public function getRandomImage()
{
$word_to_search = $this->generateRandomWord();
$word_to_search = $this->getConfig()->get('collector.keywords.keywords', $this->generateRandomWord());
$client = new Client();
$crawler = $client->request('GET', sprintf(self::SEARCH_URL, $word_to_search));
$imgs = $crawler->filter('noscript img');
if ($imgs->count() < 20) {
return $this->getRandomImage();
return $this->getRandomImage(); // FIXME possible infinite loop if keywords is given
}
$img_url = $imgs->eq(random_int(0, $imgs->count() - 1))->attr('src');

View File

@ -21,16 +21,23 @@ class Pool
*/
protected $nb_images = 0;
/**
* @var \Shikiryu\WebGobbler\Config
*/
protected $config;
/**
* Pool constructor.
*
* @param array $config
*/
public function __construct(array $config)
public function __construct(Config $config)
{
$this->config = $config;
$pool_config = $config->get('pool');
$collectors = [];
if (array_key_exists('collectors', $config)) {
$collectors = $config['collectors'];
if (array_key_exists('collectors', $pool_config)) {
$collectors = $pool_config['collectors'];
}
$all_collectors = Collector::getAllCollectors($this);
@ -44,18 +51,25 @@ class Pool
}
}
$pool_dir = $config['directory'];
$pool_dir = $pool_config['directory'];
if (!is_dir($pool_dir) && !mkdir($pool_dir) && !is_dir($pool_dir)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $pool_dir));
}
$this->pool_directory = $pool_dir;
$this->nb_images = $config['nb_images']; // FIXME
$this->nb_images = $pool_config['nb_images']; // FIXME
$this->prepareCollectors();
}
public function getConfig()
{
return $this->config;
}
/**
* @return string
*/
public function getPoolDirectory()
{
return $this->pool_directory;
@ -100,6 +114,9 @@ class Pool
{
foreach ($this->collectors as $collector) {
$directory = $collector->getPoolDirectory();
if (!is_dir($directory) && !mkdir($directory) && !is_dir($directory)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $directory));
}
$images = glob($directory.'/*.{jpg,gif,png}', GLOB_BRACE);
if (count($images) < $this->nb_images) {
$collector->getRandomImages($this->nb_images - count($images));