LinqToTwitter获得转发状态

时间:2016-04-20 13:22:07

标签: c# linq-to-twitter

我正在使用LinqToTwitter API并遇到以下问题。

如果我(当前用户)已经转发了一条推文,我怎样才能获得这些信息,虽然我可以更改ToggleButton for Retweet上的IsChecked属性。

我已经尝试将一个状态的所有推文与我转发的tweetID列表进行比较。

var publicTweets = await (from tweet in TweetContent.Connection.Status
                          where tweet.Type == StatusType.Retweets &&
                                tweet.ID == TweetID
                          select tweet)
                          .ToListAsync();

foreach (var publicTweet in publicTweets)
{
    foreach (var myTweet in TweetContent.AllMyReTweets)
    {
        if (publicTweet.ID == myTweet)
        {
            // false means the ToggleButton is PreSet
            RetweetState = false;
            break;
        }
    }
}
// No hit
RetweetState = true;

这里定义了TweetContent.AllMyRetweets:

 List<ulong> myList = new List<ulong>();
 var myRetweets = await (from retweet in TweetContent.Connection.Status
                         where retweet.Type == StatusType.RetweetsOfMe &&
                               retweet.Count == 100
                         select retweet)
                         .ToListAsync();

if (myRetweets != null)
{
    foreach (var tweet in myRetweets)
    {
        myList.Add(tweet.ID);
    }
}

我认为这个解决方案有两个问题:

  1. 它为我想要显示的每条推文进行一次API调用,这意味着它可能需要很多时间。

  2. 我很快就会超过&#34;超过限额#34;例外情况告诉我,这不是正确的做法。

  3. 这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

这比我想象的要容易: - )

信息位于属性Status.Retweeted中的每个状态中,但在默认的搜索查询之后未填充,如:

 var tweets = Enumerable.FirstOrDefault(
                                from tweet in TweetContent.Connection.Search
                                where tweet.Type == SearchType.Search &&
                                    tweet.Query == query &&
                                    tweet.IncludeEntities == true &&
                                    tweet.Count == maxNumberToFind && (tweet.MaxID == id)
                                select tweet);

在此之后,您必须使用刚刚收到的tweetIDList进行lookUp查询。这将使属性Status.Retweeted填入正确的值。

        List<Status> tweets =
        await
        (from tweet in TweetContent.Connection.Status
         where tweet.Type == StatusType.Lookup &&
               tweet.TweetIDs == tweetIDList
         select tweet)
        .ToListAsync();

        return tweets;