2013-10-09 4 views
2

Я использую API-интерфейс Facebook для получения новостей для пользователя.Facebook Graph API object_id иногда отсутствует

Мой запрос URL является: XXXXXXXXXXXXXX/корма поля = от, идентификатор, created_time, фотография, ссылка, object_id, сообщение, likes.fields (ID)

С object_id, я хочу, чтобы получить большой изображение сообщения, используя следующий адрес: http://graph.facebook.com/OBJECT_ID/picture?type=normal

Поле возврата изображения всегда заполнено, но object_id не возвращается на некоторых постах. Почему это? Мне действительно нужно изображение с высоким разрешением и не нашел другого способа получить это.

+1

object_id возвращается только если вложение является объектом facebook (например, изображение, загруженное пользователем). Некоторые истории в фиде не имеют изображения вообще, и некоторые фотографии не являются объектами facebook (например, миниатюрами для общих ссылок). –

+0

@MingLi Кажется, что вы правы, все сообщения без object_id размещены как ссылки вместо изображений. Спасибо, пожалуйста, поставьте его в ответ, чтобы я мог его принять. – harmjanr

ответ

1

Object_id возвращается только в том случае, если вложение представляет собой объект facebook (например, изображение, загруженное пользователем). Некоторые истории в фиде не имеют изображения вообще, и некоторые фотографии не являются объектами 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} для больших фотографий, но понял, что URL-{picture} эскиз содержит кодированный 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 

S о я проверить {object_id}, и если нет, то попытаться извлечь исходный URL из {picture}:

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"; 
}