Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Youtube-Video dynamisch einbinden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Youtube-Video dynamisch einbinden

    Hallo Kollegen,

    ich hab bereits die Foren zu meiner Frage hier durchsucht, aber noch keinen hinreichenden Lösungsansatz darunter gefunden.
    Ich möchte in meiner Datenbank zu jedem Datensatz auch eine URL zu einem Youtube-Video hinterlassen. Ist ja schnell gemacht: Youtube öffnen, Video suchen, URL kopieren und ab damit in das Formular, abspeichern, fertig.

    Wenn ich nun diesen Datensatz wieder aus der Datenbank abrufe, soll dann aber das Video in einer Art Mini-Vorschau eingebettet zu sehen sein. Dafür gibt es ja auch den Code auf Youtube. Das Problem dabei:

    Die beiden URL's zum Video sind verschieden.
    Hier das Beispiel für die URL, die ich kopiert habe und die in der Datenbank steht:

    Code:
    http://www.youtube.com/watch?v=9AvMJueiCyo
    und hier der dazugehörige embedded-Code:

    Code:
    <object width="560" height="340">
    <param name="movie" value="http://www.youtube.com/v/9AvMJueiCyo&hl=de_DE&fs=1&rel=0"></param>
    <param name="allowFullScreen" value="true"></param>
    <param name="allowscriptaccess" value="always"></param>
    <embed src="http://www.youtube.com/v/9AvMJueiCyo&hl=de_DE&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>
    Wenn nun die URL's zum Video beide gleich wären, wäre ja alles gut. Das sind sie aber leider nicht. Wenn ich nun dynamisch mittels php den URL-Eintrag aus der Datenbank lese und ihn folgendermaßen einbaue

    PHP-Code:
    <object width="560" height="340">
    <param name="movie" value="<?php echo $row_Recordset1['Youtube_url']; ?>"></param>
    <param name="allowFullScreen" value="true"></param>
    <param name="allowscriptaccess" value="always"></param>
    <embed src="<?php echo $row_Recordset1['Youtube_url']; ?>" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>
    dann erscheint natürlich nur ein weißes Fenster, weil der Code ja eine andere, umgewandeltere Form der URL benötigt. Nun ist mir aufgefallen, dass man im Grunde nur das "=" in ein "/" umwandeln und das "?" und das Wort "watch" gänzlich entfernen müßte, um die richtige URL für das Einbetten zu erhalten. Wäre es hier sinnvoll, das von php erledigen zu lassen

    -> und hier die Frage: wie?

    oder gibt es bereits eine andere gängige Lösung, die die eigentliche Youtube-URL vernünftig in den Code für das Einbetten umwandelt? Ich meine - bei facebook klappt es ja auch irgendwie: ich gebe dort nur die URL vom Youtube-Video ein und die Thumbnails und das eingebettete Video erscheinen dann ja auch auf dem Facebook-Profil.

    Danke für hilfreiche Gedanken!

    estebu

  • #2
    Also möglich sollte es sein, denn der Code zum Einbinden ist relativ offensichtlich.
    Ich markiere dir mal die Passagen, die man mit PHP ändern muss.

    <object width="560" height="340">
    <param name="movie" value="http://www.youtube.com/v/9AvMJueiCyo&hl=de_DE&fs=1&rel=0"></param>
    <param name="allowFullScreen" value="true"></param>
    <param name="allowscriptaccess" value="always"></param>
    <embed src="http://www.youtube.com/v/9AvMJueiCyo&hl=de_DE&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>

    Der ganze Rest sollte immer gleich sein. Diesen kleinen Teil musst nur Ersetzen. Mein Tipp: Schau dir mal deine URL an, wo der Fett gedruckte Wert steht.
    [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
    [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

    Kommentar


    • #3
      Das es um die Passagen geht, weiss ich ja bereits. Nur in der eigentlichen URL steht noch das Wort "watch" dazu und einige Zeichen, die dort nicht hingehören, wenn ich die URL zum einbetten benutzen möchte. Ich könnte natürlich den gesamten Embed-Code in die Datenbank schreiben, aber 1. möchte ich es meinen Usern, die die Datenbank füttern, nicht zumuten und 2. sind im generierten Code von Youtube die Dimensionen des Videos nicht so, wie ich sie gerne hätte.

      Dein Vorschlag ist mir ja auch schon aufgefallen, aber wie ersetze ich es nun richtig? Habe es schon auf folgende Art versucht:
      PHP-Code:
      $URL str_replace("?"""$row_Recordset1['Youtube_url']); 
      damit bekomme ich aber nur das Fragezeichen weg. Kann man auch ganze Wörter oder mehrere Zeichen auf einmal damit entfernen bzw. ändern?

      Kommentar


      • #4
        Ich habe es jetzt folgendermaßen gelöst (bitte berichtigen, falls es noch eine galantere Methode gibt):

        PHP-Code:
        $youtube $row_Recordset1['Youtube_url'];
        $ungueltig = array("watch""?""=");
        $gueltig = array("""""/");

        $URL str_replace($ungueltig$gueltig$youtube); 

        Kommentar


        • #5
          Folgende Funktion liefert dir die letzten 11 Zeichen:
          PHP-Code:
          echo substr($youtube_url, -11); 
          Um auch noch eine korrekte Höhe zu bekommen, wirst du vermutlich nicht daran vorbeikommen bei Youtube "nachzufragen", dazu bietet sich z.B: fsockopen an.
          [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
          [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

          Kommentar


          • #6
            an diese Idee mit den letzten elf Zeichen hatte ich auch schon gedacht, und bei Youtube-URL's in der Form

            Code:
            http://www.youtube.com/watch?v=9AvMJueiCyo
            ist auch alles gut,

            ABER es gibt ja mittlerweile auch Youtube-URL's in der Form

            Code:
            http://www.youtube.com/watch?v=3nZ0Nnafohc&feature=player_embedded
            oder gar

            Code:
            http://www.youtube.com/watch?v=V4934z9-xjg&feature=PlayList&p=CE498469BD4E3493&playnext_from=PL&playnext=1&index=6
            und es soll ja mit allen Varianten funktionieren. Und wer sagt denn, dass Youtube immer nur diese 11 Zeichen als Code benutzt? Was ist, wenn noch ein zwölftes hinzukommt?

            So, wie ich es jetzt gemacht habe, funktioniert es mit jeder Variante, weil anscheinend der eingebettete Player mit allem, was nach dem "&"-Zeichen noch kommt, nichts mehr weiter anstellt. Hoffentlich bleibt dieses "&" auch noch lange in der URL erhalten *grins*

            Trotzdem vielen herzlichen Dank für Eure Gedanken zu dem Thema.

            Kommentar


            • #7
              Dann bleiben wohl nur reguläre Ausdrücke:
              PHP-Code:
              $suchmuster '/^http://www.youtube.com/watch?v=([^&]*)[&]?/';
              preg_match($suchmuster$youtube_link$trefferPREG_OFFSET_CAPTURE);
              print_r($treffer); 
              So etwa müsste man die ID bekommen. Kenne mich damit jedoch nicht so gut aus und habe auch obrigen Code noch nicht getestet.
              [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
              [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

              Kommentar


              • #8
                Möglich wäre auch diese Lösung:

                PHP-Code:
                $query_string parse_url($youtube_urlPHP_URL_QUERY);
                $query_parts explode('='$query_string);
                if (
                $query_parts[0] == 'v')
                {
                    
                $after_v explode('&'$query_parts[1]);
                    
                $watchcode $after_v[0];
                } else {
                    
                // v nicht erster GET-Parameter
                }

                echo 
                $watchcode
                Funktioniert, solange v der erste GET-Parameter ist (Standard-Youtube-URLs).

                Kommentar

                Lädt...
                X