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;
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;
}
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");
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.
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.
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)
来源:https://stackoverflow.com/questions/4859219/getting-user-profile-picture-using-facebook-c-sharp-sdk-from-codeplex