2016-04-20 1 views
1

J'utilise l'API LinqToTwitter et j'ai le problème suivant.LinqToTwitter obtenir le statut Retweet

Comment puis-je obtenir les informations si I (l'utilisateur actuel) a déjà retweeté un tweet alors que je peux changer la propriété IsChecked sur ToggleButton pour Retweet.

J'ai déjà essayé d'obtenir tous les tweets d'un seul statut pour le comparer avec une liste de tweetIDs que j'ai retweeté.

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; 

Et les TweetContent.AllMyRetweets est défini ici:

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

Je pense que cette solution a deux problèmes:

  1. Il fait un appel API pour chaque tweet que je veux afficher ce qui signifie qu'il peut avoir besoin de beaucoup de temps.

  2. Je vais très rapidement obtenir une exception "Limite de débit dépassée" qui me dit que cela ne peut pas être la bonne façon de le faire.

Quelle est la meilleure façon de procéder?

Répondre

2

Ce fut plus facile que je pensais :-)

L'information est dans tous les états dans la propriété Status.Retweeted mais il est vide après une comme requête searh par défaut:

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

Après cela, vous avoir à faire une requête lookUp avec la tweetIDList que vous venez de recevoir. Cela va remplir la propriété Status.Retweeted avec la bonne valeur.

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

     return tweets;