Facebook graph api 如何使用Swift从相册导入FaceBook个人资料图片
我正在像这样获取facebook个人资料图片Facebook graph api 如何使用Swift从相册导入FaceBook个人资料图片,facebook-graph-api,swift3,Facebook Graph Api,Swift3,我正在像这样获取facebook个人资料图片 let params = ["height": 300, "width": 300, "redirect": false] as [String : Any] let graphRequest = FBSDKGraphRequest(graphPath: "me/picture", parameters: params, httpMethod: "GET") let connection = FBSDKGraph
let params = ["height": 300, "width": 300, "redirect": false] as [String : Any]
let graphRequest = FBSDKGraphRequest(graphPath: "me/picture", parameters: params, httpMethod: "GET")
let connection = FBSDKGraphRequestConnection()
connection.add(graphRequest, completionHandler: { (connection, result, error) in
if error == nil {
print("profile pic ************\(result)")
}
})
connection.start()
现在我需要从ablum访问个人资料图片,并在我的收藏视图中设置这些图片。我尝试设置图形路径:“我/相册/个人资料图片”,但没有成功。谁能给我一些提示吗 您需要找到
“Profile Pictures”
相册的id,并请求该id的照片
Facebook.albums(user: "me").request({ albums in
albums.first(where: { ($0["name"] as? String) == "Profile Pictures" }).flatMap({
Facebook.photos(album: $0["id"] as! String).request({ photos in
print(photos)
})
})
})
我在下面做了一个枚举,以使请求图形api路径更容易
enum Facebook: Graphable {
case albums(user: String)
case photos(album: String)
var path: String {
switch self {
case let .albums(uid):
return "\(uid)/albums"
case let .photos(aid):
return "\(aid)/photos"
}
}
var method: String {
switch self {
case .albums, .photos:
return "GET"
}
}
var params: [String : Any] {
switch self {
case .albums:
return [:]
case .photos:
return [
"height": 300,
"width": 300,
"redirect": false
]
}
}
}
以下是枚举必须遵守的协议和扩展
protocol Graphable {
var path: String { get }
var method: String { get}
var params: [String : Any] { get }
}
extension Graphable {
typealias JSON = [String:Any]
func request(_ handler: @escaping ([JSON]!) -> (), failure: @escaping (Error) -> () = { print($0) }) {
let connection = FBSDKGraphRequestConnection()
let request = FBSDKGraphRequest(
graphPath: path,
parameters: params,
httpMethod: method
)
connection.add(request) {
_ = $0.1.map ({ handler(($0 as? JSON)?["data"] as? [JSON]) }) ??
$0.2.map ({ failure($0) })
}
connection.start()
}
}
我的回答是这样的:
import FBSDKCoreKit
import SwiftyJSON
func getFBAlbumID() {
let graphRequest = FBSDKGraphRequest(graphPath: "me/albums", parameters: nil, httpMethod: "GET")
let connection = FBSDKGraphRequestConnection()
connection.add(graphRequest, completionHandler: { (connection, result, error) in
if error == nil
let dictionary = JSON(result)
// print("albums ID are **************\(dictionary)")
if let data = dictionary["data"].array {
print("data of profilePicture ******* \(data)")
if let dict = data.first(where: { ($0["name"].string ) == "Profile Pictures" }) {
let id = dict["id"].string
print("my desired id : ********* \(id)")
self.getFBAlbumPhoto(albumID: id!)
}
}
}
})
connection.start()
}
func getFBAlbumPhoto(albumID: String) {
let params = [ "height": 300, "width": 300, "redirect": false] as [String : Any]
let graphRequest = FBSDKGraphRequest(graphPath: "\(albumID)/photos?fields=source", parameters: params, httpMethod: "GET")
let connection = FBSDKGraphRequestConnection()
connection.add(graphRequest, completionHandler: { (connection, result, error) in
if error == nil {
//print(result)
let dictionary = JSON(result)
print("result are **************\(dictionary)")
}
})
connection.start()
}
在这里,我抓取我想要的特定相册的ID,然后再打一个电话获取该相册的照片。这里我从另一个函数内部调用一个函数。如果有人能帮助我以更快捷的方式编写代码,那会很有帮助,比如使用闭包。谢谢 如果您
打印(错误)
,可选({data=();})
您确定这是错误还是结果?如果错误==nil{print(“profile pic***************(result)”)},那么它就不是错误了,你是来自天堂的天使:)在这行中遇到了一些麻烦\u=$0.1.map({handler($0 as!T)})?
,说无法将类型为“\uu NSDictionaryI”(0x1058130b8)的值转换为“NSArray”(0x105812c58),你有时间来修复吗!!对不起,老兄,我太打扰你了!!!仍然存在一些问题,当我运行应用程序时,它崩溃了,并向我显示一些线程问题,如:libswiftCore.dylib`\u swift\u bridgenon-speartimfromobjectivec:。我想它和arrayyes有麻烦了它现在工作了@Callam,我得到了照片的id。非常感谢你的时间和努力,这真的很有帮助。谢谢,这太棒了!非常感谢。你好,Arafin,我得到nil响应作为可选({data=();})在得到相册id后,再次请求得到可选({data=();})空数组的照片列表