52 votes

Génération dynamique de méta tags Facebook Open Graph

Comme le titre l'indique je suis en train de générer Facebook Open Graph meta tags de façon dynamique, mais je ne peux pas le faire fonctionner. Est-il même possible?

Mise à JOUR:

Enfin je l'ai eu à travailler avec l'aide de @saccharine. Le code suivant fonctionne pour moi:

<?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>

L'url que je suis en train de mettre sur le Facebook permet maintenant de pouvez inclure les paramètres de la dynamique ou même aucun, ou seulement une sélection et dans n'importe quel ordre, comme ceci:
http://mysite.com/index.php?type=restaurant&title=luigis
ou ceci:
http://mysite.com/index.php?locale=de_DE&description=hi&type=bistro

Avoir accompli: je peux maintenant publier actions de l'utilisateur courant:

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);
        }
    });
}

Fonctionne comme un charme! : ]

31voto

saccharine Points 513

Tout d'abord, je tiens à répéter que je suis presque certain que votre problème est dû au fait que l'url que vous êtes de passage dans le débogueur n'est pas généré dynamiquement. La balise d'url agit essentiellement comme un redirecteur. Sauf si c'est exactement le même (ce qui signifie les balises meta sur l'url de méta-objet est le même que celui de l'url que vous êtes de passage dans) que l'url que vous testez, vous ne serez pas obtenir les résultats que vous recherchez.

La balise meta

<meta property="og:url"> 

doit être généré dynamiquement. Le débogueur est redirigé vers l'index par défaut de la page au lieu de la page générée dynamiquement.

Par exemple, j'attribue un id pour chaque objet que j'utilise, et j'ai donc quelque chose comme ce qui suit

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

Je passe dans l'url exacte dans le débogueur, et donc la dernière page, le débogueur terres sera exactement la même url.

Aussi, dans la suite de

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

comment est la propriété a été généré dynamiquement? Avez-vous rappelez-vous de mettre dans votre code réel, quelque chose comme ce qui suit?

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

Vous aussi, semblent être en train de bousculer tout ce qui est dans l'url, ce qui est dangereux et peut causer d'énormes maux de tête, qui peut être question ici. Au lieu de cela, pousser une seule chose , par exemple ?type=bistro et propager ensuite les données de la DB.

Je recommande de générer dynamiquement la plupart des OG balises basé sur un object_id. Magasin pertinentes OG info pour tous les object_id, puis propager lors de l'accès. De cette façon, vous pouvez facilement étendre et de modifier les balises que vous utilisez lors de l'OG est mis à jour.

Si vous avez des problèmes avec l'OG il ne faut pas hésiter à les poster comme de nouvelles questions à la place des commentaires comme je te garantie que d'autres personnes ont le même problème.

2voto

Oscar Pascual Points 11

Oui, fonctionne comme un charme, mais nécessite un peu de recodage pour moi. J'ai dû créer une nouvelle page comme celle-ci:

 <!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>
 

1voto

Joao B Points 21

Lorsque vous cliquez sur le lien de Code dans votre types d'objet, avez-vous essayé de coller le code qu'il vous a donné?
Je voudrais essayer de coller à votre site web, et puis si ça marche, reproduire le code html de sortie.
À essayer sans la balise DOCTYPE.
Heres un échantillon de ce que j'ai, et je ne vois pas ces balises ci-dessus: fb:app_id, ne sais pas si cela fait une différence.
Aussi, ne devrais pas l'og:url comprennent également les variables à la fin?

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

0voto

MilosK Points 1

Pour Joomla Opengraph 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(); ?>" />
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X