Подтвердить что ты не робот

Как получить URL большой фотографии в одном вызове API?

Я хочу отображать большие фотографии в моем представлении фида в Facebook сразу. Можно ли получить URL-адрес большого фото src из потока/канала, используя один вызов API? Идентификатор фотографии возвращается в потоке/канале, и, конечно же, можно добавить этот идентификатор фотографии в дополнительный вызов FQL или графика API, чтобы получить всю информацию об этой фотографии. Тем не менее, существует ли способ использования многозадачных или пакетных вызовов для получения более крупного URL-адреса src для фотографий с использованием одного обратного интерфейса API?

4b9b3361

Ответ 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";
}