【发布时间】:2012-01-15 22:20:47
【问题描述】:
正如标题所暗示的,我正在尝试动态生成 Facebook Open Graph 元标记,但我无法使其正常工作。有可能吗?
更新:
最后我在@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);
}
});
}
像魅力一样工作! : ]
【问题讨论】:
-
和你一样,我可以通过使用调试器中的 GET/POST 参数调用我的对象的 URL 来生成动态元标记,但是你知道如何用你的应用程序实现类似的东西吗?到目前为止,当我使用 Javascript SDK 尝试发布操作,并在我的对象的 URL 中包含参数时(就像我在调试器中那样)Facebook 似乎删除了这些参数,以便我的对象页面(index.php为你)永远不会收到他们。有什么想法吗?
-
@bradleygriffith 是的,我已经设法将操作发布到用户的信息流中。我再次用一个关于如何使用 JavaScript SDK 的示例更新了我的问题。
-
我遇到了同样的问题。你究竟是如何解决这个问题的?您如何解释 facebook 以读取所有参数的完整 URL?
-
我总是收到此错误:URL 'mydomain.com/object/?og:type' 类型为'website'的对象
-
@AryanVenkat 无法处理客户端代码,因为 facebook 抓取工具在解析您的网站之前不会执行任何 JavaScript 代码。
标签: php facebook facebook-opengraph meta-tags