2012-04-01 7 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이 attibute '속성'(예 : <meta property="title">)를 사용하여 메타 태그가 코드를 할 생각대로 모든 것이 잘 진행을 ...하지만 일부 URL '속성'대신 'name'속성 (예 : <meta name="title">)을 사용합니다 ...

그래서 '속성'에서 값을 추출하는 솔루션을 찾고 비어있는 경우 '이름'의 값을 반환해야합니다 ...

나는 몇 가지 시도했지만 지금까지 succed .. 사람 아이디어가 있으십니까? OZ_ 눈치로

+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'); 
    } 
} 

, 당신은 메타 재산에 대한 모든 메타 이름을 이름을 바꾸려면 str_ireplace를 사용할 수 있습니다.

+0

고마워! 이것은 문제를 해결합니다! :) 글쎄, 지금 해결할 다른 하나가 ... 나는 URL을 가져올 수있는 '컬'을 사용하고 거기에 메타 데이터를 추출 할 수없는 사이트가있다. 나는 소스 코드를 확인함으로써 그것을 안다.) 그래서, 나는 가져 오는 것을 시도하고있는 UrL이 그 내용을 추출하지 못하게 할 수 있다고 생각한다. 이것은 New York Times 웹 사이트 http://www.nytimes.com/ – Argo

+0

에서 발생합니다. 가능한 경우, 여러 필터를 사용하여 모든 웹 요청을 웹 사이트로 스크리닝 할 수 있습니다. 당신이 우리가 많은 자원을 사용하지 않는다면, 왜 그들이 그렇게 할 수 있었는지 나는 알지 못합니다. 일부 컬 설정을 변경할 수 있습니다. 또는 curl의 'raw'출력을 echo하여 여러분이 본 소스 코드와 일치하는지 확인하십시오. 전에는 컬을 사용하지 않았으므로 그걸 도와주지 않습니다. 많은 컬 옵션이 있지만, 여기에서 찾으십시오 : http://www.php.net/manual/en/function.curl-setopt.php – ArendE