Получение "реального" изображения профиля профиля Facebook из графика API
API графа Facebook говорит мне, что я могу получить изображение профиля пользователя, использующего
http://graph.facebook.com/517267866/picture?type=large
который отлично работает. Однако при вводе выше URL-адреса в браузер фактический адрес изображения
http://profile.ak.fbcdn.net/profile-ak-snc1/v227/560/83/n517267866_1928.jpg
Как я могу получить второй URL-адрес, используя первый программный код?
Ответы
Ответ 1
Первый URL-адрес предоставляет HTTP 302 (временное перенаправление) ко второму. Итак, чтобы найти второй URL-адрес программно, вы можете отправить HTTP-запрос для первого URL-адреса и получить заголовок Location
ответа.
Тем не менее, не полагайтесь на второй URL, являющийся pemanent. Немного читайте код ответа HTTP (302 в отличие от постоянного 301), возможно, что Facebook изменяет эти URL-адреса на регулярной основе, чтобы люди не могли, например, использовать их серверы для размещения изображений.
Изменить: Обратите внимание, что URL-адрес CDN, опубликованный OP, теперь равен 404, поэтому мы знаем, что мы не можем полагаться на долговечность URL-адреса. Кроме того, если вы связываетесь с API-интерфейсом Graph с <img>
на странице, защищенной SSL, там есть параметр, вы должны добавить убедитесь, что вы используете https://graph.facebook.com
.
Обновление: API добавил параметр – redirect=false
– что приводит к возврату JSON, а не к перенаправлению. Восстановленный JSON включает URL CDN:
{
"data": {
"url": "http://profile.ak.fbcdn.net/...",
"is_silhouette": false
}
}
Опять же, я бы не стал полагаться на этот URL CDN, который долговечен. Ответ JSON отправляется с разрешительными заголовками CORS, поэтому вы можете делать эту клиентскую сторону с запросами XHR.
Ответ 2
http://graph.facebook.com/517267866/?fields=picture&type=large
Вернул бы URL-адрес в JSON
Ответ 3
Я понимаю, что это поздно, но есть еще один способ получить URL-адрес изображения профиля.
В исходный URL-адрес вы можете добавить параметр redirect=false
, чтобы получить фактический URL-адрес изображения, к которому вы обычно перенаправляетесь.
Итак, новый запрос будет выглядеть как http://graph.facebook.com/517267866/picture?type=large&redirect=false. Это вернет объект JSON, содержащий URL-адрес изображения, и логический is_silhouette (true, если изображение является изображением Facebook по умолчанию).
Изображение будет иметь размер, который вы указали, также. Вы можете проверить это дополнительно, добавив размеры: http://graph.facebook.com/517267866/picture?type=large&redirect=false&width=400&height=400
Ответ 4
Для всех, кто хочет получить профиль pic в iOS:
Я просто сделал это, чтобы получить пользовательский Facebook pic:
NSString *profilePicURL = [NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=large", fbUserID];
где 'fbUserID' - это идентификатор профиля пользователя Facebook.
Таким образом, я всегда могу просто вызвать url в profilePicURL, чтобы получить изображение, и я всегда получаю его, без проблем. Если у вас уже есть идентификатор пользователя, вам не нужны какие-либо запросы API, просто вставьте идентификатор в URL-адрес после facebook.com/.
FYI всем, кто ищет fbUserID в iOS:
if (FBSession.activeSession.isOpen) {
[[FBRequest requestForMe] startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error) {
if (!error) {
self.userName = user.name;
self.fbUserID = user.id;
}
}];
}
Для этого вам понадобится активная FBSession (см. документы в формате Facebook и пример "Scrumptious" ).
Ответ 5
Если вы хотите, чтобы JSON изображения хорошего качества с URL-адресом, вы можете использовать это:
http://graph.facebook.com/517267866/picture?height=1024&redirect=false
если вам просто нужно использовать изображение без перенаправления параметров:
http://graph.facebook.com/517267866/picture?height=1024
517267866 - это идентификатор профиля одного из приведенных выше примеров. Поместите идентификатор facebook, который вам нужен
Я надеюсь, что это поможет
Ответ 6
$url = 'http://graph.facebook.com/100000771470028/picture?type=large';
$rray=get_headers($url);
$hd = $rray[4];
echo(substr($hd,strpos($hd,'http')));
Это вернет URL-адрес, который вы задали, и проблема изменения URL-адреса в facebook не имеет значения, потому что вы динамически вызываете URL-адрес из исходного URL-адреса.
Ответ 7
это единственное, что действительно работает:
me?fields=picture.type(*YOURTYPE*)
где YOURTYPE может быть одним из следующих:
маленький, нормальный, альбом, большой, квадратный
Ответ 8
Для Android:
Согласно последнему SDK Facebook,
Сначала вам нужно позвонить GraphRequest API
для получения всех деталей пользователя, в котором API
также предоставляет URL of current Profile Picture
.
Bundle params = new Bundle();
params.putString("fields", "id,email,gender,cover,picture.type(large)");
new GraphRequest(token, "me", params, HttpMethod.GET,
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
if (response != null) {
try {
JSONObject data = response.getJSONObject();
if (data.has("picture")) {
String profilePicUrl = data.getJSONObject("picture").getJSONObject("data").getString("url");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).executeAsync();
Ответ 9
function getFacebookImageFromURL($url)
{
$headers = get_headers($url, 1);
if (isset($headers['Location']))
{
return $headers['Location'];
}
}
$url = 'https://graph.facebook.com/zuck/picture?type=large';
$imageURL = getFacebookImageFromURL($url);
Ответ 10
Теперь для использования Facebook требуется SSL
- > Важно добавлено S, https → https://graph.facebook.com/userId/?fields=picture&type=large
Работает в июне /2014 году
Ответ 11
Hmm..i попробовал все, чтобы получить URL-адрес для пользователя image.The идеальным решением было использование fql, как это →
$fql_b = 'SELECT pic from user where uid = ' . $user_id;
$ret_obj_b = $facebook->api(array(
'method' => 'fql.query',
'query' => $fql_b,
));
$dp_url =$ret_obj_b[0]['pic'];
замените pic на big, pic_square, чтобы получить другие желаемые результаты.
Надеюсь, ЭТО ПОМОЖЕТ....
Ответ 12
ImageView user_picture;
userpicture=(ImageView)findViewById(R.id.userpicture);
URL img_value = null;
img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large");
Bitmap mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
userpicture.setImageBitmap(mIcon1);
Если идентификатор - это ваш идентификатор профиля .