2011-04-18 57 views
0

我特林使用Silverlight应用程序内facebook的C#SDK用下面的代码来获得来自Facebook的相册图片:Facebook的相册照片使用Facebook的C#SDK

 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); 
     }; 
+0

Facebook的单证说,“专辑”节点的“图像”连接返回_An HTTP 302网址这张专辑的封面照片。这真是奇怪,我真的很想知道处理这个问题的正确方法是什么? – 2011-04-18 17:06:09

+0

我想我找到了一个可以接受的解决方案来解决我的问题。我只会使用FQL而不是Graph API。这将完成这项工作: 'FacebookClient客户端=新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); };' – 2011-04-18 17:55:37

+0

你应该真的发现解决方案并将其作为(自己的)问题的答案发布,并将其标记为正确的答案。这样它会更清晰。 – 2011-04-18 20:00:43

回答

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); 
     }; 
1

我正面临着类似的问题。只想使用Facebook C#SDK。 解决这样的:

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

这样,你所得到的JSON数组,而不是图片