Intereting Posts
Выполните пустой запрос с фильтрами в Sphinx В PHP, какова разница между объявлением переменной как глобальной внутренней функции или передачей переменной в качестве аргумента функции? Предупреждение. Невозможно изменить информацию заголовка. Не удается найти ошибку PHP – SQL – отключить, скрыть или включить кнопку на основе данных PHP – переформатировать многомерный массив для вставки в MYSQL? Автоматическая аутентификация пользователя после регистрации Каково использование символа @ в PHP? JQuery «Автозаполнение» с php и mysql Метод очистки Doctrine EntityManager во вложенных объектах Чтение больших данных из файла csv в php MySQL получает строку (ы) между двумя # / несколькими парами # Разработка пикселя отслеживания Воспроизведение аудиофайла на сайте Как кодировать массив PHP в массив JSON, а не объект? Временная метка ближайшего действительного месяца

Facebook API. Как получить изображение профиля пользователя Facebook через API Facebook (не требуя от пользователя «Разрешить» приложение)

Я работаю над CMS, который извлекает изображение профиля пользователя из своего URL-адреса Facebook (то есть http://facebook.com/users_unique_url ). Как я могу это сделать? Есть ли API-интерфейс Faceboook API, который выбирает URL-адрес профиля профиля пользователя, если пользователь не должен разрешать приложение?

Просто введите данные через этот URL :

http://graph.facebook.com/userid_here/picture

Замените userid_here с идентификатором пользователя, userid_here вы хотите получить фотографию. Вы также можете использовать HTTPS.

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

Ресурс:

http://developers.facebook.com/docs/api

Примечание. В php.ini вам необходимо убедиться, что расширение OpenSSL включено для использования функции file_get_contents PHP для чтения этого URL-адреса.

Показывать:

50×50 пикселей

 <img src="//graph.facebook.com/{{fid}}/picture"> 

Ширина 200 пикселей

 <img src="//graph.facebook.com/{{fid}}/picture?type=large"> 

Чтобы сохранить (используя PHP)

ПРИМЕЧАНИЕ. Не используйте это . См. Комментарий @ Foreever ниже.

 $img = file_get_contents('https://graph.facebook.com/'.$fid.'/picture?type=large'); $file = dirname(__file__).'/avatar/'.$fid.'.jpg'; file_put_contents($file, $img); 

Где $ fid – ваш идентификатор пользователя (или псевдоним) на Facebook.

ПРИМЕЧАНИЕ. В случае изображений с пометкой «18+» вам потребуется действительный access_token от пользователя 18+:

 <img src="//graph.facebook.com/{{fid}}/picture?access_token={{access_token}}"> 

ОБНОВЛЕНИЕ :

Начиная с августа 2012 года, API был обновлен, чтобы вы могли получать изображения профиля пользователя в разных размерах. Добавьте необязательные поля ширины и высоты в качестве параметров URL:

 https://graph.facebook.com/USER_ID/picture?width=WIDTH&height=HEIGHT 

где WIDTH и HEIGHT являются вашими запрошенными значениями измерения.

Это приведет к возврату изображения профиля с минимальным размером WIDTH x HEIGHT при сохранении пропорций. Например,

 https://graph.facebook.com/redbull/picture?width=140&height=110 

возвращается

  { "data": { "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4/c0.19.180.142/s148x148/2624_134501175351_4831452_a.jpg", "width": 148, "height": 117, "is_silhouette": false } } 

END UPDATE

Чтобы получить изображение профиля пользователя, позвоните

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

где USER_ID может быть номером идентификатора пользователя или именем пользователя.

Чтобы получить изображение профиля пользователя определенного размера, позвоните

 https://graph.facebook.com/USER_ID/picture?type=SIZE 

где SIZE следует заменить одним из слов

 square small normal large 

в зависимости от размера, который вы хотите.

Этот вызов вернет URL-адрес для одного изображения с его размером в зависимости от выбранного вами параметра типа.

Например:

 https://graph.facebook.com/USER_ID/picture?type=small 

возвращает URL-адрес небольшой версии изображения.

API определяет только максимальный размер изображений профиля, а не фактический размер.

Квадрат:

максимальная ширина и высота 50 пикселей.

Маленький

максимальная ширина 50 пикселей и максимальная высота 150 пикселей.

Нормальный

максимальная ширина 100 пикселей и максимальная высота 300 пикселей.

большой

максимальная ширина 200 пикселей и максимальная высота 600 пикселей.

Если вы вызываете USER_ID / picture по умолчанию, вы получаете квадратный тип.

ПОЯСНЕНИЯ

Если вы звоните (как указано выше)

 https://graph.facebook.com/redbull/picture?width=140&height=110 

он вернет ответ JSON, если вы используете один из методов запроса SDK для Facebook . В противном случае он вернет изображение. Чтобы всегда извлекать JSON, добавьте:

 &redirect=false 

вот так:

 https://graph.facebook.com/redbull/picture?width=140&height=110&redirect=false 

Чтобы получить URL-адрес изображения, НЕ бинарный контент:

 $url = "http://graph.facebook.com/$fbId/picture?type=$size"; $headers = get_headers($url, 1); if( isset($headers['Location']) ) echo $headers['Location']; // string else echo "ERROR"; 

Вы должны использовать свой идентификатор FACEBOOK, а не USERNAME. Вы можете получить свой идентификатор facebook:

http://findmyfbid.com/

Простой однострочный код для сохранения изображения профиля полного размера на вашем сервере.

 <?php copy("https://graph.facebook.com/FACEBOOKID/picture?width=9999&height=9999", "picture.jpg"); ?> 

Это будет работать, только если openssl будет включен в php.ini.

Добавлено это как комментарий к принятому ответу, но считал, что заслуживает более подробного объяснения. Начиная с апреля 2015 года это, вероятно, будет поднято несколько раз.

Начиная с V2 графика api принятый ответ больше не работает с использованием имени пользователя. Итак, теперь вам нужно сначала указать userid, и вы больше не можете использовать имя пользователя, чтобы получить это. Чтобы еще больше усложнить ситуацию, по соображениям конфиденциальности Facebook теперь меняет приложение для каждого приложения (см. https://developers.facebook.com/docs/graph-api/reference/v2.2/user/ и https: //developers.facebook .com / docs / apps / upgrade / # upgradeing_v2_0_user_ids ), поэтому для получения идентификатора пользователя, который вы можете использовать, вам потребуется некоторая надлежащая аутентификация. Технически профиль pic остается общедоступным и доступен на / userid / picture (см. Документы на странице https://developers.facebook.com/docs/graph-api/reference/v2.0/user/picture и в этом примере пользователь: http: //graph.facebook.com/v2.2/4/picture?redirect=0 ), однако выяснение стандартного пользовательского идентификатора пользователя кажется невозможным, основываясь только на их профиле – ваше приложение должно заставить их одобрить взаимодействие с приложением, которое для мой пример использования (просто показ профиля pic рядом с их ссылкой на профиль FB) является излишним.

Если кто-то выяснил способ получения профиля pic на основе имени пользователя или, альтернативно, как получить идентификатор пользователя (даже чередующийся), который будет использоваться для извлечения профиля, пожалуйста, поделитесь! Тем временем старый графический url все еще работает до апреля 2015 года.

Один из способов – использовать код Gamlet, опубликованный в его ответе:

  • Сохраните его как curl.php

  • Тогда в вашем файле:

     require 'curl.php'; $photo="https://graph.facebook.com/me/picture?access_token=" . $session['access_token']; $sample = new sfFacebookPhoto; $thephotoURL = $sample->getRealUrl($photo); echo $thephotoURL; 

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

Есть способ сделать это;)

Благодаря « http://it.toolbox.com/wiki/index.php/Use_curl_from_PHP_-_processing_response_headers »:

 <?php /** * Facebook user photo downloader */ class sfFacebookPhoto { private $useragent = 'Loximi sfFacebookPhoto PHP5 (cURL)'; private $curl = null; private $response_meta_info = array(); private $header = array( "Accept-Encoding: gzip,deflate", "Accept-Charset: utf-8;q=0.7,*;q=0.7", "Connection: close" ); public function __construct() { $this->curl = curl_init(); register_shutdown_function(array($this, 'shutdown')); } /** * Get the real URL for the picture to use after */ public function getRealUrl($photoLink) { curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->header); curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, false); curl_setopt($this->curl, CURLOPT_HEADER, false); curl_setopt($this->curl, CURLOPT_USERAGENT, $this->useragent); curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($this->curl, CURLOPT_TIMEOUT, 15); curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($this->curl, CURLOPT_URL, $photoLink); //This assumes your code is into a class method, and //uses $this->readHeader as the callback function. curl_setopt($this->curl, CURLOPT_HEADERFUNCTION, array(&$this, 'readHeader')); $response = curl_exec($this->curl); if (!curl_errno($this->curl)) { $info = curl_getinfo($this->curl); var_dump($info); if ($info["http_code"] == 302) { $headers = $this->getHeaders(); if (isset($headers['fileUrl'])) { return $headers['fileUrl']; } } } return false; } /** * Download Facebook user photo * */ public function download($fileName) { curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->header); curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($this->curl, CURLOPT_HEADER, false); curl_setopt($this->curl, CURLOPT_USERAGENT, $this->useragent); curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($this->curl, CURLOPT_TIMEOUT, 15); curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($this->curl, CURLOPT_URL, $fileName); $response = curl_exec($this->curl); $return = false; if (!curl_errno($this->curl)) { $parts = explode('.', $fileName); $ext = array_pop($parts); $return = sfConfig::get('sf_upload_dir') . '/tmp/' . uniqid('fbphoto') . '.' . $ext; file_put_contents($return, $response); } return $return; } /** * cURL callback function for reading and processing headers. * Override this for your needs. * * @param object $ch * @param string $header * @return integer */ private function readHeader($ch, $header) { //Extracting example data: filename from header field Content-Disposition $filename = $this->extractCustomHeader('Location: ', '\n', $header); if ($filename) { $this->response_meta_info['fileUrl'] = trim($filename); } return strlen($header); } private function extractCustomHeader($start, $end, $header) { $pattern = '/'. $start .'(.*?)'. $end .'/'; if (preg_match($pattern, $header, $result)) { return $result[1]; } else { return false; } } public function getHeaders() { return $this->response_meta_info; } /** * Cleanup resources */ public function shutdown() { if($this->curl) { curl_close($this->curl); } } } 

Я думал: возможно, ID станет полезным инструментом. Каждый раз, когда пользователь создает новую учетную запись, он должен получать более высокий идентификатор. Я googled и обнаружил, что есть способ оценить дату создания учетной записи по ID, и Масуд Сейфи из metadatascience.com собрал некоторые хорошие данные об этом.

Введите описание изображения здесь

Прочтите эту статью:

http://metadatascience.com/2013/03/11/inferring-facebook-account-creation-date-from-facebook-user-id/

И вот несколько идентификаторов для загрузки:

http://metadatascience.com/2013/03/14/lookup-table-for-inferring-facebook-account-creation-date-from-facebook-user-id/

Рабочее решение PHP (HTTP GET) с апреля 2015 года (без PHP 5 SDK):

 function get_facebook_user_avatar($fbId){ $json = file_get_contents('https://graph.facebook.com/v2.5/'.$fbId.'/picture?type=large&redirect=false'); $picture = json_decode($json, true); return $picture['data']['url']; } 

Вы можете изменить «тип» в параметре:

Квадрат:

максимальная ширина и высота 50 пикселей.

Маленький

максимальная ширина 50 пикселей и максимальная высота 150 пикселей.

Нормальный

максимальная ширина 100 пикселей и максимальная высота 300 пикселей.

большой

максимальная ширина 200 пикселей и максимальная высота 600 пикселей.

Сообщение в блоге Grab Picture of Facebook Graph Object может предложить другую форму решения. Используйте код в учебнике вместе с API-интерфейсом Facebook и его библиотекой PHP SDK.

… И попробуйте не использовать file_get_contents (если вы не готовы к последствиям – см. Файл_get_contents vs curl ).

Вы обеспокоены размером профиля профиля? во время внедрения логина с Facebook с использованием PHP. Мы покажем вам простой способ получить изображение профиля большого размера в PHP PHP SDK. Кроме того, вы можете получить изображение нестандартного размера профиля Facebook.

Задайте размер изображения профиля, используя следующую строку кода.

$ userProfile = $ facebook-> api ('/ me? fields = picture.width (400) .height (400)');

проверьте это сообщение: http: //www.codexworld.com/how-to-guides/get-large-size-profile-picture-in-facebook-php-sdk/

@NaturalBornCamper,

Хороший код! Здесь есть чистая функция кода для такого процесса!

 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-адрес изображения аватара для Facebook. Не стесняйтесь делать то, что вы хотите с этим!