2

我在网上搜索了解决方案,但似乎无处可去。

我的页面 (php) 正在加载页面中的一个 url(比如说 www.mysite.com),可以完成几个关于音乐(专辑)的搜索选项并显示曲目。(不刷新页面)。信息来自数据库。所以网址保持不变。在这个搜索过程中,facebook 元标记(描述、url、标题)保持不变也是因为我从不重新加载页面,我只将内容加载到 div 中。

我希望能够“喜欢”这张专辑,并反向链接到它。所以我创建了使用 url 加载专辑的功能:www.mysite.com?album=12345 我可以显示一个带有这个 url 的弹出窗口来分享这个。所以,如果你去这个 url,内容是根据 url 参数自动加载的。

在这个地方(你可以看到带有参数 ?album=12345 的 url)我也想显示“喜欢”按钮。(我生成了 url,所以我在代码中使用它:)

echo '<div style="overflow:visable" class="fb-like" data-href="http://mysite.com/?album='.$albumid.'" data-send="false" data-width="300" data-show-faces="false">?</div>';

到目前为止它可以工作......(在我添加解析代码以启用按钮之后)但是,like 按钮采用默认的元标记描述和标题等。在这张专辑或艺术家上并不特别 - 所以它不是唯一的。

注意:如果我从标题中删除 meta[property=og:url],我可以使用 ?album 参数使按钮反向链接到正确的 url。否则它将返回到站点 mysite.com 的默认根目录(这确实会使 lint 工具在丢失的元数据上给出错误)

我试图添加到相同的功能中,例如:

$("meta[property=og\\:url]").attr("content", "http://mysite.com/?album=<?php echo $albumid; ?>");
$("meta[property=og\\:title]").attr("content", "<?php echo $artistname; ?>");
$("meta[property=og\\:description]").attr("content", "<?php echo $albumname; ?>");

我这样做是为了更改元标记,只是为了让点赞按钮显示正确的描述等。但这不起作用。我知道 facebook 会抓取页面(我使用了 lint 工具等),但我永远不会执行 javascript,因此元标记将保持默认(首次加载页面时)

我能做些什么来制作一个独特的类似按钮,它有自己的描述(专辑名等),而无需为每个按钮制作一个 html 页面(数据库中的数百万张专辑......)

我希望这是有道理的。

我似乎无法弄清楚这一点,请帮助:-)


根据以下评论,我使用了以下解决方案:

您应该在打开 url(使用参数 ?alb_id=12345)时创建正确的 fb 元标记。这足以让like按钮完成它的工作。

4

2 回答 2

0

我能做些什么来制作一个独特的类似按钮,它有自己的描述(专辑名等),而无需为每个按钮制作一个 html 页面(数据库中的数百万张专辑......)

你不能,因为 Open Graph 对象URL(分别由它们的 URL表示/标识)。

一个 URL == 一个 Open Graph 对象。

但是,每张专辑都有一个 URL 有什么问题呢?由于这一切都使用参数,因此您不必为每个专辑 URL 手动创建一个页面……</p>

于 2012-11-13T10:47:53.550 回答
0

您的逻辑很好,直到您使用 jquery 设置元标记。它们应该使用 PHP 设置。正如您可以想象的那样,scraper 不会执行 jquery,但如果它提供了已经 PHP 定制的元标记,它将使用它们(如提供的那样)。

只需根据请求的专辑 ID 在服务器端准备 og:tags,它应该可以工作。它可能无法立即工作,我记得以前刮板偶尔会出现缓存问题。

简而言之,index.php?album=123 将向爬虫发送一组不同的 og:tags,而不是 index.php?album=321。只需在服务器端设置它们。

<meta property="og:title" content="<?php echo $artistTitle; ?>"/>
于 2012-11-13T11:01:41.120 回答