2012-01-11 4 views
4

質問がありました。私はsurcerisingly答えを見つけることができませんでした。Dotnetopenauth、facebookからメールを取得するスコープ

私は次のようにFacebookのユーザーからのメールをリクエストした場合:私はそれを取得するにはどうすればよい

var scope = new List<string>(); 
       scope.Add("email"); 
       FbClient.RequestUserAuthorization(scope); 

?私はFacebookGraphでこのための明確なオプションを見つけることができませんでした。

答えて

0

上記の書き込みは、ユーザーのオブジェクトを照会するときにアプリが電子メールを返すことを許可するために、ユーザーからの承認を要求しているようです。ユーザーのオブジェクトを照会するにはHTTPを実行します。https://graph.facebook.com/meにアクセスしてください。グラフAPIエクスプローラツールでそれを試してみてください。https://developers.facebook.com/tools/explorer

+0

まあ、実際にこれは私が他の情報を取得する方法である: VAR要求= WebRequest.Create( "https://graph.facebook.com/me?access_token=" + Uri.EscapeDataString(authorization.AccessToken )); var response = request.GetResponse(); var responseStream = response.GetResponseStream(); var graph = FacebookGraph.Deserialize(responseStream); その後、私は例えばIdでグラフを収集します。グラフには、私が見る限り、例えば電子メールは含まれていませんが。だから私の質問は、dotnetopenauthを使ってこれらのスコーププロパティを取得する最良の方法でした。 – Baserz

+1

ああ、忘れてしまったように、フィールドパラメタで電子メールフィールドを指定する必要があります: 'http://graph.facebook.com/me?fields = email' – DMCS

3

DotNetOpenAuthの例にあるFacebookGraphオブジェクトは、受け取っているフィールドの変更をサポートしていません。しかし、WebRequestからプロンプトが出されてJSON文字列が返されているので、自分で解析する(または別のJSONパーサを使用する)ことができます。あなたはWebRequestクラスURIの一部として送り返さするフィールド内容を指定

//as part of the uri for the webrequest, include all the fields you want to use 
var request = WebRequest.Create("https://graph.facebook.com/me?fields=email,name&access_token=" + Uri.EscapeDataString(authorization.AccessToken)); 
using (var response = request.GetResponse()) 
{ 
    using (var responseStream = response.GetResponseStream()) 
    { 
     System.IO.StreamReader streamReader = new System.IO.StreamReader(responseStream, true); 
     string MyStr = streamReader.ReadToEnd(); 
     JObject userInfo = JObject.Parse(MyStr); 

     //now you can access elements via: 
     // (string)userInfo["name"], userInfo["email"], userInfo["id"], etc. 
    } 
} 

注:それはNewtonSoft.Json.dllを使用して、私はまったく同じものです。利用可能なフィールドはhttps://developers.facebook.com/docs/reference/api/user/

+0

ありがとうございます。 :)私は電子メールアドレスのためにFacebookのサービスに再度電話したくない。 DotNetOpenAuth 3.5ライブラリでは、FacebookGraph.deserializeメソッドに電子メールプロパティが含まれていません。 – Brian

2

であり、DNOA This answerを使用しています。

ちょうど次を追加しました:

var scope = new List<string>(); 
scope.Add("email"); 

client.RequestUserAuthorization(scope); 

とFacebookのグラフを以下に示します。

[DataMember(Name = "email")] 
public string EMail { get; set; } 
関連する問題