2016-10-25 25 views
0

我想在linqToTwitter用戶的網名來獲得用戶的電子郵件,我用這個代碼:如何在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("-------------------------------------------"); 

但用戶的電子郵件爲空。

+0

也許電子郵件實際上是空的?如果在沒有拋出異常的情況下達到目標,它必須找到一條記錄來填充用戶對象,並且返回的記錄沒有關聯的電子郵件。 – user1666620

+0

但我的推特帳戶有電子郵件 –

+0

當你說電子郵件是'null',究竟發生了什麼?拋出異常嗎? 「objAccount」是否填充了「objTwitter.User」對象的集合?用戶是否被填充? – user1666620

回答

0

根據Twitter VerifyCredentials Documentation,您需要列入白名單才能接收電子郵件地址。否則,它們是空的。

這就是說,你的查詢將不能工作,因爲LINQ到Twitter是異步,你應該寫物化聲明是這樣的:

var user = await objAccount.SingleOrDefaultAsync(); 

通知的await改性劑和Async後綴上SingleOrDefault。因爲它是異步的,所以你的整個調用鏈需要是異步的。儘快

 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,你應該重新輸入您的應用程序:

一旦你加入白名單,由Twitter,你應該查詢AccountType.VerifyCredentials,像這樣。我編輯它以從代碼中刪除您的憑證,但它們仍然存在差異,許多人可以在Twitter上找到它們並在其上編寫代碼,就好像它們是你一樣。

相關問題