Получить фото обложки с помощью 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