2012-03-31 175 views
0

我正在創建一個應用程序,用於在用戶下載特定音樂專輯時向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" /> 

回答

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',... 
+0

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

1

調試器顯示每個專輯,所以這可能只是一個臨時緩存問題。如果不是這樣,那麼快速(但不太可能)的猜測是Facebook沒有區分這兩個頁面,因爲唯一的區別是查詢字符串。您可以使用mod_rewrite使URL更獨特(例如/ album/the-pink-slip)。

另外,在對象調試器中提交URL時,您只需要使用fbrefresh = CAN_BE_ANYTHING參數 - 您無需將其放入專輯頁面的og:url屬性中。