当前位置: 首页 > 面试题库 >

动态生成Facebook Open Graph元标记

田焕
2023-03-14
问题内容

就像标题所暗示的那样,我正在尝试动态生成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);
        }
    });
}

奇迹般有效!:]


问题答案:

首先,我想重申一下,我几乎肯定您的问题是由于您传递给调试器的URL不是动态生成的事实。url标记本质上充当重定向器。除非它与测试的URL完全相同(意味着url元对象上的meta标签与传递的url上的meta标签完全相同),否则您将无法获得所需的结果。

元标记

<meta property="og:url">

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

例如,我为正在使用的每个对象分配一个ID,因此我有类似以下内容

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

我将那个确切的URL传递给调试器,因此调试器到达的最后一页将是那个确切的URL。

另外,在下面

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

如何动态生成属性?您还记得在实际代码中设置如下内容吗?

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

您似乎也将所有内容都推到了url中,这很危险,并且可能引起巨大的麻烦,这可能是这里的问题。相反,只推一件事情,例如?type =
bistro,然后从数据库传播必需的数据。

我建议根据object_id动态生成大多数OG标签。存储每个object_id的相关OG信息,然后在访问它们时传播它们。这样,您还可以轻松扩展和编辑更新OG时使用的标签。

如果您在使用OG时遇到问题,则应毫不犹豫地将其作为新问题而不是发表评论,因为我保证其他人也有同样的问题。



 类似资料:
  • 问题内容: 假设我有一个格式为基本XML的文件,如下所示: 我想在运行时变成这样的东西: …,然后将新创建的枚举传递给我的应用程序。我将如何实现这样的目标?可以吗 问题答案: 您尝试做的事情没有任何意义。枚举实际上仅是为了编译时的利益,因为它们表示一组固定的常量。在运行时,动态生成的枚举的含义是什么- 与普通对象有什么不同?例如: 您的XML可以解析为新实例化的对象,这些对象可以存储在某些程序中,

  • 我正在尝试为一栋建筑制作一个模拟电梯的GUI(实际上是为了测试线程/c扫描),但当生成电梯控制面板的按钮和每个楼层的按钮时,我有点卡住了。我考虑为每层楼生成一对新的按钮,并为每部电梯生成一个新的控制面板。此外,拥有不同数量的楼层也很困难。不管怎样,我的问题是,这样做最好的方式是什么?也许不必为每件事都生成新的按钮,只需使用一组按钮并更改每个楼层/电梯的操作?我这么问是因为我对GUI不太熟悉。谢谢你

  • 我使用JSOUP获取网站。以下是网页链接: http://www.yelp.com/search?find_desc=restaurants&find_loc=Westmont%2C+il&ns=1&ls=43131f934bb3adf3#find_loc=hinsdale,+il&l=p:il:hinsdale::&sortby=rating&unfold=1 不幸的是,浏览器中的“view s

  • 问题内容: 我想生成大量的Tkinter ,它们可以做不同的事情。我有以下代码: 如果为5,尽管我得到标记为的按钮,但单击它们时都可以。 我需要第一个按钮执行,第二个按钮执行,依此类推。 问题答案: 我认为问题在于,循环结束后,会获取的最终值。这应该解决(未测试): 更新资料 顺便说一句,这是通过在函数中添加一个自变量的默认值来实现的,该默认值是根据在循环中创建每个变量时的值计算得出的,而不是在稍

  • GIF(Graphics Interchange Format,图形交换格式)是一种“位图”图像格式,它以 作为图像的扩展名。GIF 图片非常适合在互联网中使用,这是因为它采用了图像预压缩技术,该技术的应用,在一定程度上减少了图像传播、加载所消耗的时间。 与其他格式的图片相比,GIF 还有一项非常重要的应用,那就是生成动态图。我们知道,Pillow 能够处理多种图像格式,包括 GIF 格式,它可以

  • 我有一个GraphQL服务器,它能够为指定源提供timeseries数据(例如,传感器数据)。获取传感器数据的示例查询可能是: 在我的前端,我想允许用户选择一个或多个源,并显示一个图表,每一个都有一行。通过使用下面这样的查询,似乎可以实现以下操作: 大多数GraphQL教程似乎关注于静态查询(例如,唯一改变的是变量,而不是请求的实际形状)--但在我的例子中,我需要查询本身是动态的(为我选择的每个I