如何检测Facebook上的默认头像?

如何检测链接上的默认头像是这样的: https://graph.facebook.com/'.$id.'/picture?type=large : https://graph.facebook.com/'.$id.'/picture?type=large ? https://graph.facebook.com/'.$id.'/picture?type=large ? 是唯一的方法来从特殊准备的configuration文件中获得头像(男性/女性),然后通过例如md5()进行比较?

很难相信这是唯一的方法。

你可以使用redirect=false参数:

https://graph.facebook.com/naitik/picture?redirect=false

然后Facebook的响应是json并包含这些数据:

 { "data": { "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn1/157337_5526183_369516251_q.jpg", "is_silhouette": false } } 

您可以使用is_silhouette选项来检测照片是否为默认照片。

你可以阅读更多: https : //developers.facebook.com/docs/reference/api/using-pictures/

没有可以调用的API来判断是否使用默认的照片。 您可以不下载整个图像并检查MD5,而是向该configuration文件URL发出HTTP HEAD请求,并查看Location标题,并查看该URL是否是已知的默认configuration文件映像之一:

男: https : //fbcdn-profile-a.akamaihd.net/static-ak/rsrc.php/v2/yL/r/HsTZSDw4avx.gif https://fbcdn-profile-a.akamaihd.net/static-ak/rsrc.php/v2/yL/r/HsTZSDw4avx.gif

女(Darth Vader): https : //fbcdn-profile-a.akamaihd.net/static-ak/rsrc.php/v2/yp/r/yDnr5YfbJCH.gif

在这里输入图像说明

这些url可能会改变我想,也可以默认的照片,但我没有看到任何情况下,我能记得。

如果您已经调用Graph API来获取像头像这样的用户数据,那么当您首次调用Graph API时,只需在字段 param中包含picture ,那么响应将包括is_silhouette偏移量(如果它设置为true)用户有默认的头像。

请求:

 https://graph.facebook.com/v2.7/me?access_token=[token]&fields=name,picture 

响应:

 { "id": "100103095474350", "name": "John Smith", "picture": { "data": { "is_silhouette": true, "url": "https://scontent.xx.fbcdn.net/v/...jpg" } } } 

使用Facebook SDK for iOS(Swift 4):

 class FacebookSignIn { enum Error: Swift.Error { case unableToInitializeGraphRequest case unexpectedGraphResponse } func profileImageURL(size: CGSize, completion: @escaping Result<URL?>.Completion) { guard let userID = FBSDKAccessToken.current()?.userID else { completion(.failure(Error.unableToInitializeGraphRequest)) return } let params: [String: Any] = ["redirect": 0, "type": size.width == size.height ? "square" : "normal", "height": Int(size.height), "width": Int(size.width), "fields": "is_silhouette, url"] guard let request = FBSDKGraphRequest(graphPath: "/\(userID)/picture", parameters: params) else { completion(.failure(Error.unableToInitializeGraphRequest)) return } _ = request.start { _, result, error in if let e = error { completion(.failure(e)) } else if let result = result as? [String: Any], let data = result["data"] as? [String: Any] { if let isSilhouette = data["is_silhouette"] as? Bool, let urlString = data["url"] as? String { if isSilhouette { completion(.success(nil)) } else { if let url = URL(string: urlString) { completion(.success(url)) } else { completion(.failure(Error.unexpectedGraphResponse)) } } } else { completion(.failure(Error.unexpectedGraphResponse)) } } else { completion(.failure(Error.unexpectedGraphResponse)) } } } } public enum Result<T> { case success(T) case failure(Swift.Error) public typealias Completion = (Result<T>) -> Void }