Facebook Graph API object_id有时会丢失

我正在使用Facebook Graph API来获取用户的新闻源。

我的请求URL是:xxxxxxxxxxxxxx / feed?fields = from,id,created_time,picture,link,object_id,message,likes.fields(id)

使用object_id,我想使用以下url获得post的大图: http : //graph.facebook.com/OBJECT_ID/picture? type = normal

图片返回字段始终填充,但在某些post中未返回object_id。 为什么是这样? 我真的需要高分辨率的图片,并没有找到另一种方法来获得这个..

仅当附件是facebook对象(例如,用户上传的图像)时才返回object_id。 Feed中的某些故事根本没有图片,有些图片不是facebook对象(例如,共享链接的缩略图)。

有时,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(); } } 

我还注意到一些FBpost没有{object_id}用于大型照片,但意识到{picture}缩略图URL包含原始大图像的编码URL:

 http://sofzh.miximages.com/ios/safe_image.phpd=AQBe9UvGd0vPbAHP&w=130&h=130&url=httpskift.comwp-contentuploads201512pollution.png&cfs=1 

– >包含 – >

 http://sofzh.miximages.com/ios/pollution.jpg 

所以我检查{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"; }