2013-10-09 52 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"; 
}