Facebook Open Graph Cache问题

时间:2012-03-31 16:44:22

标签: php javascript facebook opengraph

我正在创建一个应用程序,当用户下载特定的音乐专辑时,该应用程序将信息发布到Facebook。我有正确的解析信息。因此,如果用户点击相册1的下载,它将提取信息并提交到打开的图表并显示在Facebook上,但是当我点击下一个相册按钮,而不是解析相册2的信息时,它会发布再次播放专辑1的信息。我试过fbrefresh=CAN_BE_ANYTHING但似乎没有任何效果。有没有人对此有所了解?

Album 1 Meta Information parse.php?album=The%2520Pink%2520Slip

Album 2 Meta Information parse.php?album=The%2520Sexy%2520Single

以下是我正在使用的代码:

<script type="text/javascript">
function postAlbum(album) {
    FB.api('/me/skibsthekid:listen_to?album=http://www.skibsthekid.com/parse.php?album=' + album, 'post',
    function(response) {
        if (!response) { 
            alert('Error Occurred I got no response with ' + $pageURL);
        } else if (response.error) {
            alert('Error Occurred '+ response.error);
        } else {
            alert('Post was successful! Action ID: ' + album);
        }
    });
}

Parse.php

<?php
    $title = $_GET['album'];
    foreach(glob('files/'. $title .'/*.jpg') as $art) {
        $art = str_replace(" ", "%20", $art);
        $image = 'http://skibsthekid.com/' . $art;
    }
?> 

<meta property="fb:app_id" content="185324271585974" />
<meta property="og:type" content="music.album" />
<meta property="og:title" content="<?php echo $title; ?>" />
<meta property="og:image" content="<?php echo $image; ?>" />
<meta property="og:url" content="http://www.skibsthekid.com/parse.php?album=<?php echo urlencode($title); ?>&fbrefresh=CAN_BE_ANYTHING" />

2 个答案:

答案 0 :(得分:1)

调试器显示每个专辑,因此这可能只是一个临时的缓存问题。如果没有,那么快速(但不太可能)的猜测是Facebook没有区分这两个页面,因为唯一的区别是查询字符串。您可以使用mod_rewrite(例如/ album / the-pink-slip)使URL更加独特。

此外,在对象调试器中提交URL时,您只需要使用fbrefresh = CAN_BE_ANYTHING参数 - 您无需将其放在相册页面的og:url属性中。

答案 1 :(得分:1)

当您将请求发布到Facebook的API时,您不是对目标URL进行编码的URL。第二个?之后的任何内容都被忽略了。你应该这样做:

var album_url = "http://www.skibsthekid.com/parse.php?album=" + album;
FB.api('/me/skibsthekid:listen_to?album='+encodeURIComponent(album_url), 'post',...