2016-10-25 4 views
0

Ich möchte Benutzer-E-Mail von Benutzer-Chat-Namen in linqToTwitter bekommen, verwende ich diesen Code:Wie bekomme ich die E-Mail des Benutzers nach dem Benutzernamen des Benutzers in linqToTwitter?

var auth = new SingleUserAuthorizer 
{ 
    CredentialStore = new SingleUserInMemoryCredentialStore 
    { 
      ConsumerKey = "<Twitter consumer key>", 
      ConsumerSecret = "<Twitter consumer secret>", 
      AccessToken = "<Your access token>", 
      AccessTokenSecret = "<Your access token secret>" 
    } 
}; 

var objTwitter = new TwitterContext(auth); 
var objAccount = (from account in objTwitter.User 
        where account.Type == UserType.Show && 
         account.ScreenName == sUser 
        select account); 

var user = objAccount.SingleOrDefault(); 

Console.WriteLine("UserName  : " + user.ScreenName); 
Console.WriteLine("Name   : " + user.Name); 
Console.WriteLine("UserID   : " + user.UserIDResponse); 
Console.WriteLine("CreatedAt  : " + user.CreatedAt); 
Console.WriteLine("# of Friends : " + user.FriendsCount); 
Console.WriteLine("# of Followers : " + user.FollowersCount); 
Console.WriteLine("Email   : " + user.Email); 
Console.WriteLine("# of Tweets : " + user.StatusesCount); 
Console.WriteLine("Photo URL  : " + user.ProfileImageUrl); 
Console.WriteLine("-------------------------------------------"); 

aber Benutzer-E-Mail ist null.

+0

vielleicht ist die E-Mail tatsächlich Null? Wenn es so weit kommt, ohne eine Ausnahme auszulösen, muss es einen Datensatz finden, um Ihr 'Benutzer'-Objekt zu füllen, und dem zurückgegebenen Datensatz ist keine E-Mail zugeordnet. – user1666620

+0

aber mein Twitter-Konto hat E-Mail –

+0

Wenn Sie sagen, die E-Mail ist "null", was genau passiert? Wird eine Ausnahme ausgelöst? Ist 'objAccount' mit einer Sammlung von' objTwitter.User' Objekten gefüllt? Ist 'user' aufgefüllt? – user1666620

Antwort

0

Gemäß der Twitter VerifyCredentials Documentation müssen Sie auf die Whitelist gesetzt werden, um E-Mail-Adressen zu erhalten. Ansonsten sind sie null.

Das heißt, Ihre Abfrage wird nicht funktionieren, weil LINQ to Twitter async ist und Sie die Materialisierung Anweisung wie folgt sein sollte geschrieben:

var user = await objAccount.SingleOrDefaultAsync(); 

Mitteilung der await Modifikator und Async Suffix auf SingleOrDefault. Da es asynchron ist, muss die gesamte Aufrufkette asynchron sein.

Sobald Sie die weiße Liste gesetzt werden, durch Twitter, sollten Sie AccountType.VerifyCredentials, wie diese Abfrage:

 try 
     { 
      var verifyResponse = 
       await 
       (from acct in twitterCtx.Account 
       where acct.Type == AccountType.VerifyCredentials && 
         acct.IncludeEmail == true 
       select acct) 
       .SingleOrDefaultAsync(); 

      if (verifyResponse != null && verifyResponse.User != null) 
      { 
       User user = verifyResponse.User; 

       Console.WriteLine(
        $"Email for {user.ScreenNameResponse} is {user.Email}."); 
      } 
     } 
     catch (TwitterQueryException tqe) 
     { 
      Console.WriteLine(tqe.Message); 
     } 

BTW, sollten Sie erneut Taste Ihre Anwendung so schnell wie möglich. Ich habe es bearbeitet, um Ihre Zugangsdaten aus dem Code zu entfernen, aber sie sind immer noch im diff und viele Leute können sie finden und Code auf Twitter schreiben, als wären sie Sie.

Verwandte Themen