Je travaille sur un CMS qui récupère l'image du profil d'un utilisateur à partir de Facebook URL (c'est-à-dire http://facebook.com/users_unique_url ). Comment puis-je accomplir cela? Existe-t-il un appel d'API Faceboook qui récupère l'URL de l'image de profil d'un utilisateur sans que celui-ci ait besoin de autoriser l'application?
Il suffit de récupérer les données à travers ceci URL :
http://graph.facebook.com/userid_here/picture
Remplacez userid_here
par l'identifiant de l'utilisateur dont vous souhaitez obtenir la photo. Vous pouvez également utiliser 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
Remarque: Dans php.ini
, vous devez vous assurer que l'extension OpenSSL est activée pour utiliser thefile_get_contents
fonction de PHP pour lire cette URL.
Montrer:
<img src="//graph.facebook.com/{{fid}}/picture">
<img src="//graph.facebook.com/{{fid}}/picture?type=large">
NOTE: Ne pas utiliser ceci. 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 utilisateur sur Facebook.
REMARQUE: dans le cas d'images marquées "18+", vous aurez besoin d'un code d'accès valide pour un utilisateur de 18+:
<img src="//graph.facebook.com/{{fid}}/picture?access_token={{access_token}}">
Graph API v2.0 ne peut pas être interrogé à l'aide de noms d'utilisateurs, vous devriez utiliser userId
toujours.
UPDATE:
Depuis fin août 2012, l'API a été mise à jour pour vous permettre de récupérer les images de profil de l'utilisateur de différentes tailles. Ajoutez les champs optionnels largeur et hauteur en tant que paramètres d'URL:
https://graph.facebook.com/USER_ID/picture?width=WIDTH&height=HEIGHT
où WIDTH
et HEIGHT
sont les valeurs de dimension demandées.
Cela retournera une image de profil avec une taille minimale de WIDTH
x HEIGHT
tout en essayant de conserver le rapport de format. Par exemple,
https://graph.facebook.com/redbull/picture?width=140&height=110
résultats
{
"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
Pour obtenir la photo de profil d'un utilisateur, appelez
https://graph.facebook.com/USER_ID/picture
où USER_ID
peut être le numéro d'utilisateur ou le nom d'utilisateur.
Pour obtenir une photo de profil utilisateur d’une taille spécifique, appelez
https://graph.facebook.com/USER_ID/picture?type=SIZE
où SIZE
devrait être remplacé par l'un des mots
square
small
normal
large
en fonction de la taille que vous voulez.
Cet appel renverra un URL à une seule image avec sa taille en fonction du paramètre de type choisi.
Par exemple:
https://graph.facebook.com/USER_ID/picture?type=small
renvoie une URL vers une petite version de l'image.
L'API spécifie uniquement la taille maximale des images de profil, pas la taille réelle.
Carré:
largeur et hauteur maximum de 50 pixels.
Petit
largeur maximale de 50 pixels et hauteur maximale de 150 pixels.
Ordinaire
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 le USER_ID/picture par défaut, vous obtenez le type de carré.
CLARIFICATION
Si vous appelez (comme dans l'exemple ci-dessus)
https://graph.facebook.com/redbull/picture?width=140&height=110
il renverra une réponse JSON si vous utilisez l'une des méthodes de demande de kit de développement logiciel (SDK) de Facebook . Sinon, il retournera l'image elle-même. Pour toujours récupérer le JSON, ajoutez:
&redirect=false
ainsi:
https://graph.facebook.com/redbull/picture?width=140&height=110&redirect=false
Pour obtenir l'URL de l'image, PAS du 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 USERNAME. Vous pouvez obtenir votre identifiant facebook ici:
Code simple à une ligne pour enregistrer l’image de profil COMPLET 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é dans php.ini.
Ajouté ceci en tant que 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 fois.
À partir de la V2 du graphique api, la réponse acceptée ne fonctionne plus avec un nom d'utilisateur. Alors maintenant, vous avez besoin de l’utilisateur d’abord, et vous ne pouvez plus utiliser de nom d’utilisateur pour l’obtenir. Pour compliquer encore les choses, pour des raisons de confidentialité, Facebook modifie désormais les identifiants des utilisateurs 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 disposer d'une sorte d'authentification appropriée pour récupérer un ID utilisateur que vous pourrez utiliser. Techniquement, la photo de profil est toujours publique et disponible sur/userid/picture (voir docs sur 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= ) Cependant, déterminer l'utilisateur standard d'un utilisateur semble impossible en se basant uniquement sur son profil - votre l'application aurait besoin de les amener à approuver une interaction avec l'application, ce qui, dans mon cas d'utilisation (montrer juste une photo de profil à côté du lien de leur profil FB) est excessive.
Si quelqu'un a trouvé un moyen d'obtenir la photo de profil en fonction de son nom d'utilisateur, ou alternativement, comment obtenir un ID utilisateur (même un nom alternatif) à utiliser pour récupérer une photo de profil, partagez-le! Entre temps, l’ancienne URL du graphique fonctionne jusqu’en avril 2015.
Une solution consiste à utiliser le code Gamlet posted dans sa réponse:
Enregistrez-le sous 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;
Je pensais poster ceci, car 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'un jeton d'accès pour l'obtenir lorsque vous curl le.
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 le type dans parametr:
Carré:
largeur et hauteur maximum de 50 pixels.
Petit
largeur maximale de 50 pixels et hauteur maximale de 150 pixels.
Ordinaire
largeur maximale de 100 pixels et hauteur maximale de 300 pixels.
Grand
largeur maximale de 200 pixels et hauteur maximale de 600 pixels.
Il y a moyen de faire ça;)
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);
}
}
}
Je pensais - peut-être ID serait un outil utile. Chaque fois qu'un utilisateur crée un nouveau compte, il devrait recevoir un identifiant plus élevé. J'ai googlé et découvert qu'il existait une méthode permettant d'estimer la date de création du compte par ID et que Massoud Seifi de metadatascience.com avait rassemblé de bonnes données à ce sujet.
Lire cet article:
Et voici quelques identifiants à télécharger:
La publication de blog saisir l'image d'un objet graphique Facebook peut offrir une autre forme de solution. Utilisez le code du didacticiel avec la API Graph de Facebook et sa bibliothèque de SDK PHP.
... 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 la photo de profil? au moment de mettre en œuvre la connexion avec Facebook en utilisant PHP. Nous allons vous montrer un moyen simple d’obtenir une photo de profil de grande taille dans Facebook PHP SDK. Vous pouvez également obtenir l’image de taille personnalisée du profil Facebook.
Définissez la dimension de l'image de profil à l'aide de la ligne de code suivante.
$ userProfile = $ facebook-> api ('/ me? fields = picture.width (400) .height (400)');
vérifiez ce post: http: //www.codexworld.com/how-to-guides/get-large-size-profile-picture-in-facebook-php-sdk/
@NaturelBornCamper,
Beau code! Voici une fonction de code épurée 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);
}
Cela renverra l'URL de l'image raw de Facebook. N'hésitez pas à faire ce que vous voulez avec!
URI = https://graph.facebook.com/{}/picture?width=500'.format(uid)
Vous pouvez obtenir l'URI du profil via outil de facebook id Finder en ligne
Vous pouvez également transmettre le type param avec les valeurs possibles small, normal, large et square.
Reportez-vous au documentation officielle