PHP извлечь видео идентификаторы YouTube из массива встраивания iframe / объекта? - PullRequest
3 голосов
/ 23 ноября 2011

У меня есть массив iframes / объектов youtube, например:

[0] => <iframe width="600" height="338" src="http://www.youtube.com/embed/szL_PVuzWp0?fs=1&feature=oembed" frameborder="0" allowfullscreen></iframe>
[1] => <object width="600" height="338"><param name="movie" value="http://www.youtube.com/v/jm1S43a-e3Y?version=3&feature=oembed"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/jm1S43a-e3Y?version=3&feature=oembed" type="application/x-shockwave-flash" width="600" height="338" allowscriptaccess="always" allowfullscreen="true"></embed></object>
[2] => <iframe width="600" height="338" src="http://www.youtube.com/embed/7fTploFSbXA?fs=1&feature=oembed" frameborder="0" allowfullscreen></iframe>
[3] => <iframe width="600" height="338" src="http://www.youtube.com/embed/vQSRNYgiuMk?fs=1&feature=oembed" frameborder="0" allowfullscreen></iframe>

Обратите внимание, что метод встраивания может отличаться (обычно <iframe>, иногда <object>) (из-за внешнего источника данных).

Как мне / каков самый надежный способ извлечения URL видео (например, vQSRNYgiuMk или jm1S43a-e3Y) для каждого?

В конечном итоге я хочу получить массиввот так:

[0] => "szL_PVuzWp0"
[1] => "jm1S43a-e3Y"
[2] => "7fTploFSbXA"
[3] => "vQSRNYgiuMk"

Ответы [ 2 ]

5 голосов
/ 23 ноября 2011

Не используйте регулярное выражение, пожалуйста:

   $dom_document = new DOMDocument();

   $dom_document->loadHTML($html);

   //use DOMXpath to navigate the html with the DOM
   $dom_xpath = new DOMXpath($dom_document);

   // if you want to get the all the iframes
   $iframes = $dom_xpath->query("//iframe");

   if (!is_null($iframes)) {
      foreach ($iframes as $iframe) {
        if($iframe->hasAttributes()){ 
            $attributes = $iframe->attributes; 
            if(!is_null($attributes)){ 
               foreach ($attributes as $index=>$attr){ 
                  if($attr->name == 'src'){ 
                     $curSrc = $attr->value; 
                     //use regex here to extract what you want
                  } 
               } 
            } 
         } 
      }
   }

Не полное решение. Но вы поняли ...

0 голосов
/ 23 ноября 2011
foreach($arr as $i=>$a){
    $start = strpos($a, "/v/") + 3;
    if(!$start) $start = strpos($a, "/embed/") + 7;
    $qm = strpos("?");
    $length = $qm - $start;
    $new_array[$i] = substr($a, $start, $length);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...