2012-04-01 1 views
0

Я пытаюсь получить мета-теги из веб-сайтов и повторить результат, он работает хорошо до сих пор, но я нашел внешнюю проблему ...Выбор между двумя типами метатегов

Я использую этот код :

static private function _parse($HTML) { 
    $old_libxml_error = libxml_use_internal_errors(true); 

    $doc = new DOMDocument(); 
    $doc->loadHTML($HTML); 

    libxml_use_internal_errors($old_libxml_error); 

    $tags = $doc->getElementsByTagName('meta'); 
    if (!$tags || $tags->length === 0) { 
     return false; 
    } 

    $page = new self(); 

    foreach ($tags AS $tag) { 
     if ($tag->hasAttribute('property') && 
      strpos($tag->getAttribute('property'), 'og:') === 0) { 
      $key = strtr(substr($tag->getAttribute('property'), 3), '-', '_'); 
      $page->_values[$key] = $tag->getAttribute('content'); 
     } 
    } 


    if (empty($page->_values)) { return false; } 

    return $page; 
} 

Когда URL, который я пытаюсь принести есть мета-теги, используя атрибут объявления «свойство» (Ex: <meta property="title">) все идет хорошо, как код, предполагают, чтобы сделать ... но некоторые URL-адреса использует атрибут «имя» (пример: <meta name="title">) вместо «свойство» ...

Итак, мне нужно найти решение для извлечения значений из «свойства», а если оно пустое, верните значения из «name» ...

Я пробовал кое-что, но не преуспел до сих пор .. Любой есть идеи?

+1

'str_ireplace ('

ответ

0

Может быть, это

foreach ($tags AS $tag) { 
    if ($tag->hasAttribute('property') && 
     strpos($tag->getAttribute('property'), 'og:') === 0) { 
     $key = strtr(substr($tag->getAttribute('property'), 3), '-', '_'); 
     $page->_values[$key] = $tag->getAttribute('content'); 
    } else if ($tag->hasAttribute('name') && 
     strpos($tag->getAttribute('name'), 'og:') === 0) { 
     $key = strtr(substr($tag->getAttribute('name'), 3), '-', '_'); 
     $page->_values[$key] = $tag->getAttribute('content'); 
    } 
} 

Как заметил OZ_, вы могли бы использовать str_ireplace переименовать все мета имя для мета собственности.

+0

Спасибо! Это решит проблему! :) Ну, у меня есть еще один, чтобы решить сейчас ... Я использую «завиток» для получения Url, и есть некоторые сайты, на которых я просто не могу извлечь метаданные вообще, даже если он хорошо сформирован (Я знаю, что, проверяя исходный код) ... Итак, я думаю, что проблема может заключаться в том, что UrL, который я пытаюсь извлечь, блокирует меня извлечения содержимого, возможно ли это? Это происходит с веб-сайта New York Times http://www.nytimes.com/ – Argo

+0

Возможно, они могут использовать несколько фильтров для просмотра всех веб-запросов на своем веб-сайте. Я не знаю, почему они это сделают, если вы не используете много ресурсов. Вы можете изменить некоторые завитки; или эхо «сырой» вывод curl, чтобы проверить, соответствует ли исходный код, который вы видели. Я никогда не использовал завиток раньше, поэтому не могу помочь вам в этом. Есть много вариантов завитка, хотя, посмотрите их здесь: http://www.php.net/manual/en/function.curl-setopt.php – ArendE