Facebook Open Graph Cache问题

问题描述:

我正在创建一个应用程序,用于在用户下载特定音乐专辑时向Facebook发布信息。我有正确的信息解析。因此,如果用户点击专辑1的下载,它将提取信息并提交到打开的图表并显示在Facebook上,但是当我点击下一个专辑按钮时,不是解析专辑2的信息,而是将专辑1的信息。我试过fbrefresh=CAN_BE_ANYTHING,但似乎没有任何工作。有没有人有这方面的见解?Facebook Open Graph Cache问题

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" /> 

当您将请求发布到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',... 
+0

工程就像一个魅力。谢谢! – 2012-04-01 11:16:08

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

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