使用LINQ到Twitter获取所有以下内容

时间:2013-02-05 23:44:36

标签: c# twitter windows-phone linq-to-twitter

我刚刚开始使用Windows Phone应用,我需要获取所有用户的以下信息。 我试过this

SharedState.Authorizer = pinAuth;
ITwitterAuthorizer auth = SharedState.Authorizer;
TwitterContext twitterCtx = new TwitterContext(auth);

var friendList =
    (from friend in twitterCtx.SocialGraph
        where friend.Type == SocialGraphType.Friends && friend.ScreenName == "_TDK"
        select friend)
    .SingleOrDefault();

List<String> Followings;
foreach (var id in friendList.ScreenName)
{
    Followings.Add(id.ToString());
}

好友列表总是 null ,显然,foreach不喜欢这样,并抛出exception

有人可以帮助我吗?

感谢。

2 个答案:

答案 0 :(得分:1)

我有同样的问题,我这样解决了(我知道这不是最好的方法)

public void getProfile(MyProgressBar myprogressbar)
{
    var auth = new SingleUserAuthorizer
    {
        Credentials = new InMemoryCredentials
        {
            ConsumerKey = GlobalVariables.ConsumerKey,
            ConsumerSecret = GlobalVariables.ConsumerSecret,
            AccessToken = GlobalVariables.AccessToken,
            OAuthToken = GlobalVariables.AccessTokenSecret
        }
    };

    using (var twitterCtx = new TwitterContext(auth, "https://api.twitter.com/1/", "https://search.twitter.com/"))
    {
        //Log
        twitterCtx.Log = Console.Out;

        var queryResponse = (from tweet in twitterCtx.Status
                             where tweet.Type == StatusType.User && tweet.ScreenName == GlobalVariables.ScreenName
                             select tweet);

        queryResponse.AsyncCallback(tweets =>
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                var publicTweets = (from tweet in tweets
                                    select tweet).FirstOrDefault();
                s.TwitterName = publicTweets.User.Name.ToString();
                s.TwitterScreenName = "@" + GlobalVariables.ScreenName;
                s.TwitterDescription = publicTweets.User.Description.ToString();
                s.TwitterStatus = publicTweets.User.StatusesCount.ToString() + " Tweets / " + publicTweets.User.FriendsCount.ToString() + " Following / " + publicTweets.User.FollowersCount.ToString() + " Followers";
                s.TwitterImage = publicTweets.User.ProfileImageUrl.ToString();

                myprogressbar.ShowProgressBar = false;

            })).SingleOrDefault();
    }
}

答案 1 :(得分:1)

我认为您需要迭代ID集合,如下所示:

foreach (var id in friendList.IDs)
{
    Followings.Add(id.ToString());
}

您需要使用基于Silverlight的应用程序(包括Windows Phone)进行异步调用。以下是如何重构查询的示例:

var twitterCtx = new TwitterContext(auth);

(from social in twitterCtx.SocialGraph
 where social.Type == SocialGraphType.Followers &&
       social.ScreenName == "JoeMayo"
 select social)
.MaterializedAsyncCallback(asyncResponse =>
     Dispatcher.BeginInvoke(() =>
     {
         if (asyncResponse.Status != TwitterErrorStatus.Success)
         {
              MessageBox.Show(
                  "Error during query: " + 
                  asyncResponse.Exception.Message);
              return;
         }

         SocialGraph social = asyncResponse.State.SingleOrDefault();

         SocialListBox.ItemsSource = social.IDs;
     }));

MaterializedAsyncCallback管理来自Twitter的回调。请注意我如何使用Dispatcher.BeginInvoke将回调编组回UI线程,因为回调在工作线程上。在asyncResponse回调参数上,使用Status查看是否存在错误,如果查询成功,则使用State获取数据。