Некоторые фотографии из альбома пользователя возвращают неподдерживаемый запрос на получение, другие работают нормально - PullRequest
1 голос
/ 28 ноября 2011

Я заканчиваю флэш-приложение.Вы можете увидеть приложение здесь:

https://apps.facebook.com/wacky-winter-woolies/

Приложение отправляет FQL-запрос для получения альбомов пользователя, генерирует эскизы на основе cover_object_id.Эта часть отлично работает.После нажатия на альбом приложение загружает эскизы фотографий таким же образом.Мы только что обнаружили, что, хотя это обычно работает, для некоторых людей и некоторых фотографий вместо миниатюры Facebook возвращает следующую ошибку:

{"error": {"message": "Неподдерживаемый запрос на получение. "," type ":" GraphMethodException "}} picture

URL-адрес запроса эскиза фотографии:

https://graph.facebook.com/(object_id)/picture?type=thumbnail&access_token=(valid_token)

Theзапрос, используемый для создания списка фотографий в альбоме:

var fql: String = "SELECT object_id, aid FROM photo WHERE aid = \" "+ aid +" \ "";

Разрешения для приложения:

'permissions' => 'publish_stream, user_photos, friends_photos'

По существу, некоторые фотографии возвращаютошибка.Object_id фотографии действителен, так как он извлекается прямо из результата FQL - вот пример фактического запроса, который возвращает ошибку, вместе с токеном

https: // graph.facebook.com/10150102643214148/picture? type = миниатюра & access_token = AAACJlS1owXcBAAh9KIBAYDobeWAvcuHdr96DHYpJJafhHjianz07jWZBYj6klqqZC4cYA2ZCOxTt2fOXCNAH4GBZCPK75nl 2d (не более) * * * * * * * * 8Как это можно исправить?


Edit1:

Это интересно.

Вот необработанные идентификаторы объекта из набора изображений.Один из них недействителен.Угадайте, что?

  • 387476299148
  • 387476299148
  • 10150102643214148
  • 492300644148
  • 492300644148

По некоторым причинам для определенных картинок в альбоме FQL возвращает необычно длинный object_id.Эти длинные object_id недействительны.

Как вы видите, действительные и недействительные идентификаторы заканчиваются одинаковой последовательностью - 148. Несмотря на то, что я обрабатываю результат как строку и не удаляю символы из результата, возможно, Facebook хотел отправить мне10150_102643214148 вместо этого и поскользнулся.

В настоящее время я просто выбрасываю неверные идентификаторы.Надеюсь, этого будет достаточно, чтобы предотвратить пустые фотографии, и Facebook не отравит результаты моего запроса более поддельными данными.


Edit2: По какой-то причине вышеприведенный подход не сработал.Некоторые изображения все равно могут привести к ошибке.К счастью, таблицы FQL имеют такие свойства, как "src_small" и "src_large", которые возвращают прямую ссылку на фотографии.Хотя якобы граф позволяет получать любое изображение с помощью его API, мне пришлось обратиться к src-результатам запроса - я думаю, это был своего рода патч для подобных ситуаций.

Короче говоря, API-интерфейс GRAPH в Facebookсломана.Надеюсь, это скоро исправят.

1 Ответ

1 голос
/ 06 февраля 2012

У меня была идентичная проблема. После двух часов суеты я обнаружил, что иногда некоторые альбомы возвращаются без идентификатора для обложки (или нет обложки).

После помещения оператора if в мой цикл, чтобы увидеть, был ли на самом деле идентификатор перед вызовом функции api (), он решил эту проблему.

Ниже приведены 4 соответствующие функции из одного из моих классов для демонстрации. (Я постараюсь выделить определенную строку ниже, но я впервые публикую на этом сайте:

public function callAPI($path){
    $params = array('access_token' => $this->access_token);
    $results = $this->_facebookObj->api($path, 'GET', $params );
    return $results;
}

public function listAlbums(){
    $data = $this->_getAlbumsData();
    echo '<ul>';
    try{
    foreach($data as $key => $value){
        if(isset($value['coverPhotoID'])) { $coverImage = $this->getImageInfo($value['coverPhotoID']);}
        echo '<li><img src="' . $coverImage['thumb'] . '"></li>';
        echo '<li>' . $value['albumTitle'] . '</li>';
        if(isset($value['albumDescription'])){echo '<ul><li>Description: ' . $value['albumDescription'] . '</li></ul>';}
    }
    } catch (FacebookApiException $e){
        echo $e->getMessage();
    }
    echo '<ul>';
}



public function getImageInfo($imageID){
    $path = '/' . $imageID;
    $res = $this->callAPI($path);
    $feedArray = array();
        $feedArray['id'] = $res['id'];
        $feedArray['thumb'] = $res['picture'];
        $feedArray['fullImage'] = $res['source'];
        $feedArray['imgHeight'] = $res['height'];
        $feedArray['imgWidth'] = $res['width'];

    return $feedArray;
}

protected function _getAlbumsData()
{
    $feedArray = array();
    $path = '/' . $this->_pageID . '/albums';
$res = $this->callAPI($path);

foreach ($res['data'] as $key => $album) {
        // assign data to $feedArray
        $feedArray[$key]['albumID'] = $album['id'];
        $feedArray[$key]['albumTitle'] = $album['name'];
        $feedArray[$key]['coverPhotoID'] = $album['cover_photo'];
        if(isset($album['description'])){$feedArray[$key]['albumDescription'] = $album['description'];}
        if(isset($album['count'])){$feedArray[$key]['countOfPhotos'] = $album['count'];}

        //create a new Album object with id
        //$albumObj = new Album($album['cover_photo']);
}
    return $feedArray;


}
...