API Facebook-Comment obtenir une image de profil D'utilisateur Facebook via L'API Facebook (sans exiger que l'Utilisateur "autorise" l'application)
je travaille sur un CMS qui récupère une image de profil d'un utilisateur de leur Facebook URL (qui est, http://facebook.com/users_unique_url ). Comment puis-je accomplir? Y a-t-il un appel API Faceboook qui récupère L'URL de l'image du profil d'un utilisateur sans que l'utilisateur ait besoin de Autoriser L'application?
14 réponses
il suffit de récupérer les données à travers cette URL :
http://graph.facebook.com/userid_here/picture
remplacer userid_here
par l'identité de l'utilisateur dont vous voulez obtenir la photo. Vous pouvez également utiliser le protocole HTTPS.
vous pouvez utiliser la fonction file_get_contents
de PHP pour lire cette URL et traiter les données récupérées.
ressource:
http://developers.facebook.com/docs/api
Note: dans php.ini
, vous devez vous assurer que l'extension OpenSSL est activée pour utiliser la fonction file_get_contents
de PHP pour lire cette URL.
Pour montrer:
50x50 pixels
<img src="//graph.facebook.com/{{fid}}/picture">
largeur de 200 pixels
<img src="//graph.facebook.com/{{fid}}/picture?type=large">
pour enregistrer (en utilisant PHP)
NOTE: N'utilisez pas ce . Voir le commentaire de @Foreever ci-dessous.
$img = file_get_contents('https://graph.facebook.com/'.$fid.'/picture?type=large');
$file = dirname(__file__).'/avatar/'.$fid.'.jpg';
file_put_contents($file, $img);
où $fid est votre identifiant sur Facebook.
NOTE: dans le cas d'images marquées "18+" vous aurez besoin d'un access_token valide d'un utilisateur 18+ :
<img src="//graph.facebook.com/{{fid}}/picture?access_token={{access_token}}">
mise à jour 2015:
Graph API v2.0 ne peut pas être interrogé en utilisant des noms d'utilisateurs, vous devrait utiliser userId
toujours.
mise à JOUR :
à partir de fin août 2012, L'API a été mise à jour pour vous permettre de récupérer des photos de profil de l'utilisateur dans différentes tailles. Ajoutez les champs optionnels largeur et hauteur comme paramètres URL:
https://graph.facebook.com/USER_ID/picture?width=WIDTH&height=HEIGHT
où WIDTH
et HEIGHT
sont vos valeurs de dimension demandées.
cette image de profil retournera avec une taille minimale de WIDTH
x HEIGHT
tout en essayant de préserver le format. Par exemple,
https://graph.facebook.com/redbull/picture?width=140&height=110
retourne
{
"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
}
}
MISE À JOUR
pour obtenir une photo du profil d'un utilisateur, appelez
https://graph.facebook.com/USER_ID/picture
où USER_ID
peut être le numéro d'identification utilisateur ou le nom d'utilisateur.
pour obtenir une image de profil d'utilisateur d'une taille spécifique, appelez
https://graph.facebook.com/USER_ID/picture?type=SIZE
où SIZE
doit être remplacé par l'un des mots
square
small
normal
large
selon la taille que vous voulez.
cet appel retournera un URL à une seule image avec sa taille basée sur le paramètre de type que vous avez choisi.
par exemple:
https://graph.facebook.com/USER_ID/picture?type=small
renvoie une URL vers une petite version de l'image.
de L'API uniquement spécifie la taille maximale pour les images de profil, pas la taille réelle.
Carré:
largeur et hauteur maximales de 50 pixels.
petit
largeur maximale de 50 pixels et hauteur maximale de 150 pixels.
Normal
largeur maximale de 100 pixels et hauteur maximale de 300 pixels.
Grand
largeur maximale de 200 pixels et hauteur maximale de 600 pixels.
si vous appelez par défaut USER_ID/picture vous obtenez le type carré.
CLARIFICATION
si vous appelez (comme dans l'exemple ci-dessus)
https://graph.facebook.com/redbull/picture?width=140&height=110
il retournera un JSON réponse si vous utilisez l'un de l'Facebook Sdk méthodes de demande de . Sinon, il retournera l'image elle-même. Pour toujours récupérer le JSON, ajouter:
&redirect=false
comme suit:
https://graph.facebook.com/redbull/picture?width=140&height=110&redirect=false
pour obtenir L'URL de l'image, pas le contenu binaire:
$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";
vous devez utiliser votre identifiant FACEBOOK, pas votre nom d'utilisateur. Vous pouvez y obtenir votre identifiant facebook:
simple code d'une ligne pour enregistrer l'image de profil pleine taille sur votre serveur.
<?php
copy("https://graph.facebook.com/FACEBOOKID/picture?width=9999&height=9999", "picture.jpg");
?>
cela ne fonctionnera que si openssl est activé en php.ini.
a ajouté ce commentaire à la réponse acceptée, mais a estimé qu'il méritait une explication plus longue. À partir d'avril 2015, cette question sera probablement soulevée à plusieurs reprises.
depuis V2 de l'api graph, la réponse acceptée ne fonctionne plus avec un nom d'utilisateur. Alors maintenant, vous avez besoin de l'identifiant d'abord, et vous ne pouvez plus utiliser un nom d'utilisateur pour l'obtenir. Pour compliquer encore plus les choses, pour des raisons de confidentialité, Facebook est en train de changer le nom d'utilisateur par application (voir https://developers.facebook.com/docs/graph-api/reference/v2.2/user / et https://developers.facebook.com/docs/apps/upgrading/#upgrading_v2_0_user_ids ), vous devrez donc avoir une forme d'authentification appropriée pour récupérer un identifiant que vous pouvez utiliser. Techniquement, le profil pic est encore public et disponible à /userid / picture (voir docs à https://developers.facebook.com/docs/graph-api/reference/v2.0/user/picture et cet exemple d'utilisateur: http://graph.facebook.com/v2.2/4/picture?redirect=0 ) cependant, trouver un userid standard d'un utilisateur semble impossible sur la base de leur profil - votre application aurait besoin de leur faire approuver l'interaction avec l'application qui, pour mon cas d'utilisation (montrant juste un pic de profil à côté de leur lien de profil FB) est exagérée.
si quelqu'un a trouvé un moyen d'obtenir le profil pic basé sur le nom d'utilisateur, ou alternativement, comment obtenir un userid (même une alternative un) pour utiliser pour récupérer une image de profil, s'il vous plaît partager! Entre-temps, l'ancienne url du graphique fonctionne toujours jusqu'en avril 2015.
une façon est d'utiliser le code Gamlet posté dans sa réponse:
-
Enregistrer en tant que
curl.php
-
puis dans votre dossier:
require 'curl.php'; $photo="https://graph.facebook.com/me/picture?access_token=" . $session['access_token']; $sample = new sfFacebookPhoto; $thephotoURL = $sample->getRealUrl($photo); echo $thephotoURL;
j'ai pensé poster ceci, parce qu'il m'a fallu un peu de temps pour comprendre les détails... Même si les photos de profil sont publiques, vous avez toujours besoin d'avoir un jeton d'accès là-bas pour l'obtenir quand vous curl .
Il y a moyen de le faire ;)
merci à " 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);
}
}
}
solution de travail PHP (HTTP GET) à partir d'avril 2015 (sans 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'];
}
vous pouvez changer 'type' dans parameterr:
Carré:
largeur et hauteur maximales de 50 pixels.
petit
largeur maximale de 50 pixels et hauteur maximale de 150 pixels.
Normal
largeur maximale de 100 pixels et hauteur maximale de 300 pixels.
Grand
largeur maximale de 200 pixels et hauteur maximale de 600 pixels.
je pensais peut - être ID sera un outil utile. Chaque fois qu'un utilisateur crée un nouveau compte, il doit obtenir un ID supérieure. J'ai googlé et constaté qu'il existe une méthode pour estimer la date de création de compte par ID et Massoud Seifi de metadatascience.com j'ai de bonnes données.
Lire l'article:
Et voici quelques ID à télécharger:
Le blog Saisir l'Image d'un Facebook Objet Graphique pourrait offrir une autre forme de solution. Utilisez le code dans le tutoriel avec de L'API de graphique de Facebook et sa bibliothèque PHP SDK.
... Et essayez de ne pas utiliser file_get_contents (sauf si vous êtes prêt à faire face aux conséquences - voir file_get_contents vs curl ).
êtes-vous préoccupé par la taille de l'image du profil? lors de la mise en œuvre de login avec Facebook en utilisant PHP. Nous allons vous montrer le moyen simple d'obtenir une image de profil grande taille dans Facebook PHP SDK. En outre, vous pouvez obtenir l'image de taille personnalisée de profil Facebook.
définit la dimension de l'image de profil en utilisant la ligne de code suivante.
$utilisateur = $facebook->api('/moi?champs=l'image.largeur(400).hauteur (400)');
voir ce post: http: / / www.codexworld.com/how-to-guides/ get-large-size-profile-picture-in-facebook-php-sdk /
@NaturalBornCamper,
joli code! Voici une fonction de code propre pour un tel processus!
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);
}
ceci retournera le raw L'URL de L'image avatar de Facebook. N'hésitez pas à faire ce que vous voulez avec elle alors!
URI = https://graph.facebook.com/{}/picture?width=500'.format(uid)
vous pouvez obtenir le profil URI via outil de recherche d'identité facebook en ligne
vous pouvez également passer le type param avec des valeurs possibles small, normal, large, square.
Consultez documents officiels