YouTube Videos

  • Themenstarter Themenstarter McNiko
  • Beginndatum Beginndatum
M

McNiko

Hallo, ich arbeite gerade an einer Homepage (Blog) in der ich gerne YouTube Videos verlinken möchte, diese sollen dann in dem YouTube Player auf der Homepage angezeigt werden jedoch will ich nur den link z.B. http://de.youtube.com/watch?v=vRGAj58nyrs in mein FormularFeld eingeben damit dieser in die Datenbank eingeschrieben wird.

Dies wär der YouTube Code für den Player: <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/vRGAj58nyrs&hl=de"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/vRGAj58nyrs&hl=de" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>. Was für einen Code benötige ich?

Danke

mfg McNiko
 
Am leichtesten geht es mit [phpf]preg_replace[/phpf]:

PHP:
preg_replace(
		'%http://(?:|[a-z]+\.)youtube\.com/watch\?v=([0-9a-zA-Z]+?)%Uis',
		'<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/\1&hl=de"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/vRGAj58nyrs&hl=de" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>',
		$string
	);

Das Pattern ist relativ einfach:
(?:|[a-z]+\.) matcht sowohl "www.", "de.", ... als auch keine Subdomain (einfach "youtube.com"), ([0-9a-zA-Z]+?) extrahiert anschließend die Zeichenfolge hinter dem "v=". Das Fragezeichen hinter dem "+" bedeutet nichts anderes, als dass für dieses Subpattern die Regex-Engine gefräßig sein soll (so viele Zeichen wie möglich).
Anschließend wird dann der Verweis auf das erste gefetchte Subpattern ("\1" im Replace-String --> "http://www.youtube.com/v/\1&hl=de") durch diese Zeichenfolge ersetzt.
 
So sieht es jetzt bei mir aus:

PHP:
while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

preg_replace(
        '%http://(?:|[a-z]+\.)youtube\.com/watch\?v=([0-9a-zA-Z]+?)%Uis',
        '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/\1&hl=de"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/vRGAj58nyrs&hl=de" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>',
        $string
    );  
	
   echo ('<object width="425" height="344"><param name="movie" value="'.$sqlRowMySQL->Link.'"></param><param name="allowFullScreen" value="true"></param><embed src="'.$sqlRowMySQL->Link.'" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>');
}

...funktioniert aber nicht wie müsste das aussehen mit dem preg_replace()?

Danke

mfg McNiko
 
Wieso denn so umständlich?

PHP:
$youtubelink = $_POST['youtubelink'];
echo '<object width="425" height="344">
    <param name="movie" value="'.$youtubelink.'"></param>
    <param name="allowFullScreen" value="true"></param>
    <embed src="'.$youtubelink.'" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed>
</object>';
 
Denkfehler - Bin von einem Link in einem umfangreicheren Text ausgegangen. So hast du, mayermart, natürlich Recht.

McNiko: [phpf]preg_replace[/phpf] gibt einen String zurück, der natürlich entsprechend aufgenommen werden sollte:
PHP:
$sqlRowMySQL->link = preg_replace(
        '%http://(?:|[a-z]+\.)youtube\.com/watch\?v=([0-9a-zA-Z]+?)%Uis',
        '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/\1&hl=de"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/vRGAj58nyrs&hl=de" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>',
        $sqlRowMySQL->link
    );
 
Zuletzt bearbeitet:
Ich probiere schon die ganze Zeit rum aber irgentwie zeigt der das Video nicht an!

Es wäre nett wenn jemand den kompletten Code schreiben könnte!?

Danke

mfg McNiko
 
Der steht im Prinzip schon hier ;-)

PHP:
while ($video = mysql_fetch_assoc($sqlErgebnis)) {
    echo '<object width="425" height="344">
        <param name="movie" value="'.$video['link'].'"></param>
        <param name="allowFullScreen" value="true"></param>
        <embed src="'.$video['link'].'" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed>
    </object>'; 
}

Wie das Array tatsächlich aufgebaut ist siehst du über
PHP:
echo '<pre>';
print_r($video);
echo '</pre>';

statt $video['link'] musst du eben die passende Variable verwenden.
PS: mysql_fetch_assoc() ist schneller als mysql_fetch_object()
 
Will irgentwie nicht funktionieren ;)

PHP:
<?
# Verbindung
include ('verbindung.php');

# SQL Code
$szMySQL = "SELECT * FROM jc_m_music WHERE MusicID='".$_GET['MusicID']."'";
$sqlErgebnis = mysql_query($szMySQL);

# Ausgabe
while ($video = mysql_fetch_assoc($sqlErgebnis)) {
    echo '<object width="425" height="344">
        <param name="movie" value="'.$video[''.$sqlRowMySQL->Link.''].'"></param>
        <param name="allowFullScreen" value="true"></param>
        <embed src="'.$video[''.$sqlRowMySQL->Link.''].'" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed>
    </object>';  

echo '<pre>';
print_r($video);
echo '</pre>';  
}  
?>

Danke

mfg McNiko
 
Das Video wird nicht angezeigt, kann es vielleicht daran liegen das...

PHP:
[''.$sqlRowMySQL->Link.'']

falsch ist?

Bei der Array abfrage gibt er dies aus!

Array
(
[MusicID] => 2
[Titel] => TBurnA - Ohne Dich
[Link] => http://de.youtube.com/watch?v=fVbkc-535RE
[Quelle] => YouTube
[Art] => Other
[Richtung] => Rap
[Klicks] => 3
[Timestamp] => 1214913712
)

Danke

mfg McNiko
 
Zurück