Meta-Daten von externen Seiten laden

In einer meiner Projekte sollte eine Funktion, ähnlich wie bei vielen Bookmark-Diensten, umgesetzt werden. Der Benutzer trägt eine URL in das Eingabefeld ein und das Script ermittelt automatisch den Titel (Meta-Title), die Schlüsselwörter (Meta-Keywords) und die Beschreibung (Meta-Description). Doch wie realisiert man solch ein Script am einfachsten?
Ich hatte am Anfang mehrere Ideen.

  1. Auslesen der Daten mit regulären Ausdrücken
  2. Die Verwendung der PHP-Funktion get_meta_tags()

Da ich vorerst eine simple Funktion brauchte, habe ich mit für die zweite Möglichkeit entschieden.

Die Theorie:

Ich übergebe der Funktion getMetaData($url) eine URL. Ist die URL valide so werden die Meta-Daten ausgelesen.

Die Praxis:

Als erstes definieren wir die Funktion getMetaData($url) mit einem Übergabeparameter “$url”. Anschließend prüfen wir ob die URL valide ist und sollte das der Fall sein holen uns die Meta-Daten. Die PHP-Funktion get_meta_tags() liefert ein assoziatives Array mit den gewünschten Daten.

1
2
3
4
5
6
7
8
function getMetaData ($url)
{
  $result = array ();
  if (filter_var ($url, FILTER_VALIDATE_URL))
  {
    $meta = get_meta_tags ($url);
  }
}

Das Problem:

In der Praxis tauchte jedoch ein kleines Problem auf, dass sich sehr leicht lösen ließ. Einige Seiten hatten Tabs oder Umbrüche in den Beschreibungstexten oder Schlüsselwörtern. Diese musste ich filtern, da ich die Werte in einfache Input-Felder vom Typ “text” schreiben wollte.

Also musste ich das Array durchlaufen und alle Steuerzeichen entfernen. Daraus ist das die folgende Funktion entstanden:

1
2
3
4
5
6
7
8
9
10
11
12
13
function getMetaData ($url)
{
  $result = array ();
  if (filter_var ($url, FILTER_VALIDATE_URL))
  {
    $meta = get_meta_tags  ($url);
    foreach ($meta as $key => $value)
    {
      $result[strip_tags (trim ($key))] = str_replace(array ("\n", "\r", "\t"), array ("", "", ""), strip_tags (trim ($value)));;
    }
  }
  return $result;
}
ALL-INKL.COM

8 Kommentars zu dem Artikel “Meta-Daten von externen Seiten laden”

  1. Avatar von Felix K.
    Felix K.

    get_meta_tags() sieht schick aus, das kannte ich noch nicht.

    Eines würde ich dennoch verbessern:

    9
    
    $result[strip_tags (trim ($key))] = preg_replace("#s+#", " ", strip_tags (trim ($value)));

    Ersetze einfach alle Whitespaces durch ‚ ‚, dann gibts auch keine Probleme mit fehlenden Worttrennern oder so.

    Edit von Alex: hast dich bei der Funktion strip_tags vertippt.

    • Avatar von StarSt0rm
      StarSt0rm

      Die Funktion ist wirklich äußerst praktisch.
      Und danke für den Hinweis mit „preg_replace()„. Habe gar nicht daran gedacht.

  2. Avatar von Felix K.
    Felix K.

    🙂

    Kannst du mir mal sagen, was für HTML-Tags hier erlaubt sind? Ich blicke da nicht so durch. Oder bau mal einen WYSIWYG-Editor ein.

    • Avatar von StarSt0rm
      StarSt0rm

      Auf einmal mag der Felix die Editoren. 😛
      Also es werde in Zukunft einige Änderungen kommen. dazu aber später mehr. 😉

  3. Avatar von Pac-Man
    Pac-Man

    Meta-Daten von externen Seiten lade <— +n 😉

    • Avatar von StarSt0rm
      StarSt0rm

      Unglaublich dass es bis dahin keinem aufgefallen ist… Ich danke dir!
      Fehler korrigiert und die alte URL wird ordnungsgemäß umgeleitet. 😉

  4. Avatar von Pac-Man
    Pac-Man

    *daumen hoch* 😉

  5. Avatar von Bennet Matschullat
    Bennet Matschullat

    :thumbs up: .. und jetzt vielleicht das „n“ noch im Title richten 😉