2013-07-25 3 views
0

Я хочу проверить, содержит ли веб-сайт схему разметки schema.org? Я делаю следующее:Zend_Dom_Query для проверки разметки schema.org

$domain = 'http://agents.allstate.com/william-leahy-mount-prospect-il.html';    
$client = new Zend_Http_Client(); 
      $client->setUri($domain); 
      $response = $client->request(); 
      $html = $response->getBody(); 
      $dom = new Zend_Dom_Query($html); 
      $resultSchema = $dom->query('body'); 

      foreach($resultSchema as $r){ 
       $data = $r->hasAttribute('itemprop'); 
       if($data) 
        echo 'YEs'; 
       else 
        echo 'No'; 
      } 

Я не понимаю, как это найти. Правильно ли это? Разметка schema.org, используемая на веб-сайте, может использовать любой элемент html. Как я могу запросить все элементы и найти тот, который содержит разметку schema.org?

ответ

0

Наконец, после долгого поиска и чтения был получен ответ! Вот как это делается, если кто-то все еще ищет ответ.

$seperator = '|'; $dbData = ''; 
$domain = 'http://agents.allstate.com/william-leahy-mount-prospect-il.html';    
$client = new Zend_Http_Client(); 
$client->setUri($domain); 
$response = $client->request(); 
$html = $response->getBody(); 
$dom = new Zend_Dom_Query($html); 
$result = $dom->queryXpath('//*[@itemtype="http://schema.org/LocalBusiness"]'); 
      if($result->count()){ 
       foreach ($result as $r) { 
        if($r->hasChildnodes()) { 
         $lbHtml = $r->C14N(); 

         $dom2 = new Zend_Dom_Query($lbHtml); 
         $lbname = $dom2->queryXpath('//*[@itemprop="name"]'); 
         if($lbname->count()){ 
          foreach ($lbname as $name) { 
           $name = $name->nodeValue; 
          } 
         } 
        } 
       } 
      } 

      if(isset($name)) 
       $dbData .= 'name:'.$name.$seperator; 
      else 
       $dbData .= 'name:'.$seperator; 

      $result = $dom->queryXpath('//*[@itemtype="http://schema.org/PostalAddress"]'); 
      if($result->count()){ 
       foreach ($result as $r) { 
        $address = $r->nodeValue; 
       } 
      } 

      if(isset($address)) 
       $dbData .= 'address:'.$address.$seperator; 
      else 
       $dbData .= 'address:'.$seperator; 

      $result = $dom->queryXpath('//*[@itemprop="telephone"]'); 
      if($result->count()){ 
       foreach ($result as $r) { 
        $telephone = $r->nodeValue; 
       } 
      } 

      if(isset($telephone)) 
       $dbData .= 'telephone:'.$telephone.$seperator; 
      else 
       $dbData .= 'telephone:'.$seperator; 

      $dbData = trim($dbData,'|'); 

$ dbДетали будут содержать строку, содержащую все свойства данных schema.org. Надеюсь, это поможет!

Смежные вопросы