获取给定照片ID的照片URL:FacebookGraphAPI for iOS(Swift)
我的问题归结为:获取给定照片ID的照片URL。最终,我需要对iOS应用程序用户标记的所有照片执行此操作。我可以通过以下代码获取照片的ID:获取给定照片ID的照片URL:FacebookGraphAPI for iOS(Swift),ios,swift,facebook,facebook-graph-api,Ios,Swift,Facebook,Facebook Graph Api,我的问题归结为:获取给定照片ID的照片URL。最终,我需要对iOS应用程序用户标记的所有照片执行此操作。我可以通过以下代码获取照片的ID: // Create request for user's Facebook data let request = FBSDKGraphRequest(graphPath:"me", parameters:["fields": "photos"]) request.startWithCompletionHandler { (
// Create request for user's Facebook data
let request = FBSDKGraphRequest(graphPath:"me", parameters:["fields": "photos"])
request.startWithCompletionHandler {
(connection, result, error) in
if error != nil { }
else if let userData = result as? [String:AnyObject] {
let userPhotos = userData["photos"]
}
}
在返回的用户数据中,我可以访问每张照片的ID。现在,我定义了一个函数,它应该(理想情况下)返回给定ID的照片的URL。但是,我真的不知道如何正确调用Facebook Graph API。这就是我所拥有的(注:硬编码照片ID)
我确信graphPath参数是错误的。基于此,我做出了一些“聪明”的猜测:
如果你能给我任何帮助,我将不胜感激。谢谢
let requestPhotos = FBSDKGraphRequest(graphPath:id_num, parameters:["fields":"picture, name, album, place"])
其中id\u num
是Facebook照片的id号。很简单
其中
id\u num
是Facebook照片的id号。非常简单。好的,这里有一个简单的答案,谢谢@user2585945上面的答案
导入UIKit
class FacePhotosViewController: UIViewController{
@IBOutlet weak var imgTest: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
if (FBSDKAccessToken.currentAccessToken() != nil)
{
print("We are good!")
}
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"photos,picture"])
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
print("Error: \(error)")
}
else
{
print(result)
let resultdict = result.objectForKey("photos") as! NSDictionary
let data : NSArray = resultdict.objectForKey("data") as! NSArray
for i in 0..<data.count {
let valueDict : NSDictionary = data[i] as! NSDictionary
let id = valueDict.objectForKey("id") as! String
let created_time = valueDict.objectForKey("created_time") as! String
print("id: \(id) created_time: \(created_time) ")
}
}
})
let graphRequestPhoto : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "10156292340905363?type=large", parameters: ["fields":"picture, name, album, place"])
graphRequestPhoto.startWithCompletionHandler({ (connection, result, error) -> Void in
print(result)
if ((error) != nil)
{
// Process error
print("Error: \(error)")
}
else if let userData = result as? [String:AnyObject] {
let url = userData["picture"] as? String
print("link: \(url)")
let imgURL: NSURL! = NSURL(string: url!)
//lets' download profile photo
let session = NSURLSession.sharedSession()//session
let request: NSURLRequest = NSURLRequest(URL: imgURL!)//request
let dataTask = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in //session calls the request
if let noerror = data {
dispatch_async(dispatch_get_main_queue()) {
let image = UIImage(data: noerror)
self.imgTest.image = image
}
}
else {
print("Error: \(error!.localizedDescription)", terminator: "")
}
}
dataTask.resume()
}
})
}
}
类FacePhotosViewController:UIViewController{
@IBOutlet弱var imgTest:UIImageView!
重写func viewDidLoad(){
super.viewDidLoad()
如果(FBSDKAccessToken.currentAccessToken()!=nil)
{
打印(“我们很好!”)
}
让graphRequest:FBSDKGraphRequest=FBSDKGraphRequest(graphPath:“我”,参数:[“字段”:“照片,图片”])
startWithCompletionHandler({(连接、结果、错误)->中的Void
如果((错误)!=nil)
{
//过程错误
打印(“错误:\(错误)”)
}
其他的
{
打印(结果)
让resultdict=result.objectForKey(“照片”)作为!NSDictionary
将data:NSArray=resultdct.objectForKey(“数据”)设为!NSArray
因为我在0中…在0中无效
打印(结果)
如果((错误)!=nil)
{
//过程错误
打印(“错误:\(错误)”)
}
如果让userData=结果为?[字符串:AnyObject]{
将url=userData[“picture”]设为?字符串
打印(“链接:\(url)”)
让imgURL:NSURL!=NSURL(字符串:url!)
//让我们下载个人资料照片
让session=NSURLSession.sharedSession()//会话
let request:NSURLRequest=NSURLRequest(URL:imgURL!)//请求
让dataTask=session.dataTaskWithRequest(请求){(数据:NSData?,响应:nsurresponse?,错误:NSError?->Void in//session调用请求
如果let noerror=数据{
dispatch\u async(dispatch\u get\u main\u queue()){
let image=UIImage(数据:无错误)
self.imgTest.image=image
}
}
否则{
打印(“错误:\(错误!.localizedDescription)”,终止符:“”)
}
}
dataTask.resume()
}
})
}
}
好,这里有一个简单的答案,感谢@user2585945上面的答案
导入UIKit
class FacePhotosViewController: UIViewController{
@IBOutlet weak var imgTest: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
if (FBSDKAccessToken.currentAccessToken() != nil)
{
print("We are good!")
}
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"photos,picture"])
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
print("Error: \(error)")
}
else
{
print(result)
let resultdict = result.objectForKey("photos") as! NSDictionary
let data : NSArray = resultdict.objectForKey("data") as! NSArray
for i in 0..<data.count {
let valueDict : NSDictionary = data[i] as! NSDictionary
let id = valueDict.objectForKey("id") as! String
let created_time = valueDict.objectForKey("created_time") as! String
print("id: \(id) created_time: \(created_time) ")
}
}
})
let graphRequestPhoto : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "10156292340905363?type=large", parameters: ["fields":"picture, name, album, place"])
graphRequestPhoto.startWithCompletionHandler({ (connection, result, error) -> Void in
print(result)
if ((error) != nil)
{
// Process error
print("Error: \(error)")
}
else if let userData = result as? [String:AnyObject] {
let url = userData["picture"] as? String
print("link: \(url)")
let imgURL: NSURL! = NSURL(string: url!)
//lets' download profile photo
let session = NSURLSession.sharedSession()//session
let request: NSURLRequest = NSURLRequest(URL: imgURL!)//request
let dataTask = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in //session calls the request
if let noerror = data {
dispatch_async(dispatch_get_main_queue()) {
let image = UIImage(data: noerror)
self.imgTest.image = image
}
}
else {
print("Error: \(error!.localizedDescription)", terminator: "")
}
}
dataTask.resume()
}
})
}
}
类FacePhotosViewController:UIViewController{
@IBOutlet弱var imgTest:UIImageView!
重写func viewDidLoad(){
super.viewDidLoad()
如果(FBSDKAccessToken.currentAccessToken()!=nil)
{
打印(“我们很好!”)
}
让graphRequest:FBSDKGraphRequest=FBSDKGraphRequest(graphPath:“我”,参数:[“字段”:“照片,图片”])
startWithCompletionHandler({(连接、结果、错误)->中的Void
如果((错误)!=nil)
{
//过程错误
打印(“错误:\(错误)”)
}
其他的
{
打印(结果)
让resultdict=result.objectForKey(“照片”)作为!NSDictionary
将data:NSArray=resultdct.objectForKey(“数据”)设为!NSArray
因为我在0中…在0中无效
打印(结果)
如果((错误)!=nil)
{
//过程错误
打印(“错误:\(错误)”)
}
如果让userData=结果为?[字符串:AnyObject]{
将url=userData[“picture”]设为?字符串
打印(“链接:\(url)”)
让imgURL:NSURL!=NSURL(字符串:url!)
//让我们下载个人资料照片
让session=NSURLSession.sharedSession()//会话
let request:NSURLRequest=NSURLRequest(URL:imgURL!)//请求
让dataTask=session.dataTaskWithRequest(请求){(数据:NSData?,响应:nsurresponse?,错误:NSError?->Void in//session调用请求
如果let noerror=数据{
dispatch\u async(dispatch\u get\u main\u queue()){
let image=UIImage(数据:无错误)
self.imgTest.image=image
}
}
否则{
打印(“错误:\(错误!.localizedDescription)”,终止符:“”)
}
}
dataTask.resume()
}
})
}
}
FB文档建议只使用“/{photo id}”。因此,如果您的照片id为“123456”,您会使用“/123456”。您尝试过吗?这是正确的。谢谢!我最初尝试过这个,但有一个不同的(不相关的)错误。这提供了表单的链接,但我希望表单的链接:XXXXXXXXXXXXXX\uXXXXXXXXXXXXXX\u n.jpg?oh=XXXXXXXXXXXXXX e=XXXXXXXXXXXXXX。知道怎么做吗?同样要澄清的是,我想要的链接是指向可公开访问的照片的链接。看起来像参数“picture”为照片的缩小版本提供此链接。这对于我的目的应该足够了。FB文档