【发布时间】:2011-04-18 16:56:16
【问题描述】:
我正在尝试使用 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);
};
【问题讨论】:
-
Facebook 文档说“专辑”节点的“图片”连接返回 带有专辑封面图片 URL 的 HTTP 302。 这有点奇怪,我'我真的想知道处理这个问题的正确方法是什么?
-
我想我为我的问题找到了一个可以接受的解决方案。我将只使用 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); }; -
您应该真正分解解决方案并将其作为(您自己的)问题的答案发布,并将其标记为正确答案。这样会更清晰。
-
@Magnus Johansson 我肯定会,我最初尝试这样做,但似乎我仍然是新用户,我无法在 24 小时内发布我自己的问题的解决方案。
标签: silverlight facebook-c#-sdk