Получить URL-адрес реального профиля Facebook - PullRequest
11 голосов
/ 21 августа 2010

В соответствии с API графа Facebook мы можем запросить изображение профиля пользователя с этим (пример):

https://graph.facebook.com/1489686594/picture

Нам не нужен токен, поскольку он является публичной информацией.

Но реальный URL изображения предыдущей ссылки: http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs356.snc4/41721_1489686594_527_q.jpg

Если вы введете первую ссылку в браузере, она перенаправит вас на вторую ссылку.

Есть ли способ получить полный URL (вторая ссылка) с помощью PHP, зная только первую ссылку?

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

Спасибо

Ответы [ 5 ]

20 голосов
/ 21 августа 2010

Кире правильно, но лучшим вариантом для вашего случая использования будет следующее:

    // get the headers from the source without downloading anything
    // there will be a location header wich redirects to the actual url
    // you may want to put some error handling here in case the connection cant be established etc...
    // the second parameter gives us an assoziative array and not jut a sequential list so we can right away extract the location header
    $headers = get_headers('https://graph.facebook.com/1489686594/picture',1);
    // just a precaution, check whether the header isset...
    if(isset($headers['Location'])) {
        $url = $headers['Location']; // string
    } else {
        $url = false; // nothing there? .. weird, but okay!
    }
    // $url contains now the url of the profile picture, but be careful it might very well be only temporary! there's a reason why facebok does it this way ;)
    // the code is untested!
7 голосов
/ 21 августа 2010

Вы можете получить его с FQL:

select pic_square from user where uid=1489686594

возвращает:

[
  {
    "pic_square": "http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs356.snc4/41721_1489686594_527_q.jpg"
  }
]

Также вы можете просто улучшить свою функцию, которая получает изображение по URL.Если вы используете curl , он может автоматически следовать заголовкам перенаправления.

2 голосов
/ 02 августа 2013

@ The Surrican,
Хороший код! Вот функция чистого кода для такого процесса!

function get_raw_facebook_avatar_url($uid)
{
    $array = get_headers('https://graph.facebook.com/'.$uid.'/picture?type=large', 1);
    return (isset($array['Location']) ? $array['Location'] : FALSE);
}

Это вернет URL изображения аватара RAW facebook. Не стесняйтесь делать с ней все, что вы хотите!

2 голосов
/ 24 мая 2013

Обратите внимание, что ответ The Surrican (и, возможно, другие) может значительно увеличить время отклика вашего сценария (для меня на моем сервере + 500 мс). Это связано с тем, что сервер отправляет запрос в facebook (из-за get_headers()), а время выполнения (без учета вычислений) увеличивается от этого:

  • браузер -> сервер
  • сервер -> браузер

к этому:

  • браузер -> сервер
  • сервер -> facebook (запрос get_headers)
  • facebook -> сервер (ответ: get_headers)
  • сервер -> браузер

Это добавляет упомянутую задержку в 500 мс. Вам, вероятно, следует подумать о том, чтобы кэшировать реальный URL на вашем сервере или загрузить изображение профиля через JavaScript. По крайней мере, посмотрите на ваше время ответа до и после;)

0 голосов
/ 05 декабря 2015

Вы также можете добавить ?redirect=false в конец своего URL, а затем непосредственно проанализировать ответ JSON.

В вашем примере: https://graph.facebook.com/1489686594/picture?redirect=false

Более подробная информация здесь https://developers.facebook.com/docs/graph-api/reference/user/picture/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...