mirror of
				https://github.com/NicolasConstant/BirdsiteLive
				synced 2025-06-05 21:49:16 +02:00 
			
		
		
		
	better twitter error handling
This commit is contained in:
		| @@ -1,9 +1,11 @@ | |||||||
| using System.Collections.Generic; | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using BirdsiteLive.Common.Settings; | using BirdsiteLive.Common.Settings; | ||||||
| using BirdsiteLive.Statistics.Domain; | using BirdsiteLive.Statistics.Domain; | ||||||
| using BirdsiteLive.Twitter.Extractors; | using BirdsiteLive.Twitter.Extractors; | ||||||
| using BirdsiteLive.Twitter.Models; | using BirdsiteLive.Twitter.Models; | ||||||
|  | using Microsoft.Extensions.Logging; | ||||||
| using Tweetinvi; | using Tweetinvi; | ||||||
| using Tweetinvi.Models; | using Tweetinvi.Models; | ||||||
| using Tweetinvi.Parameters; | using Tweetinvi.Parameters; | ||||||
| @@ -22,25 +24,36 @@ namespace BirdsiteLive.Twitter | |||||||
|         private readonly ITweetExtractor _tweetExtractor; |         private readonly ITweetExtractor _tweetExtractor; | ||||||
|         private readonly ITwitterStatisticsHandler _statisticsHandler; |         private readonly ITwitterStatisticsHandler _statisticsHandler; | ||||||
|         private readonly ITwitterUserService _twitterUserService; |         private readonly ITwitterUserService _twitterUserService; | ||||||
|  |         private readonly ILogger<TwitterTweetsService> _logger; | ||||||
|  |  | ||||||
|         #region Ctor |         #region Ctor | ||||||
|         public TwitterTweetsService(TwitterSettings settings, ITweetExtractor tweetExtractor, ITwitterStatisticsHandler statisticsHandler, ITwitterUserService twitterUserService) |         public TwitterTweetsService(TwitterSettings settings, ITweetExtractor tweetExtractor, ITwitterStatisticsHandler statisticsHandler, ITwitterUserService twitterUserService, ILogger<TwitterTweetsService> logger) | ||||||
|         { |         { | ||||||
|             _settings = settings; |             _settings = settings; | ||||||
|             _tweetExtractor = tweetExtractor; |             _tweetExtractor = tweetExtractor; | ||||||
|             _statisticsHandler = statisticsHandler; |             _statisticsHandler = statisticsHandler; | ||||||
|             _twitterUserService = twitterUserService; |             _twitterUserService = twitterUserService; | ||||||
|  |             _logger = logger; | ||||||
|             Auth.SetApplicationOnlyCredentials(_settings.ConsumerKey, _settings.ConsumerSecret, true); |             Auth.SetApplicationOnlyCredentials(_settings.ConsumerKey, _settings.ConsumerSecret, true); | ||||||
|  |             ExceptionHandler.SwallowWebExceptions = false; | ||||||
|         } |         } | ||||||
|         #endregion |         #endregion | ||||||
|  |  | ||||||
|         public ExtractedTweet GetTweet(long statusId) |         public ExtractedTweet GetTweet(long statusId) | ||||||
|         { |         { | ||||||
|             TweetinviConfig.CurrentThreadSettings.TweetMode = TweetMode.Extended; |             try | ||||||
|             var tweet = Tweet.GetTweet(statusId); |             { | ||||||
|             _statisticsHandler.CalledTweetApi(); |                 TweetinviConfig.CurrentThreadSettings.TweetMode = TweetMode.Extended; | ||||||
|             if (tweet == null) return null; //TODO: test this |                 var tweet = Tweet.GetTweet(statusId); | ||||||
|              return _tweetExtractor.Extract(tweet); |                 _statisticsHandler.CalledTweetApi(); | ||||||
|  |                 if (tweet == null) return null; //TODO: test this | ||||||
|  |                 return _tweetExtractor.Extract(tweet); | ||||||
|  |             } | ||||||
|  |             catch (Exception e) | ||||||
|  |             { | ||||||
|  |                 _logger.LogError(e, "Error retrieving tweet {TweetId}", statusId); | ||||||
|  |                 return null; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public ExtractedTweet[] GetTimeline(string username, int nberTweets, long fromTweetId = -1) |         public ExtractedTweet[] GetTimeline(string username, int nberTweets, long fromTweetId = -1) | ||||||
| @@ -50,22 +63,30 @@ namespace BirdsiteLive.Twitter | |||||||
|             var user = _twitterUserService.GetUser(username); |             var user = _twitterUserService.GetUser(username); | ||||||
|  |  | ||||||
|             var tweets = new List<ITweet>(); |             var tweets = new List<ITweet>(); | ||||||
|             if (fromTweetId == -1) |  | ||||||
|  |             try | ||||||
|             { |             { | ||||||
|                 var timeline = Timeline.GetUserTimeline(user.Id, nberTweets); |                 if (fromTweetId == -1) | ||||||
|                 _statisticsHandler.CalledTimelineApi(); |  | ||||||
|                 if (timeline != null) tweets.AddRange(timeline); |  | ||||||
|             } |  | ||||||
|             else |  | ||||||
|             { |  | ||||||
|                 var timelineRequestParameters = new UserTimelineParameters |  | ||||||
|                 { |                 { | ||||||
|                     SinceId = fromTweetId, |                     var timeline = Timeline.GetUserTimeline(user.Id, nberTweets); | ||||||
|                     MaximumNumberOfTweetsToRetrieve = nberTweets |                     _statisticsHandler.CalledTimelineApi(); | ||||||
|                 }; |                     if (timeline != null) tweets.AddRange(timeline); | ||||||
|                 var timeline = Timeline.GetUserTimeline(user.Id, timelineRequestParameters); |                 } | ||||||
|                 _statisticsHandler.CalledTimelineApi(); |                 else | ||||||
|                 if (timeline != null) tweets.AddRange(timeline); |                 { | ||||||
|  |                     var timelineRequestParameters = new UserTimelineParameters | ||||||
|  |                     { | ||||||
|  |                         SinceId = fromTweetId, | ||||||
|  |                         MaximumNumberOfTweetsToRetrieve = nberTweets | ||||||
|  |                     }; | ||||||
|  |                     var timeline = Timeline.GetUserTimeline(user.Id, timelineRequestParameters); | ||||||
|  |                     _statisticsHandler.CalledTimelineApi(); | ||||||
|  |                     if (timeline != null) tweets.AddRange(timeline); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             catch (Exception e) | ||||||
|  |             { | ||||||
|  |                 _logger.LogError(e, "Error retrieving timeline from {Username}, from {TweetId}", username, fromTweetId); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             return tweets.Select(_tweetExtractor.Extract).ToArray(); |             return tweets.Select(_tweetExtractor.Extract).ToArray(); | ||||||
|   | |||||||
| @@ -1,9 +1,11 @@ | |||||||
| using System.Linq; | using System; | ||||||
|  | using System.Linq; | ||||||
| using BirdsiteLive.Common.Settings; | using BirdsiteLive.Common.Settings; | ||||||
| using BirdsiteLive.Statistics.Domain; | using BirdsiteLive.Statistics.Domain; | ||||||
| using BirdsiteLive.Twitter.Extractors; |  | ||||||
| using BirdsiteLive.Twitter.Models; | using BirdsiteLive.Twitter.Models; | ||||||
|  | using Microsoft.Extensions.Logging; | ||||||
| using Tweetinvi; | using Tweetinvi; | ||||||
|  | using Tweetinvi.Models; | ||||||
|  |  | ||||||
| namespace BirdsiteLive.Twitter | namespace BirdsiteLive.Twitter | ||||||
| { | { | ||||||
| @@ -15,24 +17,34 @@ namespace BirdsiteLive.Twitter | |||||||
|     public class TwitterUserService : ITwitterUserService |     public class TwitterUserService : ITwitterUserService | ||||||
|     { |     { | ||||||
|         private readonly TwitterSettings _settings; |         private readonly TwitterSettings _settings; | ||||||
|         private readonly ITweetExtractor _tweetExtractor; |  | ||||||
|         private readonly ITwitterStatisticsHandler _statisticsHandler; |         private readonly ITwitterStatisticsHandler _statisticsHandler; | ||||||
|  |         private readonly ILogger<TwitterUserService> _logger; | ||||||
|  |  | ||||||
|         #region Ctor |         #region Ctor | ||||||
|         public TwitterUserService(TwitterSettings settings, ITweetExtractor tweetExtractor, ITwitterStatisticsHandler statisticsHandler) |         public TwitterUserService(TwitterSettings settings, ITwitterStatisticsHandler statisticsHandler, ILogger<TwitterUserService> logger) | ||||||
|         { |         { | ||||||
|             _settings = settings; |             _settings = settings; | ||||||
|             _tweetExtractor = tweetExtractor; |  | ||||||
|             _statisticsHandler = statisticsHandler; |             _statisticsHandler = statisticsHandler; | ||||||
|  |             _logger = logger; | ||||||
|             Auth.SetApplicationOnlyCredentials(_settings.ConsumerKey, _settings.ConsumerSecret, true); |             Auth.SetApplicationOnlyCredentials(_settings.ConsumerKey, _settings.ConsumerSecret, true); | ||||||
|  |             ExceptionHandler.SwallowWebExceptions = false; | ||||||
|         } |         } | ||||||
|         #endregion |         #endregion | ||||||
|  |  | ||||||
|         public TwitterUser GetUser(string username) |         public TwitterUser GetUser(string username) | ||||||
|         { |         { | ||||||
|             var user = User.GetUserFromScreenName(username); |             IUser user; | ||||||
|             _statisticsHandler.CalledUserApi(); |             try | ||||||
|             if (user == null) return null; |             { | ||||||
|  |                 user = User.GetUserFromScreenName(username); | ||||||
|  |                 _statisticsHandler.CalledUserApi(); | ||||||
|  |                 if (user == null) return null; | ||||||
|  |             } | ||||||
|  |             catch (Exception e) | ||||||
|  |             { | ||||||
|  |                 _logger.LogError(e, "Error retrieving user {Username}", username); | ||||||
|  |                 return null; | ||||||
|  |             } | ||||||
|  |  | ||||||
|             // Expand URLs |             // Expand URLs | ||||||
|             var description = user.Description; |             var description = user.Description; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user