Получить фото обложки с помощью Facebook API

в моем приложении для Android я пытаюсь получить фотографию обложки пользователя из его учетной записи Facebook.

Я могу получить изображение профиля, используя ниже код.

profilePicUrl = new URL("http://graph.facebook.com/" + userId + "/picture?type=large");

profilePicBmp = BitmapFactory.decodeStream(profilePicUrl.openConnection().getInputStream());

на документация указывает следующее Для получения фотографии обложки.

фотография обложки пользователя (должна быть явно запрошена с помощью поля=параметр покрытия)

требует маркер доступа

возвращает: array поля id, источник и offset_y

Итак, структура ответа JSON будет примерно такой.

{
   "cover": {
      "cover_id": "10151008748223553",
      "source": "http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash4/s720x720/391237_10151008748223553_422785532_n.jpg",
      "offset_y": 0
   },
   "id": "19292868552"
}

Я довольно новичок в Facebook Graph API и, следовательно, не имею много знаний о том, как это сделать.

Я пробовал это coverPicUrl = new URL("http://graph.facebook.com/" + userId + "/cover?type=large");

и это coverPicUrl = new URL("http://graph.facebook.com/" + userId + "/fields=cover");

но я не смог получить изображение обложки профиля пользователя.

поиск в интернете также не дали никаких плодотворных результаты.

любая помощь будет действительно оценили.

спасибо!

5 ответов


тег "source "(JSONObject) вложен в другой JSONObject, тег" cover". Чтобы проанализировать этот результат, вам нужно будет использовать что-то вроде этого:

JSONObject JOSource = JOCover.optJSONObject("cover");
String coverPhoto = JOSource.getString("source");

на JOCover используемый в Примере предполагает, что у вас уже есть JSONOBject (JOCover) для разбора корень. Вы можете заменить свой собственный JSONObject в своем месте.

тег "source "не может быть доступен напрямую, поскольку он вложен в тег" cover". Вам придется использовать ".optJSONObject("cover")". Я видел, как люди используют .getString вместо .optJSONObject но я никогда не использовал его. Выбирайте то, что работает для вас.

редактировать

в соответствии с вашим запросом на решение с использованием Graph API я редактирую более раннее решение и заменяю его решением Graph API.

желательно, в AsyncTask используйте этот код в doInBackground:

String URL = "https://graph.facebook.com/" + THE_USER_ID + "?fields=cover&access_token=" + Utility.mFacebook.getAccessToken();

String finalCoverPhoto;

try {

    HttpClient hc = new DefaultHttpClient();
    HttpGet get = new HttpGet(URL);
    HttpResponse rp = hc.execute(get);

    if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
        String result = EntityUtils.toString(rp.getEntity());

        JSONObject JODetails = new JSONObject(result);

        if (JODetails.has("cover")) {
            String getInitialCover = JODetails.getString("cover");

            if (getInitialCover.equals("null")) {
                finalCoverPhoto = null;
        } else {
            JSONObject JOCover = JODetails.optJSONObject("cover");

            if (JOCover.has("source"))  {
                finalCoverPhoto = JOCover.getString("source");
            } else {
                finalCoverPhoto = null;
            }
        }
    } else {
        finalCoverPhoto = null;
    }
} catch (Exception e) {
    // TODO: handle exception
}

я протестировал это решение и отлично работает. Вам придется добавить любое дополнение fields к базовому URL-адресу, который необходимые для вашей деятельности. Для тестирования я использовал только fields=cover

и onPostExecute, сделайте вашу вещь для показа изображения крышки. Надеюсь, это поможет.


Примечание: получение фото обложки с помощью Facebook API и endpoint https://graph.facebook.com/me?fields=cover больше не работает с 20 декабря 2014 года.

Он должен был дать следующий ответ:

{
   "cover": {
   "cover_id": "10151008748223553",
   "source": "http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash4/s720x720/391237_10151008748223553_422785532_n.jpg",
   "offset_y": 0
   },
   "id": "19292868552"
}

но теперь он просто дает пользователю id:

{
  "id": "19292868552"
}

проверено с помощью Graph Tool explorer 2.2 используя me?fields=cover.


У вас уже есть Url-адрес обложки, просто прочитайте эту строку из массива Json, из этой строки вы можете получить фотографию обложки. это URL-адрес обложки

"source": "http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash4/s720x720/391237_10151008748223553_422785532_n.jpg",

таким образом, Вы можете получить Url-адрес изображения для объекта Json.

String cover_photo = JsonObject.getString("source");

я реализовал аналогичную функцию в своем приложении. Вот как я это сделал, используя FQL:

String cover_photo = jsonObj.getJSONObject("pic_cover").getString("source");

это дает url-адрес фотографии обложки, так как source тег вложен в тег pic_cover объект, который затем может быть установлен в ImageView использование библиотеки, такой как Universal Image Loader


object.getJSONObject("cover").getString("source")