getting user profile picture using facebook c# sdk from codeplex

匆匆过客 提交于 2019-12-18 21:49:22

问题


I am using facebook C# sdk from codeplex and trying to download user's profile picture.

I know I can get this from:

http://graph.facebook.com/UID/picture?type=large

but this URL then posts to a second url with the actual picture. How do I get the second URL? There is a post on stackoverflow that talks about parsing json, how do I do this?

            var app = new FacebookApp();
            var me = (IDictionary<string, object>)app.Get("me");
            string firstName = (string)me["first_name"];
            string lastName = (string)me["last_name"];
            string gender = (string)me["gender"];
            string email = (string)me["email"];
            long facebook_ID = app.UserId;

回答1:


You could let the browser get the image for you using the graph api url - graph.facebook.com/UID/picture?type=large or use something like the method below to get the cached url

    public static string GetPictureUrl(string faceBookId)
    {
        WebResponse response = null;
        string pictureUrl = string.Empty;
        try
        {
            WebRequest request = WebRequest.Create(string.Format("https://graph.facebook.com/{0}/picture", faceBookId));
            response = request.GetResponse();
            pictureUrl = response.ResponseUri.ToString();
        }
        catch (Exception ex)
        {
            //? handle
        }
        finally
        {
            if (response != null) response.Close();
        }
        return pictureUrl;
    }



回答2:


Here it goes it works well i am using it

Function is

  private Image getUrlImage(string url)
        {
            WebResponse result = null;
            Image  rImage = null;
            try
            {
                WebRequest request = WebRequest.Create(url);
                result = request.GetResponse();
                Stream stream = result.GetResponseStream();
                BinaryReader br = new BinaryReader(stream);
                byte[] rBytes = br.ReadBytes(1000000);
                br.Close();
                result.Close();
                MemoryStream imageStream = new MemoryStream(rBytes, 0, rBytes.Length);
                imageStream.Write(rBytes, 0, rBytes.Length);
                rImage = Image.FromStream(imageStream, true);
                imageStream.Close();
            }
            catch (Exception c)
            {
                //MessageBox.Show(c.Message);
            }
            finally
            {
                if (result != null) result.Close();
            }
            return rImage;

        }

and its call is

profilePic = getUrlImage("https://graph.facebook.com/" + me.id + "/picture");



回答3:


You don't actually need the second URL. The second URL is just a caching url. Just use the graph.facebook.com/username/picture?type=large url. The longer caching url could change so it is not a reliable source of the image anyway.




回答4:


You can get the picture URL through this : graph.facebook.com/username?fields=picture

The facebook C# sdk from codeplex (v.5.0.3) throws an exception when trying to do something like this: fb.GetAsync("me/picture", get_data_callback); I guess GetAsync doesn't support to retrieve the (binary) image data.




回答5:


You can get the urls for the user's picture by using FQL

dim app as new facebookclient(token)
dim obj as jsonobject = app.get("me/")
dim fql as string = "Select pic_small, pic_big, pic_square from user where uid = " + CStr(obj("id"))
dim arr as jsonarray = app.query(fql)

Facebook FQL page for user table



来源:https://stackoverflow.com/questions/4859219/getting-user-profile-picture-using-facebook-c-sharp-sdk-from-codeplex

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!