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?t
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.
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 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 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;
}
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