Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取给定照片ID的照片URL:FacebookGraphAPI for iOS(Swift)_Ios_Swift_Facebook_Facebook Graph Api - Fatal编程技术网

获取给定照片ID的照片URL:FacebookGraphAPI for iOS(Swift)

获取给定照片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 { (

我的问题归结为:获取给定照片ID的照片URL。最终,我需要对iOS应用程序用户标记的所有照片执行此操作。我可以通过以下代码获取照片的ID:

// 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文档