Я хочу отображать большие фотографии в моем представлении фида в Facebook сразу. Можно ли получить URL-адрес большого фото src из потока/канала, используя один вызов API? Идентификатор фотографии возвращается в потоке/канале, и, конечно же, можно добавить этот идентификатор фотографии в дополнительный вызов FQL или графика API, чтобы получить всю информацию об этой фотографии. Тем не менее, существует ли способ использования многозадачных или пакетных вызовов для получения более крупного URL-адреса src для фотографий с использованием одного обратного интерфейса API?
Как получить URL большой фотографии в одном вызове API?
Ответ 1
Я не пробовал это с фотографиями stream/feed, но общепринятый способ сделать это:
http://graph.facebook.com/{ID of object}/picture
Если вы хотите "большую" версию, вы бы сделали:
http://graph.facebook.com/{ID of object}/picture?type=large
Я не уверен на 100%, если это будет работать для фактической фотографии (вместо изображения профиля пользователя или профиля страницы pic), но у меня есть догадка, что это будет - единственное предостережение в том, что вы, очевидно, должны иметь зарегистрированный в пользователь, которому разрешено просматривать фотографию (если она не открыта).
Ответ 2
Если кто-то ищет это и набирать большой, недостаточно, я нашел другие решения.
Тип large
в любом случае является небольшим (близко к 200px). Вы можете получить увеличенное изображение, добавив i.e. ?width=1000
или ?height=1000
. Facebook вернет изображение, наиболее близкое к заданному размеру, и сохранит пропорции. При прохождении обоих размеров, таких как ?width=1000&height=1000
, facebook вырезает изображение для заданных размеров (в данном случае квадрат).
Ответ 3
Используйте Facebook UserId (Oject ID), чтобы получить изображение.
https://graph.facebook.com/173xxxx8635/picture?type=large&redirect=false
который возвращает данные JSON с URL-адресом изображения.
{
"data": {
"is_silhouette": false,
"url": "https://fbcdn-profile-a.akamaihd.net/xxx/xyz/1cc066a2cae3f301d"
}
}
Ответ 4
Хороший трюк с новым api - это получить поле pic_cover из таблицы событий и обработать его в соответствии с размером, который вы хотите использовать
Ответ 5
Я обнаружил, что, когда у меня была такая проблема, оказалось, что это была фотография, которую я загружал, а не размер, который я устанавливал.
Если, например, я загрузил все свои фотографии с запросом
[FBRequestConnection startWithGraphPath:@"/me/photos?fields=created_time,name,picture&type=tagged" parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection * connection, id result, NSError *error) {
NSDictionary * userData = (NSDictionary *)result;
NSMutableArray * array = [[NSMutableArray alloc] initWithArray:userData[@"data"]];
for (NSDictionary * dict in eventsToAdd) {
UIImage * image = dict[@"picture"]
}
}];
Я использую поиск словарного слова "картинка", поскольку хочу изображение.
Это, хотя и даст мне изображение более низкого качества, чем если бы я искал "источник" в этом поиске:
[FBRequestConnection startWithGraphPath:@"/me/photos?fields=created_time,name,source&type=tagged" parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection * connection, id result, NSError *error) {
NSDictionary * userData = (NSDictionary *)result;
NSMutableArray * array = [[NSMutableArray alloc] initWithArray:userData[@"data"]];
for (NSDictionary * dict in eventsToAdd) {
UIImage * image = dict[@"source"]
}
}];
Если вы заходите в проводник API Facebook и просматриваете фотографии, а затем нажимаете ссылки на картинку и источник jpg, вы можете увидеть разницу в размере и качестве.
Сменяя этот метод, мне удалось избавиться от использования параметров типа, поскольку он, похоже, не отличается.
Примечание. Я использую iPhone, а не iPad или большой экран, поэтому я не знаю, как это влияет на большие экраны.
Ответ 6
Ответ @streetlogics отлично работает, но только на изображениях с {object_id}
.
http://graph.facebook.com/{object_id}/picture
Но мне также нужны большие картинки для общих каналов, которые иногда не имеют {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
Итак, я сделал цикл, который проверяет наличие {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";
}