내가 일하고 있어요 CMS 자신의 페이스 북에서 사용자의 프로필 이미지를 가져 URL (즉, http://facebook.com/users_unique_url ). 어떻게하면됩니까? 사용자가 애플리케이션 을 허용 할 필요없이 사용자의 프로필 이미지 URL을 가져 오는 Faceboook API 호출이 있습니까?
내가 일하고 있어요 CMS 자신의 페이스 북에서 사용자의 프로필 이미지를 가져 URL (즉, http://facebook.com/users_unique_url ). 어떻게하면됩니까? 사용자가 애플리케이션 을 허용 할 필요없이 사용자의 프로필 이미지 URL을 가져 오는 Faceboook API 호출이 있습니까?
답변:
이 URL을 통해 데이터를 가져 오기만하면됩니다 .
http://graph.facebook.com/userid_here/picture
userid_here
사진을 얻으려는 사용자의 ID로 바꿉니다 . HTTPS도 사용할 수 있습니다.
PHP file_get_contents
기능을 사용하여 해당 URL을 읽고 검색된 데이터를 처리 할 수 있습니다 .
자원:
http://developers.facebook.com/docs/api
참고 : 에서 PHP 의 기능 을 사용하여 해당 URL을 읽을 수 있도록 OpenSSL 확장이 활성화되어 php.ini
있는지 확인해야합니다 .file_get_contents
<img src="//graph.facebook.com/sarfraz.anees/picture" />
HTTP와 HTTPS 사이를 변경하는 경우 사용 합니다 ... 프로토콜이 브라우저에 의해 감지되고 HTTPS에 혼합 된 내용 경고가 표시되지 않습니다.
표시하려면 :
<img src="//graph.facebook.com/{{fid}}/picture">
<img src="//graph.facebook.com/{{fid}}/picture?type=large">
참고 : 이것을 사용하지 마십시오 . 아래 @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의 사용자 ID입니다.
참고 : "18+"로 표시된 이미지의 경우 18 세 이상의 사용자로부터 유효한 access_token이 필요합니다.
<img src="//graph.facebook.com/{{fid}}/picture?access_token={{access_token}}">
사용자 이름을 사용하여 Graph API v2.0을 쿼리 할 수 없으므로 항상 사용해야 합니다 userId
.
업데이트 :
2012 년 8 월 말부터 다양한 크기의 사용자 프로필 사진을 검색 할 수 있도록 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
}
}
업데이트 종료
사용자의 프로필 사진을 얻으려면 전화
https://graph.facebook.com/USER_ID/picture
여기서 USER_ID
사용자 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
Facebook SDK 요청 방법 중 하나를 사용하는 경우 JSON 응답 을 반환 합니다 . 그렇지 않으면 이미지 자체를 반환합니다. 항상 JSON을 검색하려면 다음을 추가하십시오.
&redirect=false
이렇게 :
https://graph.facebook.com/redbull/picture?width=140&height=110&redirect=false
&redirect=false
이미지로 리디렉션하는 대신 JSON 데이터를 반환하는 누락되었습니다
이진 콘텐츠가 아닌 이미지 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";
USERNAME이 아닌 FACEBOOK ID를 사용해야합니다. 당신은 당신의 페이스 북 ID를 얻을 수 있습니다 :
이것을 대답에 대한 주석으로 추가했지만 더 자세한 설명이 필요하다고 느꼈습니다. 2015 년 4 월경부터는 몇 번 제기 될 것입니다.
그래프 API의 V2부터 허용되는 답변이 더 이상 사용자 이름을 사용하여 작동하지 않습니다. 이제 사용자 ID가 먼저 필요하며 더 이상 사용자 이름을 사용하여이를 얻을 수 없습니다. 문제를 더욱 복잡하게하기 위해 개인 정보 보호를 위해 Facebook은 이제 앱마다 사용자 ID를 변경하고 있습니다 ( https://developers.facebook.com/docs/graph-api/reference/v2.2/user/ 및 https : //developers.facebook 참조) .com / docs / apps / upgrading / # upgrading_v2_0_user_ids )에 따라 사용할 수있는 사용자 ID를 검색하려면 적절한 인증이 필요합니다. 기술적으로 프로필 사진은 여전히 공개되어 있으며 / userid / picture에서 사용할 수 있습니다 ( https://developers.facebook.com/docs/graph-api/reference/v2.0/user/picture 및이 예제 사용자의 문서 참조) . http : //graph.facebook.com/v2.2/4/picture?redirect=0) 그러나 사용자의 표준 사용자 ID를 파악하는 것은 프로필을 기반으로 불가능한 것처럼 보입니다. 앱에서 내 유스 케이스 (FB 프로필 링크 옆에 프로필 사진을 표시하는 것)와의 상호 작용을 승인해야합니다.
누군가가 사용자 이름을 기반으로 프로필 사진을 얻는 방법을 찾은 경우 또는 다른 방법으로 프로필 사진을 검색하는 데 사용할 사용자 ID를 얻는 방법을 알고 있다면 공유하십시오! 그 동안 기존 그래프 URL은 2015 년 4 월까지 계속 작동합니다.
한 가지 방법은 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);
}
}
}
2015 년 4 월의 PHP (HTTP GET) 솔루션 (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 픽셀입니다.
나는 생각했다-아마도 ID 는 유용한 도구가 될 것이다. 사용자가 새 계정을 만들 때마다 더 높은 ID를 가져와야합니다. 나는 googled하고 metadatascience.com에서 ID와 Massoud Seifi로 계정 생성 날짜를 추정하는 방법이 있다는 것을 알았습니다.
이 기사를 읽으십시오 :
다음은 다운로드 할 ID입니다.
블로그 게시물 인 Facebook 그래프 개체 그림 가져 오기 는 다른 형태의 솔루션을 제공 할 수 있습니다. 학습서의 코드를 Facebook의 그래프 API 및 해당 PHP SDK 라이브러리 와 함께 사용하십시오 .
... 그리고 file_get_contents 를 사용하지 마십시오 (결과에 직면 할 준비가되지 않은 한 -file_get_contents vs curl 참조 ).
프로필 사진 크기가 걱정 되십니까? PHP를 사용하여 Facebook으로 로그인을 구현할 때. Facebook 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);
}
원시 Facebook 아바타 이미지 URL 을 반환합니다 . 원하는대로 무엇이든 할 수 있습니다.
URI = https://graph.facebook.com/{}/picture?width=500'.format(uid)
온라인 페이스 북 ID 파인더 도구 를 통해 프로파일 URI를 얻을 수 있습니다.
가능한 작은, 보통, 큰, 정사각형 값으로 type param을 전달할 수도 있습니다.
공식 문서를 참조하십시오
?type=large
추가 할 수 있는 쿼리 문자열이 유용 할 수 있습니다 . 내가 입력 한 화면 긁기보다 BTW :)보다 완전히 더 나은 대답을 제시하기위한 소품.