private static async Task ClearOldTwits(TwitterContext twitterCtx) { var statuses = (from status in twitterCtx.Status where status.Type == StatusType.User && status.Entities.HashTagEntities.Any(h => h.Tag == "sdpf") select status.StatusID).ToArray(); var tasks = from id in statuses select twitterCtx.DeleteTweetAsync(id); await Task.WhenAll(tasks); }
public async Task DoesSentTweet_ShouldSendTweet() { var tweet = await _twitterContext.TweetAsync("Test Tweet, Ignore"); Assert.NotNull(tweet); // Clean up if (tweet is not null && tweet.ID is not null) { await _twitterContext.DeleteTweetAsync(tweet.ID); } }
/// <summary> /// Borra un estatus /// </summary> /// <param name="twitterCtx"></param> /// <param name="statusID"></param> /// <returns></returns> public static async Task deleteStatus(TwitterContext twitterCtx, ulong statusID) { try { Status status = await twitterCtx.DeleteTweetAsync(statusID); logger.Info(statusID.ToString() + " deleted."); } catch (Exception ex) { logger.Error("Error deleting " + statusID.ToString() + ": " + ex.ToString()); } }
static async Task DeleteTweetAsync(TwitterContext twitterCtx) { ulong tweetID = 280433519057068033; Status status = await twitterCtx.DeleteTweetAsync(tweetID); if (status != null && status.User != null) { Console.WriteLine( "(" + status.StatusID + ")" + "[" + status.User.UserID + "]" + status.User.ScreenNameResponse + ", " + status.Text + ", " + status.CreatedAt); } }
//We start multiple actions in parallel to delete tweets void EraseTweetsAction(TwitterContext ctx, CancellationToken cancelToken) { int nextTweetID = getNextTweetIDSync(); #if DEBUG_TEST Random rnd = new Random(); #endif //Are we done? while (nextTweetID != Int32.MinValue) { //We can't cancel here, we have already fetched a new ID and if we cancel here it will never be deteled Tweet tweet = tweets[nextTweetID]; //Clear Tweets logic here try { #if DEBUG_TEST Thread.Sleep(sleepFakeWaitMilliseconds); if (rnd.Next() % 3 == 0) // Simulate error { throw new ArgumentNullException(); } else { throw new Exception("Sorry, that page does not exist"); } #else ulong tid = ulong.Parse(tweet.ID); Status ret = ctx.DeleteTweetAsync(tid).Result; if (ret == null) { throw new Exception("Sorry, that page does not exist"); } #endif tweet.Status = STATUS_DELETED; } catch (Exception ex) { if (ex.InnerException != null && ex.InnerException.Message.Contains("Sorry, that page does not exist")) { tweet.Status = STATUS_NOT_FOUND; } else if (ex.InnerException != null && ex.InnerException.Message.Contains("You may not delete another user's status")) { tweet.Status = STATUS_NOT_ALLOWED; } else { tweet.Status = STATUS_ERROR; var tmp = new tweetTJson() { created_at = tweet.Date.ToString("yyyy-MM-dd H:m:s zzz"), id_str = tweet.ID, text = tweet.Text }; lock (_lockerNotDeletedTweetsLst) { notDeletedTweets.Add(tmp); } } } onDeletingTweetUIUpdate(tweet); //We cancel once a tweet is completely handeled, we make sure not to request for a new one if (cancelToken.IsCancellationRequested) { return; } nextTweetID = getNextTweetIDSync(); } }
//We start multiple actions in parallel to delete tweets void EraseTweetsAction(TwitterContext ctx, CancellationToken cancellationToken) { int nextTweetID = getNextTweetIDSync(); #if DEBUG_TEST Random rnd = new Random(); #endif //Are we done? while (nextTweetID != Int32.MinValue) { //We can't cancel here, we have already fetched a new ID and if we cancel here it will never be deteled Tweet tweet = mTweetsCollection[nextTweetID]; //Clear Tweets logic here try { #if DEBUG_TEST Thread.Sleep(sleepFakeWaitMilliseconds); if (rnd.Next() % 3 == 0) // Simulate error { throw new ArgumentNullException(); } else { Exception e = new Exception("Sorry, that page does not exist"); throw new Exception("", e); } #else ulong tid = ulong.Parse(tweet.ID); Status ret = null; DirectMessage ret2 = null; switch (TweetsEraseType) { case ApplicationSettings.EraseTypes.TweetsAndRetweets: ret = ctx.DeleteTweetAsync(tid).Result; break; case ApplicationSettings.EraseTypes.Favorites: ret = ctx.DestroyFavoriteAsync(tid).Result; break; case ApplicationSettings.EraseTypes.DirectMessages: ret2 = ctx.DestroyDirectMessageAsync(tid, true).Result; break; default: break; } #endif tweet.Status = STATUS_DELETED; } catch (Exception ex) { TwitterQueryException exception = ex.InnerException as TwitterQueryException; if (exception != null && exception.StatusCode == System.Net.HttpStatusCode.NotFound) { tweet.Status = STATUS_NOT_FOUND; } else if (exception != null && (exception.StatusCode == System.Net.HttpStatusCode.Unauthorized || exception.StatusCode == System.Net.HttpStatusCode.Forbidden)) { tweet.Status = STATUS_NOT_ALLOWED; } else { tweet.Status = STATUS_ERROR; var tmp = new JsonTweet() { created_at = Helpers.DateTimeToString(tweet.Date), id_str = tweet.ID, text = tweet.Text }; lock (_lockerNotDeletedTweetsLst) { notDeletedTweets.Add(tmp); } } } finally { onDeletedTweetUIUpdate(tweet); } //We cancel once a tweet is completely handeled, we make sure not to request for a new one if (cancellationToken.IsCancellationRequested) { return; } nextTweetID = getNextTweetIDSync(); } }