В приведенной ниже функции я хотел бы указать список доменов для исключения из результатов. Какие существуют варианты? Сбор массива для исключения?
class KeywordSearch { const GOOGLE_SEARCH_XPATH = "//a[@class='l']"; public $searchQuery; public $numResults ; public $sites; public $finalPlainText = ''; public $finalWordList = array(); public $finalKeywordList = array(); function __construct($query,$numres=7){ $this->searchQuery = $query; $this->numResults = $numres; $this->sites = array(); } protected static $_excludeUrls = array('wikipedia.com','amazon.com','youtube.com','zappos.com');//JSB NEW private function getResults($searchHtml){ $results = array(); $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->formatOutput = false; @$dom->loadHTML($searchHtml); $xpath = new DOMXpath($dom); $links = $xpath->query(self::GOOGLE_SEARCH_XPATH); foreach($links as $link) { $results[] = $link->getAttribute('href'); } $results = array_filter($results,'self::kwFilter');//JSB NEW return $results; } protected static function kwFilter($value) { return !in_array($value,self::$_excludeUrls); }
protected static $_banUrls = array('foo.com','bar.com'); private function getResults($searchHtml){ $results = array(); $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->formatOutput = false; @$dom->loadHTML($searchHtml); $xpath = new DOMXpath($dom); $links = $xpath->query(self::GOOGLE_SEARCH_XPATH); foreach($links as $link) { //FILTER OUT SPECIFIC LINKS HERE $results[] = $link->getAttribute('href'); } $results = array_filter($results,'self::myFilter'); return $results; } protected static function myFilter($value) { return !in_array($value,self::$_banUrls); }
Поскольку вы отметили этот XPath, вот как это сделать с помощью функции XPath:
$html = <<< HTML <ul> <li><a href="http://foo.example.com"> <li><a href="http://bar.example.com"> <li><a href="http://baz.example.com"> </ul> HTML; $dom = new DOMDocument; $dom->loadHtml($html); $xp = new DOMXPath($dom); $query = '//a/@href[ not(contains(., "foo.example.com")) and not(contains(., "bar.example.com")) ]'; foreach ($xp->query($query) as $hrefAttr) { echo $hrefAttr->nodeValue; }
Это приведет к выводу:
http://baz.example.com
См. Xpath 1.0. спецификация для других возможных строковых функций для проверки узлов.