Facebook专辑图片使用Facebook C#SDK

时间:2011-04-18 16:56:16

标签: silverlight facebook-c#-sdk

我想通过Silverlight应用程序中的facebook C#SDK使用以下代码从facebook获取专辑图片:

        FacebookClient client = new FacebookClient(this.Profile.AccessToken);
        client.GetAsync(string.Format("/{0}/picture?type=small", this.ID));
        client.GetCompleted += (s, e) =>
        {
            dynamic result = e;
        };

其中this.ID是相册的ID,但是我收到此错误:    解析值时遇到意外的字符: 。第1行,第1位。 来自JsonSerializer中的DeserializeObject方法。问题是facebook确实没有使用imge uri或类似的东西返回json数据,但它们实际上是以二进制数据返回图像本身。任何人都知道如何处理这个结果或者只是让Uri得到图像? 我使用此代码有一个解决方法:

        var request = WebRequest.Create(string.Format("https://graph.facebook.com/{0}/picture?access_token={1}", this.ID, this.Profile.AccessToken));
        request.BeginGetResponse(ar =>
        {
            using (var response = ((WebRequest)ar.AsyncState).EndGetResponse(ar))
            {
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    this.Picture = new BitmapImage(new Uri(response.ResponseUri.AbsoluteUri));
                }
                );
            }
        }, request);

但我真的只想使用Facebook C#SDK来获取数据。

以下是我要使用的解决方案:

        FacebookClient client = new FacebookClient(this.Profile.AccessToken);
        client.QueryAsync(String.Format("SELECT src_small, src_big, src FROM photo WHERE pid IN (SELECT cover_pid FROM album WHERE object_id={0})", this.ID));
        client.GetCompleted += (s, e) =>
        {
            dynamic result = e.GetResultData();

            Deployment.Current.Dispatcher.BeginInvoke(() => this.Picture = result[0].src_small);
        };

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题。也想要使用Facebook C#SDK。 像这样解决了:

FacebookClient facebookAlbumClient = new FacebookClient(_albumAccessToken);
dynamic facebookAlbumCover = facebookAlbumClient.Get(string.Format("/{0}?fields=picture&type=thumbnail", (string)facebookAlbum["id"]));

这样你就得到了json数组而不是图片

答案 1 :(得分:0)

我认为我找到了一个可接受的问题解决方案。我只会使用FQL而不是Graph API。这将完成这项工作:

        FacebookClient client = new FacebookClient(this.Profile.AccessToken);
        client.QueryAsync(String.Format("SELECT src_small, src_big, src FROM photo WHERE pid IN (SELECT cover_pid FROM album WHERE object_id={0})", this.ID));
        client.GetCompleted += (s, e) =>
        {
            dynamic result = e.GetResultData();

            Deployment.Current.Dispatcher.BeginInvoke(() => this.Picture = result[0].src_small);
        };