Как лучше всего получить никнейм в фейсбуке по ID?

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
417
Реакции
49
Есть ID пользователя в facebook. Например 100014222106738
Если прикрепить этот ID к домену, вот так Для просмотра ссылки Войди или Зарегистрируйся то происходит редирект на профиль требуемого пользователя, в моём случае на Для просмотра ссылки Войди или Зарегистрируйся
Вопрос: как лучше и проще всего на PHP получить никнейм юзера sbuda.chapatso, если известен его ID 100014222106738
 
Curl:
- отключи авторедиректы CURLOPT_FOLLOWLOCATION - false;
- включи добавление заголовков в результат CURLOPT_HEADER TRUE;
- делаешь запрос, получаешь ответ;
- парсишь заголовки;
- profit!

Возможная(надо проверять) оптимизация:
- попробуй HEAD запрос, вместо GET;
- почитать маны FB API, вполне реально, что сотни запросов можно будет всунуть в один.
 
Написал скрипт:
Код:
$fb_userID = 100014222106738;
$fbk = 'https://facebook.com/'.$fb_userID;
$fb_request = curl_get_contents($fbk); // Replace with curl_get_contents if this does not work
// Print username
echo $fb_request;

function curl_get_contents( $url ) {
    $request = curl_init();
  
    curl_setopt($request, CURLOPT_URL, $url);
    curl_setopt($request, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($request, CURLOPT_HEADER, TRUE);
    $data = curl_exec($request);

    curl_close($request);
    return $data;
}
в переменной $fb_request следующие данные:
Код:
HTTP/1.1 301 Moved Permanently
Location: https://www.facebook.com/100014222106738
Strict-Transport-Security: max-age=15552000; preload
Vary: Accept-Encoding
Cache-Control: public, max-age=2592000
Content-Type: text/plain
Server: proxygen
Date: Sun, 05 Feb 2017 17:49:18 GMT
Connection: keep-alive
Content-Length: 0

В Location: исходный урл Для просмотра ссылки Войди или Зарегистрируйся, вопрос не решён...

Апи попробовал полистать, на поверхности решения нет...
 
Как вариант
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

И в коде полученной страницы будет искомое sbuda.chapatso
PHP:
$fbk = 'https://facebook.com/100014222106738';
$fb_request = curl_get_contents($fbk);
echo $fb_request;

function curl_get_contents( $url ) {
  $request = curl_init();
  curl_setopt($request, CURLOPT_URL, $url);
  curl_setopt($request, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($request, CURLOPT_HEADER, false);
  curl_setopt($request, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
  curl_setopt($request, CURLOPT_SSL_VERIFYPEER, 0);
  $data = curl_exec($request);
  curl_close($request);
  return $data;
}
 
Последнее редактирование:
Код:
$fbk = 'https://facebook.com/'.$fb_userID;

В Location: исходный урл Для просмотра ссылки Войди или Зарегистрируйся, вопрос не решён...

Надо всего лишь добавить www
PHP:
$fbk = 'https://www.facebook.com/'.$fb_userID;

Код:
function curl_get_contents( $url ) {
    $request = curl_init();
...
    curl_close($request);
}

Если надо много страниц в одном запуске, то делаем:
PHP:
$request = curl_init();
curl_setopt с настройками

проход в цикле по всем страницам через curl_setopt с url

curl_close($request);

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

Как вариант
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

И в коде полученной страницы будет искомое sbuda.chapatso
Вариант рабочий, но мы посылаем 2 запроса вместо одного, в ответе на второй запрос дополнительный html код, который надо регуляркой парсить. Суммарно это минимум в 2 раза дольше.
 
Вариант рабочий, но мы посылаем 2 запроса вместо одного, в ответе на второй запрос дополнительный html код, который надо регуляркой парсить. Суммарно это минимум в 2 раза дольше.
С учетом того, что надо было всего лишь добавить www - да) Твой вариант лучше, посыпаю голову пеплом))
 
Назад
Сверху