ฉันกำลังทำงานกับCMSที่ดึงภาพโปรไฟล์ของผู้ใช้จากURL Facebook ของพวกเขา(นั่นคือhttp://facebook.com/users_unique_url ) ฉันจะทำสิ่งนี้ได้อย่างไร มีการเรียกใช้ Faceboook API ที่ดึง URL ภาพโปรไฟล์ของผู้ใช้โดยไม่ต้องให้ผู้ใช้อนุญาตหรือไม่
ฉันกำลังทำงานกับCMSที่ดึงภาพโปรไฟล์ของผู้ใช้จากURL Facebook ของพวกเขา(นั่นคือhttp://facebook.com/users_unique_url ) ฉันจะทำสิ่งนี้ได้อย่างไร มีการเรียกใช้ Faceboook API ที่ดึง URL ภาพโปรไฟล์ของผู้ใช้โดยไม่ต้องให้ผู้ใช้อนุญาตหรือไม่
คำตอบ:
เพียงดึงข้อมูลผ่านURLนี้:
http://graph.facebook.com/userid_here/picture
แทนที่userid_here
ด้วย id ของผู้ใช้ที่คุณต้องการรับรูปถ่าย คุณสามารถใช้ HTTPS ได้เช่นกัน
คุณสามารถใช้file_get_contents
ฟังก์ชันPHP เพื่ออ่าน URL นั้นและประมวลผลข้อมูลที่ดึงมาได้
ทรัพยากร:
http://developers.facebook.com/docs/api
หมายเหตุ:ในphp.ini
คุณต้องแน่ใจว่าเปิดใช้งานส่วนขยายOpenSSLเพื่อใช้file_get_contents
ฟังก์ชั่นของ PHP เพื่ออ่าน URL นั้น
<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
หมายเหตุ: ในกรณีของภาพที่ทำเครื่องหมายว่า "18+" คุณจะต้องมี access_token ที่ถูกต้องจากผู้ใช้ 18+ ราย:
<img src="//graph.facebook.com/{{fid}}/picture?access_token={{access_token}}">
Graph API v2.0 ไม่สามารถสอบถามโดยใช้ชื่อผู้ใช้คุณควรใช้userId
เสมอ
อัปเดต :
เริ่มตั้งแต่ปลายเดือนสิงหาคม 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
}
}
สิ้นสุดการอัพเดท
ในการรับภาพโปรไฟล์ของผู้ใช้โทร
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 / รูปภาพเริ่มต้นคุณจะได้รับประเภทสี่เหลี่ยมจัตุรัส
ชี้แจง
ถ้าคุณโทร (ตามตัวอย่างข้างต้น)
https://graph.facebook.com/redbull/picture?width=140&height=110
มันจะกลับมาเป็นJSONการตอบสนองถ้าคุณกำลังใช้หนึ่งในวิธีการร้องขอ Facebook SDKs มิฉะนั้นจะส่งคืนภาพเอง หากต้องการดึงข้อมูล 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";
คุณต้องใช้ FACEBOOK ID ไม่ใช่ชื่อผู้ใช้ คุณจะได้รับ id Facebook ของคุณที่นั่น:
รหัสบรรทัดเดียวอย่างง่ายเพื่อบันทึกภาพโปรไฟล์ขนาดเต็มบนเซิร์ฟเวอร์ของคุณ
<?php
copy("https://graph.facebook.com/FACEBOOKID/picture?width=9999&height=9999", "picture.jpg");
?>
สิ่งนี้จะใช้งานได้เมื่อเปิดใช้งาน openssl ใน php.ini
เพิ่มสิ่งนี้เป็นความคิดเห็นในคำตอบที่ยอมรับ แต่รู้สึกว่าสมควรได้รับคำอธิบายที่ยาวกว่านี้ เริ่มประมาณเดือนเมษายน 2015 อาจจะมีการยกขึ้นสองสามครั้ง
ตั้งแต่ V2 ของกราฟ api คำตอบที่ยอมรับไม่สามารถใช้งานได้อีกต่อไปโดยใช้ชื่อผู้ใช้ ดังนั้นตอนนี้คุณต้องมีรหัสผู้ใช้ก่อนและคุณไม่สามารถใช้ชื่อผู้ใช้เพื่อรับสิ่งนี้ได้อีก เพื่อให้เกิดความซับซ้อนมากขึ้นด้วยเหตุผลความเป็นส่วนตัวตอนนี้ Facebook กำลังเปลี่ยนหมายเลขผู้ใช้ต่อแอพ (ดูhttps://developers.facebook.com/docs/graph-api/reference/v2.2/user/และhttps: //developers.facebook .com / docs / แอป / การอัพเกรด / # upgrade_v2_0_user_ids ) ดังนั้นคุณจะต้องมีการรับรองความถูกต้องบางอย่างเพื่อดึงหมายเลขผู้ใช้ที่คุณสามารถใช้ได้ เทคนิครูปโปรไฟล์ยังคงเป็นสาธารณะและมีให้ที่ / userid / รูปภาพ (ดูเอกสารที่https://developers.facebook.com/docs/graph-api/reference/v2.0/user/pictureและผู้ใช้ตัวอย่างนี้: http: //graph.facebook.com/v2.2/4/picture?redirect=0) อย่างไรก็ตามการค้นหาหมายเลขผู้ใช้มาตรฐานของผู้ใช้ดูเหมือนจะเป็นไปไม่ได้โดยอิงจากโปรไฟล์ของพวกเขา - แอพของคุณจะต้องให้พวกเขาอนุมัติการโต้ตอบกับแอพซึ่งสำหรับกรณีการใช้งานของฉัน (แค่แสดงรูปโปรไฟล์ถัดจากลิงก์โปรไฟล์ FB)
หากมีคนหาวิธีที่จะได้รับรูปโปรไฟล์ตามชื่อผู้ใช้หรืออีกวิธีหนึ่งที่จะได้รับหมายเลขผู้ใช้ (แม้กระทั่งสลับ) เพื่อใช้ในการดึงรูปโปรไฟล์โปรดแบ่งปัน! ในระหว่างนี้ 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;
ฉันคิดว่าฉันจะโพสต์นี้เพราะมันเอาฉันบิตของเวลาที่จะคิดออกรายการส ... แม้ว่ารูปโปรไฟล์เป็นสาธารณะคุณยังคงต้องมีการเข้าถึง token ในการมีที่จะได้รับมันเมื่อคุณCurlมัน
มีวิธีการทำเช่นนั้น;)
ขอขอบคุณที่ " 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);
}
}
}
วิธีการทำงานของ PHP (HTTP GET) ทางออกตั้งแต่เดือนเมษายน 2558 (ไม่มี 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'];
}
คุณสามารถเปลี่ยน 'type' ใน parametr:
สแควร์:
ความกว้างและความสูงสูงสุด 50 พิกเซล
เล็ก
ความกว้างสูงสุด 50 พิกเซลและความสูงสูงสุด 150 พิกเซล
ปกติ
ความกว้างสูงสุด 100 พิกเซลและความสูงสูงสุด 300 พิกเซล
ใหญ่
ความกว้างสูงสุด 200 พิกเซลและความสูงสูงสุด 600 พิกเซล
ฉันคิดว่า - IDอาจจะเป็นเครื่องมือที่มีประโยชน์ ทุกครั้งที่ผู้ใช้สร้างบัญชีใหม่ควรได้รับ ID ที่สูงขึ้น ฉัน googled และพบว่ามีวิธีการประมาณวันที่สร้างบัญชีด้วย ID และ Massoud Seifi จาก metadatascience.com รวบรวมข้อมูลที่ดีเกี่ยวกับเรื่องนี้
อ่านบทความนี้:
และนี่คือรหัสที่จะดาวน์โหลด:
โพสต์บล็อกคว้ารูปภาพของวัตถุกราฟ Facebookอาจเสนอวิธีการแก้ปัญหารูปแบบอื่น ใช้รหัสในบทช่วยสอนพร้อมกับกราฟ APIของ Facebook และไลบรารี PHP SDK
... และพยายามอย่าใช้file_get_contents (เว้นแต่คุณพร้อมที่จะเผชิญกับผลที่ตามมา - ดูที่file_get_contents vs curl )
คุณมีความกังวลเกี่ยวกับขนาดภาพโปรไฟล์หรือไม่ ในช่วงเวลาของการดำเนินการเข้าสู่ระบบด้วย Facebook โดยใช้ PHP เราจะแสดงวิธีง่าย ๆ ในการรับภาพโปรไฟล์ขนาดใหญ่ใน Facebook PHP SDK นอกจากนี้คุณยังสามารถรับภาพขนาดที่กำหนดเองของโปรไฟล์ Facebook
ตั้งค่ามิติภาพโปรไฟล์โดยใช้บรรทัดของรหัสต่อไปนี้
$ userProfile = $ facebook-> api ('/ me? field = 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 อย่าลังเลที่จะทำสิ่งที่คุณต้องการด้วยมัน!
URI = https://graph.facebook.com/{}/picture?width=500'.format(uid)
คุณสามารถรับ URI ของโปรไฟล์ผ่านเครื่องมือค้นหา id Facebook ออนไลน์
นอกจากนี้คุณยังสามารถส่ง Param ประเภทที่มีค่าที่เป็นไปได้เล็ก, ปกติ, ใหญ่, สี่เหลี่ยม
อ้างถึงเอกสารทางการ
?type=large
สอบถามที่คุณสามารถเพิ่มได้ อุปกรณ์ประกอบฉากสำหรับคำตอบที่ดีกว่าการขูดหน้าจอฉันกำลังพิมพ์ BTW :)