2016-04-20 7 views
1

Ich benutze die LinqToTwitter API und habe das folgende Problem.LinqToTwitter bekommen retweet Status

Wie kann ich die Informationen erhalten, wenn ich (der aktuelle Benutzer) bereits einen Tweet retweetet habe, obwohl ich die IsChecked-Eigenschaft auf dem ToggleButton für Retweet ändern kann.

Ich habe bereits versucht, alle Tweets eines einzigen Status zu erhalten, um es mit einer Liste von TweetIDs zu vergleichen, die ich retweetet habe.

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; 

Und die TweetContent.AllMyRetweets wird hier definiert:

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); 
    } 
} 

Ich denke, diese Lösung zwei Probleme:

  1. Es macht einen API-Aufruf für jeden tweet ich angezeigt werden soll was bedeutet, dass es viel Zeit brauchen kann.

  2. Ich werde sehr schnell eine "Rate Limit exceeded" Ausnahme bekommen, die mir sagt, dass dies nicht der richtige Weg sein kann.

Was ist der beste Weg, dies zu tun?

Antwort

2

Dies war leichter, als ich :-)

dachte

Die Informationen sind in jedem Zustand in der Eigenschaft Status.Retweeted aber es ist nicht nach einer Standard searh Abfrage wie gefüllt:

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); 

Danach Sie muss eine LookUp-Abfrage mit der gerade erhaltenen tweetIDList machen. Dies wird die Eigenschaft mit dem richtigen Wert füllen.

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

     return tweets;