it-swarm.com.de

Generieren von Facebook Open Graph-Metatags dynamisch

Wie der Titel andeutet, versuche ich, Facebook Open Graph-Metatags dynamisch zu generieren, aber ich kann es nicht zum Laufen bringen. Ist es überhaupt möglich?

AKTUALISIEREN:

Endlich habe ich es mit Hilfe von @saccharine zum Laufen gebracht. Der folgende Code funktioniert für mich:

<?php

$params = array();
if(count($_GET) > 0) {
    $params = $_GET;
} else {
    $params = $_POST;
}
// defaults
if($params['type'] == "") $params['type'] = "restaurant";
if($params['locale'] == "") $params['locale'] = "en_US";
if($params['title'] == "") $params['title'] = "default title";
if($params['image'] == "") $params['image'] = "thumb";
if($params['description'] == "") $params['description'] = "default description";

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# MY_APP_NAME_SPACE: http://ogp.me/ns/fb/MY_APP_NAME_SPACE#">
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

        <!-- Open Graph meta tags -->
        <meta property="fb:app_id" content="MY_APP_ID" />
        <meta property="og:site_name" content="meta site name"/>
        <meta property="og:url" content="http://mysite.com/index.php?type=<?php echo $params['type']; ?>&locale=<?php echo $params['locale']; ?>&title=<?php echo $params['title']; ?>&image=<?php echo $params['image']; ?>&description=<?php echo $params['description']; ?>"/>
        <meta property="og:type" content="MY_APP_NAME_SPACE:<?php echo $params['type']; ?>"/>
        <meta property="og:locale" content="<?php echo $params['locale']; ?>"/>
        <meta property="og:title" content="<?php echo $params['title']; ?>"/>
        <meta property="og:image" content="http://mysite.com/img/<?php echo $params['image']; ?>.png"/>
        <meta property="og:description" content="<?php echo $params['description']; ?>"/>

    </head>
</html>

Die URL, die ich jetzt in den Facebook-Debugger stelle, kann beliebige dynamische Parameter oder gar keine, alle oder nur eine Auswahl und in beliebiger Reihenfolge enthalten:
http://meinesite.com/index.php?type=restaurant&title=luigis
oder dieses:
http://meinesite.com/index.php?locale=de_DE&description=hi&type=bistro

Nachdem das erledigt ist: Ich kann jetzt Aktionen im Stream des Benutzers veröffentlichen:

function postRestaurant() {
    FB.api('me/MY_APP_NAMESPACE:have_lunch?\
    start_time=2000-12-12T04:00:00&\
    expires_in=7200&\
    restaurant=' + encodeURIComponent(getRedirectURI() + '?type=restaurant' + '&description=arnold' + '&title=stalone'), 'post', function (response) {
        if (!response || response.error) {
            console.log('postRestaurant: Error occured => ' + response.error.message);
        } else {
            console.log('postRestaurant: Post was successful! Action ID: ' + response.id);
        }
    });
}

Klappt wunderbar! :]

51
borisdiakur

Zunächst möchte ich wiederholen, dass ich fast sicher bin, dass Ihr Problem auf der Tatsache beruht, dass die URL, die Sie an den Debugger übergeben, nicht dynamisch generiert wird. Das URL-Tag fungiert im Wesentlichen als Redirector. Sofern es nicht genau dasselbe ist (dh, die Meta-Tags auf dem URL-Metaobjekt stimmen mit denen auf der URL überein, die Sie übergeben) wie die URL, die Sie testen, erhalten Sie nicht die gewünschten Ergebnisse.

Das Meta-Tag

<meta property="og:url"> 

muss dynamisch generiert werden. Der Debugger wird auf Ihre Standardindexseite anstatt auf die dynamisch generierte Seite umgeleitet.

Zum Beispiel weise ich jedem Objekt, das ich verwende, eine ID zu und habe so etwas wie das Folgende

<meta property="og:url" content="http://example.com/index.php?id=<?php echo $_GET['id'] ?>"/> 

Ich gebe genau diese URL in den Debugger ein, und somit wird die letzte Seite, auf der der Debugger landet, genau diese URL sein.

Auch im Folgenden

<meta property="og:type" content=""/>

wie wird die Immobilie dynamisch generiert? Haben Sie daran gedacht, in Ihrem eigentlichen Code etwas wie das Folgende einzustellen?

<meta property="og:type" content="<?php echo $_GET['type'] ?>"/>

Sie scheinen auch alles in die URL zu schieben, was gefährlich ist und enorme Kopfschmerzen verursachen kann, was hier das Problem sein könnte. Schieben Sie stattdessen nur eines, z. B.? Type = bistro, und geben Sie die erforderlichen Daten aus der DB weiter.

Ich würde empfehlen, die meisten OG-Tags basierend auf einer object_id dynamisch zu generieren. Speichern Sie die relevanten OG-Informationen für jede object_id und geben Sie sie beim Zugriff weiter. Auf diese Weise können Sie auch die Tags, die Sie bei der Aktualisierung von OG verwenden, problemlos erweitern und bearbeiten.

Wenn Sie Probleme mit OG haben, sollten Sie nicht zögern, sie als neue Fragen anstelle von Kommentaren zu posten, da ich garantiere, dass auch andere Leute das gleiche Problem haben.

31
saccharine

Ich bin mir ziemlich sicher, Facebook crawlt nicht mehr any URLs mit Parametern. Es "leitet" immer zu einer abgespeckten Version der URL weiter.

In OPs Beispiel:

http://example.com/index.php?type=restaurant&title=luigis

wird

http://example.com/index.php

egal was du tust. Das Nächste, was ich zu einer Erklärung gesehen habe, ist dies :

A URL with no session id or extraneous parameters. All shares on Facebook will use this as the identifying URL for this article.
4
gerbz

Ja, funktioniert wie ein Zauber, braucht aber eine Neukodierung für mich. Ich musste eine neue Seite wie diese erstellen:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# MY_APP_NAME_SPACE: http://ogp.me/ns/fb/MY_APP_NAME_SPACE#">
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

        <!-- Open Graph meta tags -->
        <meta property="og:title" content="<?= urldecode($_GET['title']) ?>" />
        <meta property="og:type" content="article" />
        <meta property="og:url" content="<?= "http://www.calsots.com".$_SERVER['REQUEST_URI']; ?>" />
        <meta property="og:image" content="<?= $_GET['image'] ?>" />
        <meta property="og:site_name" content="Calsots.com" />
        <meta property="fb:admins" content="MY_APP_ID" />
        <meta property="og:description" content="<?= urldecode($_GET['description']) ?>" />

    </head>
</html>
2
Oscar Pascual

Wenn Sie in Ihren Objekttypen auf den Link Code abrufen klicken, haben Sie versucht, den Code einzufügen, den Sie erhalten haben?
Ich würde versuchen, in Ihr Web einzufügen, und wenn es dann funktioniert, replizieren Sie die HTML-Ausgabe.
Versuchen Sie es ohne das DOCTYPE-Tag.
Hier ist ein Beispiel von dem, was ich bekommen habe, und ich sehe diese Tags oben nicht: fb: app_id, nicht sicher, ob es einen Unterschied macht.
Sollte die og: url nicht auch die Variablen am Ende enthalten?

<head prefix = "og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# website: http://ogp.me/ns/website# ">
<meta property = "fb: app_id" content = "1234567888">
<meta property = "og: url" content = "http://meinesite.com/index.php?type=MY_APP_NAMESPACE%3Abistro">

1
Joao B

Für Joomla Open Graph Meta Dynamic:

<meta property="og:title" content="<?=
$title = $this->getTitle();
?>" />
        <meta property="og:type" content="website" />
        <meta property="og:url" content="<?= "http://YORUWEBSITE.com".$_SERVER['REQUEST_URI']; ?>" />
        <meta property="og:image" content="http://YOURWEBSITE.com/images/stories/BIGIMAGE.jpg" />
        <meta property="og:site_name" content="YOURWEBSITE.com" />
        <meta property="fb:app_id" content="YOURFACEBOOKAPPIDNUMBER" />
        <meta property="og:description" content="<?= $title = $this->getDescription(); ?>" />
0
MilosK