生成的Facebook Open Graph的meta标签动态

问题描述 投票:51回答:5

正如标题所暗示我试图动态生成的Facebook的Open Graph meta标签,但我不能得到它的工作。它甚至有可能?

UPDATE:

最后我得到了它与@saccharine的帮助工作。下面的代码为我工作:

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

我投入了Facebook现在调试器的URL可以包括任何动态参数,甚至没有,全部或仅选择在像这样的任何命令: http://mysite.com/index.php?type=restaurant&title=luigis 或这个: http://mysite.com/index.php?locale=de_DE&description=hi&type=bistro

有了这样完成的:我现在可以发布行动用户的信息流:

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

奇迹般有效! :]

php facebook facebook-opengraph meta-tags
5个回答
31
投票

首先,我要重申,我几乎可以肯定,你的问题是由于要传递到调试器的URL不是动态生成的事实。的url标记基本上扮演一个重定向。除非它是完全一样的(网址元对象意义上的元标记是一样的那些您所传递的网址)为您正在测试的网址,你不会得到你想要的结果。

meta标记

<meta property="og:url"> 

需要动态生成的。调试器被重定向到默认的索引页,而不是动态生成的页面。

例如,我分配一个ID,我使用的每一个对象,所以我有类似如下

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

我通过在确切的网址进入调试器,从而最终页面的调试器土地上将会是准确的URL。

此外,在以下

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

如何动态地生成的财产?你记得在你的实际代码像下面这样设置?

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

您也似乎搡到一切的URL,这是危险的,会造成巨大的头痛,这可能是这里的问题。相反,推的只有一件事,例如β型=小酒馆,然后传播从DB必要的数据。

我会推荐动态生成基于一个OBJECT_ID最OG标签。存储每OBJECT_ID相关OG信息,然后访问时它们传播。这样一来,你也可以很容易地扩展和编辑时OG更新您使用的标签。

如果你有OG问题,你应该毫不犹豫地发布他们的新问题,而不是意见,我保证其他人也有同样的问题。


4
投票

我相当肯定的Facebook不再爬带参数的网址。它总是“重定向”到URL的一个简化版本。

在有机磷农药例如:

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

http://example.com/index.php

不管你做什么。我见过一个解释最近的事情是this

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

2
投票

是的,就像一个魅力,但需要一些重新编码为我。我不得不这样创建一个新的页面:

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

1
投票

当您点击对象类型的获取代码链接,你尝试将其粘贴给你的代码? 我会尝试粘贴到你的网页,然后如果它的工作原理,复制HTML输出。 尝试没有DOCTYPE标签。 继承人的我得到了什么样的,我没有看到这些标签上面:FB:APP_ID,如果它的确与众不同不能确定。 此外,不应该将OG:URL还包括在最后的变量?

<头前缀= “OG:http://ogp.me/ns# FB:http://ogp.me/ns/fb#网站:http://ogp.me/ns/website#”> <元属性= “FB:APP_ID” CONTENT = “1234567888”> <元属性= “OG:URL” CONTENT = “http://mysite.com/index.php?type=MY_APP_NAMESPACE%3Abistro”>


0
投票

为Joomla的Open Graph元动态:

<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(); ?>" />
© www.soinside.com 2019 - 2024. All rights reserved.