2013-10-09 51 views
2

我正在使用Facebook Graph API獲取用戶的新聞提要。Facebook Graph API object_id有時會丟失

我的請求URL是: XXXXXXXXXXXXXX /飼料領域的=,ID,CREATED_TIME,圖片,鏈接,OBJECT_ID,消息,likes.fields(ID)

隨着OBJECT_ID,我想要得到的大使用以下網址: http://graph.facebook.com/OBJECT_ID/picture?type=normal

圖片返回字段始終填充,但object_id不會在某些帖子返回。爲什麼是這樣?我真的需要高分辨率的圖片,並沒有找到另一種方式來獲取此圖片。

+1

的object_id將只返回如果附件是一個網站的對象(例如由用戶上傳的圖像)。 Feed中的某些故事根本沒有圖片,有些圖片不是Facebook對象(例如,共享鏈接的縮略圖)。 –

+0

@MingLi看來你是對的,所有沒有object_id的帖子都會發布鏈接而不是圖片..謝謝,請把它放在答案中,以便我可以接受它。 – harmjanr

回答

1

只有當附件是Facebook對象(例如用戶上傳的圖片)時,纔會返回object_id。 Feed中的某些故事根本沒有圖片,有些圖片不是Facebook對象(例如,共享鏈接的縮略圖)。

+0

由於該過濾器無法與Graph協同工作,因此我將解析器更改爲使用FQL。它現在只有來自用戶的照片,完美的作品。謝謝! – harmjanr

0

有時,Facebook會保留圖像的縮略圖,並將外部鏈接存儲在圖形請求返回的URL中的較大版本的圖像上。爲了訪問在任何情況下的圖像,我用下面的代碼,其中smallURL是由圖形請求返回的URL:

private String getRealURL(String smallURL){ 
    if (smallURL.contains("url=http")){ 
     String[] pieces = smallURL.split("url="); 
     pieces[1].replace("%2F", "//"); 
     pieces[1].replace("%3A", ":"); 
     return pieces[1];   
    } 
    else{ 
     StringBuilder stringBuilder = new StringBuilder(); 
     stringBuilder.setLength(0); 
     stringBuilder.append("http://graph.facebook.com/"); 
     stringBuilder.append(item.getObjectID()); 
     stringBuilder.append("/picture?type=large"); 
     return stringBuilder.toString(); 
    } 
} 
0

我也注意到,一些FB的帖子沒有{object_id}的大幅照片,但意識到{picture}縮略圖URL包含原始放大圖像的編碼的URL:

https://external.xx.fbcdn.net/safe_image.php?d=AQBe9UvGd0vPbAHP&w=130&h=130&url=http%3A%2F%2Fskift.com%2Fwp-content%2Fuploads%2F2015%2F12%2Fpollution.jpg&cfs=1 

- >包含 - >

http://skift.com/wp-content/uploads/2015/12/pollution.jpg 

小號O I檢查{object_id},並且如果沒有則嘗試從{picture}提取原始URL:

if(isset($post['object_id'])) { 
    echo "http://graph.facebook.com/".$post['object_id']."/picture"; 
    } 
    elseif(isset($post['picture'])) { 
     echo urldecode(preg_replace('/&cfs.*/', '', preg_replace('/.*url=/', '', $post['picture']))); 
    } 
    else { 
     echo "no_large_image"; 
}