🏠 FabLab Startseite | Nutzungsbedingungen | Impressum | Wiki

Automatische Youtube link erkennung

Hey Leute,

ich brauche hilfe bei einem Projekt. Ich versuche einen einen YouTube link aus einer mysql datenbank zu kriegen und ihn automatisch als YouTube link zu erkennen und einzufügen. Alles andere was ich aus der datenbank kriege soll nicht als YouTube link ausgegeben werden nur die links die von youtube sind alle anderen texte nicht. Ich hoffe ihr könnt mir helfen.

Also im Allgemeinen kannst du natürlich mit der LIKE Klausel von SQL schon viel erreichen.
Also beispielsweise

SELECT * FROM t WHERE s LIKE "%https://youtube.com%"  

t ist dabei deine Tabelle, s die Spalte die du filtern möchtest.
Das hat aber den Nachteil dass du den ganzen Eintrag zurück bekommst, nicht nur den Link.

Alternativ kannst du sogenannte Reguläre Ausdrücke (englisch “Regular Expressions” oder kurz “Regexp”) verwenden. Die ermöglichen dir eine bedeutend feinere Suche zum Einen und zum Anderen die Selektion des passenden Suchstrings direkt im SQL.

Schau dir dazu am Besten mal die Dokumentation von mysql an, insbesondere REGEX_SUBSTR.
Um Reguläre Ausdrücke zu testen ist es häufig hilfreich, ein Tool zu verwenden, ich nehme da ganz gerne regex101.com

Damit solltest du dir schon etwas funktionierendes basteln können.

Eine kleine Warnung am Rande:
Reguläre Ausdrücke sind extrem Fehleranfällig! Achte also darauf, diese nur zu verwenden wenn keine Sicherheitsmechanismen darauf aufbauen oder du genau weißt was du tust.

Kleine Ergänzung: Du solltest darauf achten, dass Du auch alternative an URLs mit https://youtu.be/ denkst (wird bspw. beim Klick auf den Sharing-Button verwendet).

1 „Gefällt mir“

Ich habe versucht mich ein bisschen über regular expression zu informieren allerdings ohne großen erfolg. Ich finde einfach nichts das sucht ob am anfang eines strings “https://www.youtube.com/watch?v=” steht. Ich habe mir alle “befehle” von regular expression durchgeschaut und selbst nichts gefunden das genau das oben beschriebene kann. Ich hoffe ihr könnt mir bei diesem Problem helfen.

Ich habe danach noch versucht mit regular expressions ein teil einer yt-url zu verändern da das ganze später eh anders geschrieben werden muss um es mit iframe auszugeben.

Ich habe etwas dazu gefunden. Allerdings weis ich nicht wie ich ein “?” drin benutzen kann.
Und zwar ohne das es zum code zählt.

Beispiel:

<script>
var str="https://www.youtube.com/watch?v=jhgJV0Pg54Y";
var patt=/watch?v=/g;
var str2=str.replace(patt,"embed/");
document.write(str2+"<br>");
patt=/(wo)?watch?v=/g;
patt.compile(patt); 
str2=str.replace(patt,"embed/");
document.write(str2);
</script>

Wolltest du nicht eine SQL-Datenbank durchsuchen?
In einem Regex kannst du den Stringanfang mit einem ^ Symbol markieren (das Ende des Strings übrigens mit $).

Wenn du Zeichen selektieren möchtest, die in einem Regexp selbst Funktionen beinhalten (wie zum Beispiel das Fragezeichen, das das vorherige Zeichen optional macht) musst du diese Zeichen mit einem Backslash escapen. Das würde dann z.B. so aussehen:

^https:\/\/abc.de\/url\?test=abc$

Dieser code matcht jetzt genau eine URL, nämlich https://abc.de/url?test=abc, das kannst du auch mithilfe von regex101 validieren.
Regex101 zeigt dir übrigens auch Fehler bei denen bestehenden Ausdrücken an, also würde ich empfehlen auf der Seite den Regex zu schreiben und erst wenn er fertig ist in Javascript zu wechseln.

Genau, Ich wollte eine if-Abfrage machen ob eine nachricht in der datenbank mit “https://www.youtube.com/watch?v=” anfängt. Aber wie?

Naja, das habe ich dir in der letzten Nachricht geschrieben. Du musst nur deine URL einsetzen :wink:
Wenn du den suchtext jetzt noch aus einer Datenbank holen möchtest würdest du noch ein Php Skript brauchen

Das problem ist ich habe bereits ein php Script dass alle nachrichten mit einer while-schleife ausgibt und in der while schleife muss ich es schaffen das ganze einzusetzten. Allerdings habe ich keine ahnung wie.

Ich hab das ganze in eine einfache While-Schleife gepackt mit $row[] und muss da jetzt irgendwie rauslesen dass wenn $row[´Nachricht´] z.b. Wie „https://www.youtube.com/watch?v=“ anfängt, dann soll es als yt-link erkannt werden.

Naja, dann musst du ja nurnoch die ersten Tipps zusammensetzen :wink:
In PHP kannst du Regexps mit preg_match auswerten. Dann mit sizeof prüfen ob es ein Ergebnis gibt oder nicht.
Wenn es eins gibt kannst du die $row-Variable in ein neues Array kopieren und das dann anstelle des Alten zurückgeben

Ich werde es mal Probieren.
Vielen Dank für den Tipp