Как получить URL-адрес из iframe с помощью PHP


Как получить URL-адрес YouTube по ссылке ниже?

<iframe title="YouTube video player" width="640" height="390" 
 src="http://www.youtube.com/embed/VvJ037b_kLs" 
frameborder="0" allowfullscreen></iframe> 
 14
Author: user2466994, 2013-06-10

5 answers

Вы можете использовать регулярное выражение и функцию preg_match

preg_match('/src="([^"]+)"/', $iframe_string, $match);
$url = $match[1];

ОБНОВЛЕНИЕ если у вас есть страница, сгенерированная в html или php, вы можете использовать буферы, чтобы получить html из php, а затем использовать регулярное выражение на нем:

Сначала используйте ob_start(); и начало кода вашей страницы или, если у вас есть html-код до вашего php, вы можете использовать его для всей страницы, добавив:

<?php ob_start(); ?>

И начало файла php, затем в конце вы можете получить буфер ob в строке и применить регулярное выражение:

<?php ob_start(); ?>
<iframe src="foo.bar"></iframe>

<iframe src="baz"></iframe>
<?php

$output = ob_get_contents();
ob_end_clean();

// find all iframes generated by php or that are in html    
preg_match_all('/<iframe[^>]+src="([^"]+)"/', $output, $match);

$urls = $match[1];
echo $output;

?>
 31
Author: jcubic, 2018-07-14 11:28:45
public function makeiframevideo($url)
{

    // Youtube
    $ytRegExp = "/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/";
    preg_match($ytRegExp, $url, $ytMatch);
    if ($ytMatch && strlen($ytMatch[1]) === 11) {
        return "<iframe frameborder=\"0\" allowfullscreen class=\"pull-left\"  id=\"ytplayer\" type=\"text/html\" width=\"100%\" height=\"405\"  src=\"//www.youtube.com/embed/{$ytMatch[1]}?showinfo=0\" ></iframe>";
    }

    // Instagram
    $igRegExp = "/^(?:https?:\/\/)?(?:www\.)?instagram.com\/p\/(.[a-zA-Z0-9\_]*)/";
    preg_match($igRegExp, $url, $igMatch);
    if ($igMatch && strlen($igMatch[0])) {
        return "<iframe frameborder=\"0\" allowfullscreen class=\"pull-left\"  id=\"ytplayer\" type=\"text/html\" width=\"100%\" height=\"405\" src='{$igMatch[0]}/embed/' ></iframe>";
    }

    // Vine
    $vRegExp = "/^(?:https?:\/\/)?(?:www\.)?vine.co\/v\/(.[a-zA-Z0-9]*)/";
    preg_match($vRegExp, $url, $vMatch);
    if ($vMatch && strlen($vMatch[0])) {
        return "<iframe frameborder=\"0\" allowfullscreen class=\"pull-left\"  id=\"ytplayer\" type=\"text/html\" width=\"100%\" height=\"405\" src='{$vMatch[0]}/embed/simple' ></iframe>";
    }

    // Vimeo
    $vimRegExp = " /\/\/(player.)?vimeo.com\/([a-z]*\/)*([0-9]{6,11})[?]?.*/";
    preg_match($vimRegExp, $url, $vimMatch);
    if ($vimMatch && strlen($vimMatch[3])) {
        return "<iframe frameborder=\"0\" allowfullscreen class=\"pull-left\"  id=\"ytplayer\" type=\"text/html\" width=\"100%\" height=\"405\" src='//player.vimeo.com/video/{$vimMatch[3]}' ></iframe>";
    }

    // Dailymotion
    $dmRegExp = "/.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/";
    preg_match($dmRegExp, $url, $dmMatch);
    if ($dmMatch && strlen($dmMatch[2])) {
        return "<iframe frameborder=\"0\" allowfullscreen class=\"pull-left\"  id=\"ytplayer\" type=\"text/html\" width=\"100%\" height=\"405\" src='//www.dailymotion.com/embed/video/{$dmMatch[2]}' ></iframe>";
    }

    // Youku
    $youkuRegExp = "/\/\/v\.youku\.com\/v_show\/id_(\w+)/";
    preg_match($youkuRegExp, $url, $youkuMatch);
    if ($youkuMatch && strlen($youkuMatch[1])) {
        return "<iframe frameborder=\"0\" allowfullscreen class=\"pull-left\"  id=\"ytplayer\" type=\"text/html\" width=\"100%\" height=\"405\" src='//player.youku.com/embed/{$youkuMatch[1]}' ></iframe>";
    }



    $mp4RegExp = '/^.+.(mp4|m4v)$/';
    preg_match($mp4RegExp, $url, $mp4Match);

    $oggRegExp = '/^.+.(ogg|ogv)$/';
    preg_match($oggRegExp, $url, $oggMatch);

    $webmRegExp = '/^.+.(webm)$/';
    preg_match($webmRegExp, $url, $webmMatch);

    if ($mp4Match || $oggMatch || $webmMatch) {
        return $url;
    }

    return "";
}
 2
Author: Isaac Limón, 2016-04-26 22:08:49
<?php
function getHtmlElement($html,$startOfElement,$endOfElement)
{
    $startingPosition = strpos($html, $startOfElement);
    $endPosition = strpos($html, $endOfElement,$startingPosition);
    $foundElement = substr($html, $startingPosition,$endPosition);

    return $foundElement;
}

    $html = file_get_contents('http://www.youtube.com/');
    $startOfElement = '<div id="guide"';
    $endOfElement = "<";

    $myElement = getHtmlElement($html,$startOfElement,$endOfElement);

    echo $myElement;

Я искал способ взять html-элементы из URL-адресов, но не нашел ни одного, поэтому написал это.Это работает так же, как показано в примере.После получения элемента вы можете применить ту же логику, что и функция, которую я написал, чтобы получить часть нужной вам строки.

 0
Author: user3208692, 2014-01-28 06:07:37
<?php
$url = '<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/VvJ037b_kLs" frameborder="0" allowfullscreen></iframe> ';
$tmpDoc = new DOMDocument();

# Dirty hack to support utf-8 with loadHTML
# http://php.net/manual/en/domdocument.loadhtml.php#95251
@$tmpDoc->loadHTML( '<?xml encoding="UTF-8">' . $url );
foreach ( $tmpDoc->childNodes as $item ) {
    if ( $item->nodeType == XML_PI_NODE ) {
        $tmpDoc->removeChild( $item );// remove hack
    }
}
$tmpDoc->encoding = 'UTF-8'; // insert proper

$body = $tmpDoc->getElementsByTagName( 'body' );

if ( ! $body->length ) {
    return null;
}

$nodes = $body->item( 0 )->childNodes;

if ( empty( $nodes ) ) {
    return null;
}

echo $nodes->item( 0 )->getAttribute( 'src' );
 0
Author: ecabuk, 2017-05-26 20:48:01

Мой веб-код html - это:

  <div url="doctor.videoLink"><div class="media-youtube-video">
          <iframe src="https://www.youtube.com/embed/YZvJZrfw5oo?rel=0&amp;enablejsapi=1" frameborder="0" allowfullscreen="" id="widget2"></iframe>
</div> 
</div>

И я извлекаю src из iframe как:

foreach($kolPro->find('div.video div div iframe') as $youTube)
                            {
                                //$kolsData['you_tube']=$youTube->innertext();
                                preg_match('/src="([^"]+)"/', $youTube, $match);
                                $youtubeLink= $match[1];
                            }
 0
Author: Deepa MG, 2017-09-13 12:43:24