PHP ile html kodundan Youtube Video kimliği alın

5 Cevap php

Ben html kodundan bütün sadece youtube video kimliği almak istiyorum

youtube video (veya birden fazla) nesne / embed kodunu bakmak

/ / Html veritabanından

    <p>loremm ipsum dolor sit amet enot
    <a href="link" attribute=""blah blah blah">anchor link</a>
    </p>

    <object width="425" height="344">
        <param name="movie" value="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"></param>
        <param name="allowFullScreen" value="true"></param>
        <param name="allowscriptaccess" value="always"></param>
        <embed src="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"
    type="application/x-shockwave-flash"
    allowscriptaccess="always"
    allowfullscreen="true"
    width="425"
    height="344">
    </embed>
        </object>

    <image src="path/to/image.ext" >
    <p>lorem ipsum dolor sit amet... blah</p>
    <p>lorem ipsum dolor sit amet... blah</p>

    <object width="425" height="344">
        <param name="movie" value="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"></param>
        <param name="allowFullScreen" value="true"></param>
        <param name="allowscriptaccess" value="always"></param>
        <embed src="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"
    type="application/x-shockwave-flash"
    allowscriptaccess="always"
    allowfullscreen="true"
    width="425"
    height="344">
    </embed>
        </object>
<p>blah</p>
blah<br/>
blah<br/>
blah<br/>

5 Cevap

Yüzsüzce htmlpurifier en youtube eklentisi çalınan:

preg_match('#<object[^>]+>.+?http://www.youtube.com/v/([A-Za-z0-9\-_]+).+?</object>#s', $markup, $matches);
var_dump($matches[1]);

YouTube Video URL'ler için iki biçimleri genellikle vardır:

http://www.youtube.com/v/[videoid]
http://www.youtube.com/watch?v=[videoid]

"Www.youtube.com" "www.youtube.co.uk", ya da diğer ülke kodları ile değiştirilebilir, ama bildiğim kadarıyla belirlemek mümkün oldum gibi, video kimlikleri etki alanı adı ne olursa olsun aynıdır .

Video id base-64 kodlaması kullanan bir 11-karakter dizesidir.

Eğer bir HTML belgesi adresler ayrıştırmak kodu varsayarsak, bunu bir YouTube video url olmadığını belirlemek ve bu regex kullanarak video kimliği almak (C # ile yazılmış, ancak kolayca php veya başka bir şey dönüştürülmesi gerekir) olabilir:

"^http://(?<domain>([^./]+\\.)*youtube\\.com)(/v/|/watch\\?v=)(?<videoId>[A-Za-z0-9_-]{11})"

Bu özel düzenli ifade youtube.com özgüdür. Tüm farklı ülke kodları (youtube.co.uk, youtube.pl, youtube.it, vb) anlamak yapmak biraz daha karmaşıktır.

Aslında, tamamen tüm seçenekleri yakalamak için, ben * WebFlakeStudio çözümü * öksürük * istemci aptallık * öksürük her 3 formlarını yakalamak için, aşağıdaki ek ile, iyi olduğunu bulundu

(PHP)

preg_match('#(\.be/|/embed/|/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#', $YoutubeCode, $matches);
if(isset($matches[2]) && $matches[2] != ''){
     $YoutubeCode = $matches[2];
}

Ben / embed eklendi, bu tüm yakalamak gerekir. Nesne, URL ve Embed seçeneği vardır.

Eğer youtube video için embed link almak istiyorsanız, aşağıdaki kod parçacığını kullanabilirsiniz:

$youtubeRegexp = "#(/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#";
$embedUrl = preg_replace($youtubeRegexp, '/embed/$2', $videoUrl);

Geçerli an için embed kodu:

<iframe width="{width}" height="{height}" src="{embed_url}" frameborder="0" allowfullscreen></iframe>

Not: $ videoURL önce bu ifadeyi çalıştırmadan orijinal url ayarlanmış olmalıdır.

Ben html ayrıştırmak için bir regex kullanarak için azarladı alabilirsiniz ama koşullar göz önüne alındığında, belki bunu yapmak için en iyi yolu nedir?

preg_match('~/v/([0-9a-z_]+)~i', $code, $matches);
echo $matches[1];

Bir youtube video id için geçerli karakterler varsayarak 0-9a-z_ vardır