public function __construct($config = array(), Client $client = null, ConfigBuilder $configBuilder = null)
{
$resolver = new OptionsResolver();
$resolver->setDefaults(array('debug' => false, 'rewrite_relative_urls' => true, 'singlepage' => true, 'multipage' => true, 'error_message' => '[unable to retrieve full-text content]', 'error_message_title' => 'No title found', 'allowed_urls' => array(), 'blocked_urls' => array(), 'xss_filter' => true, 'content_type_exc' => array('application/zip' => array('action' => 'link', 'name' => 'ZIP'), 'application/pdf' => array('action' => 'link', 'name' => 'PDF'), 'image' => array('action' => 'link', 'name' => 'Image'), 'audio' => array('action' => 'link', 'name' => 'Audio'), 'video' => array('action' => 'link', 'name' => 'Video'), 'text/plain' => array('action' => 'link', 'name' => 'Plain text')), 'content_links' => 'preserve', 'http_client' => array(), 'extractor' => array()));
// @TODO: add more validation ? (setAllowedTypes)
$resolver->setAllowedValues('content_links', array('preserve', 'footnotes', 'remove'));
$this->config = $resolver->resolve($config);
$this->debug = (bool) $this->config['debug'];
$this->logger = new NullLogger();
if ($this->debug) {
$this->logger = new Logger('graby');
$this->logger->pushHandler(new StreamHandler(dirname(__FILE__) . '/../log/graby.log'));
}
$this->configBuilder = $configBuilder;
if (null === $this->configBuilder) {
$this->configBuilder = new ConfigBuilder(isset($this->config['extractor']['config_builder']) ? $this->config['extractor']['config_builder'] : [], $this->logger);
}
$this->extractor = new ContentExtractor($this->config['extractor'], $this->logger, $this->configBuilder);
$this->httpClient = new HttpClient($client ?: new Client(array('handler' => new SafeCurlHandler(), 'defaults' => array('cookies' => true))), $this->config['http_client'], $this->logger);
$this->punycode = new Punycode();
}