получение изображения профиля пользователя с помощью facebook c # sdk из codeplex - PullRequest
9 голосов
/ 01 февраля 2011

Я использую Facebook C # SDK из codeplex и пытаюсь загрузить фотографию профиля пользователя.

Я знаю, что могу получить это от:

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

, но этот URL затем отправляет второй URL с действительным изображением.Как мне получить второй URL?На стеке есть сообщение о разборе json, как мне это сделать?

            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;

Ответы [ 5 ]

14 голосов
/ 01 марта 2011

Вы можете позволить браузеру получить изображение для вас, используя граф api url - graph.facebook.com/UID/picture?type=large или использовать что-то похожее на метод ниже, чтобы получить кэшированный 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;
    }
8 голосов
/ 05 февраля 2011

Вот и все, работает хорошо, я использую его

Функция

  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;

        }

и ее вызов

profilePic = getUrlImage("https://graph.facebook.com/" + me.id + "/picture");
5 голосов
/ 02 февраля 2011

На самом деле вам не нужен второй URL. Второй URL - это просто URL для кэширования. Просто используйте graph.facebook.com/username/picture?type=large url. Более длинный URL-адрес кэширования может измениться, поэтому он не является надежным источником изображения.

2 голосов
/ 05 марта 2011

Вы можете получить URL изображения через это: graph.facebook.com/username?fields=picture

Facebook C # SDK из codeplex (v.5.0.3) выдает исключение при попытке сделать что-то вроде этого: fb.GetAsync ("я / картинка", get_data_callback); Я полагаю, GetAsync не поддерживает извлечение (двоичных) данных изображения.

0 голосов
/ 22 марта 2011

Вы можете получить URL для изображения пользователя, используя 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)

Страница FQL Facebook для таблицы пользователей

...