2013-12-16 2 views
0

다른 웹 사이트에서 문자열을 찾고 싶습니다. 나는 파서를보고 있었고 최선의 방법을 모른다. HTML DOM 파서를 살펴 봤지만 간단한 한 줄 출력 만 있으면됩니다. 나는 단지 변수 "url : 'http://s2.example.com/streams/i23374.mp4?k=12f34588cf171f3bbf3d35da4db43b06'"링크를 얻고 싶습니다.PHP 파서 - HTML에서 문자열 찾기

<script> 
       flowplayer("player", "http://www.example.com/flowplayer-3.2.16.swf", { 
        canvas: { 
         backgroundGradient: "none", 
         backgroundColor: "#000000" 
        }, 
        clip: { 
         provider: 'lighttpd', 
         url: 'http://s1.example.com/streams/i23374.mp4?k=12f34588cf171f3bbf3d35da4db43b06', 
         scaling: 'fit' 
        }, 
        plugins: { 
         lighttpd: { 
          url: 'http://www.example.com/flowplayer.pseudostreaming-3.2.12.swf' 
         } 
        } 
       }); 
      </script> 
+2

한 줄짜리 phpQuery 또는 QueryPath를 살펴보십시오. 이러한 DOM traversal 프론트 엔드 (또는 일반 longwinded DOMDocument)는 여전히 자바 블롭을 그물로 잡을 것입니다. 정규식이나 JSON/L 파서가 여전히 URL 만 추출하려면 * 필요합니다. – mario

답변

0

다음은 두 구분 기호 사이에서 텍스트를 가져 오는 편리한 기능입니다.

<?php 
function extract_unit($string, $start, $end) 
{ 
    $pos = stripos($string, $start); 
    $str = substr($string, $pos); 
    $str_two = substr($str, strlen($start)); 
    $second_pos = stripos($str_two, $end); 
    $str_three = substr($str_two, 0, $second_pos); 
    $unit = trim($str_three); // remove whitespaces 
    return $unit; 
} 

echo extract_unit($webpageSource, 'flowplayer("player", "', '", {'); 
?> 
+0

알았어요. 고맙습니다. :) – BluGex

0

내가 DOMDocument을 사용합니다 :

를 앵커 오프 링크를 얻기 위해,는 다음과 같습니다

$dd = new DOMDocument; 
@$dd->loadHTMLFile('http://s2.example.com/streams/i23374.mp4?k=12f34588cf171f3bbf3d35da4db43b06'); 
if($a = $dd->getElementsByTagName('a')){ 
    foreach($a as $t){ 
    $links[] = $t->getAttribute('href'); 
    } 
} 

지금 $linkshref와 배열, 또는 if(!isset($links)) 어떤 결과가 없습니다.

스크립트 태그에서 JSON을 활용하려면 다음 수준으로

$dd = new DOMDocument; 
@$dd->loadHTMLFile('http://s2.example.com/streams/i23374.mp4?k=12f34588cf171f3bbf3d35da4db43b06'); 
if($s = $dd->getElementsByTagName('script')){ 
    $c = $dd->sameHTML($s->item(0))); 
} 

변경 item(0)script 태그가 자신의 페이지입니다. 이제 $c은 문자열입니다. 그래서 :

preg_match_all("/url: '.+'/", $c, $results); 

$results은 배열이 url: 'whatever'을 포함해야합니다. 그래서 :

foreach($results as $v){ 
    $a[] = preg_replace('/url: /', '', $v); 
} 

$a 결과의 배열입니다.

+0

소스에서 해당 링크를 추출하려고하는 웹 사이트에서 정보를 얻으려고하지 않습니다. – BluGex

+0

잠시만 기다려주세요. – PHPglue

0

대부분 RegExp가 JSON을 처리하는 것은 좋지 않지만 문자열을 구문 분석하는 가장 좋은 방법입니다. 여기

는 (은 원시 HTML과 동일합니다 내가 문자열을 인코딩)하는 예이다 :

이 JSON으로 인코딩 된 있지만 PHP의 JSON 형식도 있기 때문에, 그것은 PHP의 json_decode에 의해 구문 분석 할 수 없습니다
<?php 
$data = base64_decode("PHNjcmlwdD4KICAgICAgICAgICAgICAgIGZsb3dwbGF5ZXIoInBsYXllciIsICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2Zsb3dwbGF5ZXItMy4yLjE2LnN3ZiIsICB7CiAgICAgICAgICAgICAgICAgICAgY2FudmFzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRHcmFkaWVudDogIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICIjMDAwMDAwIgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgY2xpcDogewogICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcjogJ2xpZ2h0dHBkJywKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cDovL3MxLmV4YW1wbGUuY29tL3N0cmVhbXMvaTIzMzc0Lm1wND9rPTEyZjM0NTg4Y2YxNzFmM2JiZjNkMzVkYTRkYjQzYjA2JywKICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGluZzogJ2ZpdCcKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHR0cGQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vZmxvd3BsYXllci5wc2V1ZG9zdHJlYW1pbmctMy4yLjEyLnN3ZicKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICA8L3NjcmlwdD4="); 

if(preg_match('/clip:\s*\{[\s\S]+url:\s*\'(\S+)\',\s*scaling/', $data, $match) === 1) 
echo $match[1]; 

?> 

strict (속성은 따옴표로 묶어야 함).