2011-04-18 11 views
0

を使用して:Facebookのアルバムの画像私は次のコードでのSilverlightアプリ内でFacebookのC#SDKを使用してログインfacebookからのアルバム画像を取得するためにトリングよFacebookのC#SDK

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

アルバム、私はこのエラーが表示されます: 値を解析中に予期しない文字が発生しました: 。 JsonSerializerのDeserializeObjectメソッドの から1行目の位置1に移動します。問題はfacebookがimge uriなどでjsonデータを返さないのですが、実際には画像自体をバイナリデータで返します。誰も私がこの結果をどうやってやり遂げることができるのか、それともウリをイメージにつけることができるのか考えていますか? 私はこのコードを使用して、このための回避策があります。

 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のドキュメンテーションを取得している。この方法で「アルバム」ノードの「絵」接続はURLで_AnのHTTP 302を返すと言う: はこのようにそれを解決します奇妙なことですが、私は本当にこれを処理する適切な方法が何であるか考えていますか? –

+0

私は私の問題に対して許容可能な解決策を見つけたと思う。グラフAPIの代わりにFQLを使用します。これは仕事をします: 'FacebookClientクライアント=新しいFacebookClient(this.Profile.AccessToken);クライアント.QueryAsync(String.Format( "SELECT src_small、src_big、src FROM写真からpid IN(SELECT cover_pid FROM album WHERE object_id = {0})"、this.ID)); client.GetCompleted + =(s、e)=> {動的結果= e.GetResultData(); Deployment.Current.Dispatcher.BeginInvoke(()=> this.Picture = result [0] .src_small); }; ' –

+0

あなたは実際に解決策を打ち破り、自分の質問への回答として投稿し、それを正解とマークする必要があります。そうすれば、はるかに明確になります。 –

答えて

0

私は私の問題のために受け入れ可能な解決策を見つけたと思います。グラフAPIの代わりにFQLを使用します。これは仕事をするでしょう:

 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配列ではなく絵

関連する問題