public async Task <RetrieveTweetsResult> RetrieveTweetsAsync(TwitterOptions options, string key) { var result = new RetrieveTweetsResult(); var tweetList = new List <TweetStruct>(); if (!string.IsNullOrEmpty(options.Username) && !string.IsNullOrEmpty(options.TwitterConsumerKey) && !string.IsNullOrEmpty(options.TwitterConsumerSecret)) { var bearerToken = ObtainBearerToken(options.TwitterConsumerKey, options.TwitterConsumerSecret); var timelineUrl = string.Format("https://api.twitter.com/1.1/statuses/user_timeline.json?exclude_replies={0}&screen_name={1}", !options.ShowReplies ? "true" : "false", Uri.EscapeDataString(options.Username)); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(timelineUrl); request.Headers.Add("Authorization", "Bearer " + bearerToken); request.Method = "GET"; request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; request.AutomaticDecompression = DecompressionMethods.GZip; WebResponse response = await request.GetResponseAsync(); string responseData = await new StreamReader(response.GetResponseStream()).ReadToEndAsync(); var fromJsonArray = JsonConvert.DeserializeObject <IEnumerable <TwitterJson> >(responseData); string[] hashtagFilter = null; if (!string.IsNullOrEmpty(options.HashTagsFilter)) { hashtagFilter = options.HashTagsFilter.Split(','); } var tweets = from tweet in fromJsonArray where // Hashtags (hashtagFilter == null || (hashtagFilter != null && hashtagFilter.Any(p => tweet.text.Contains(p)))) && // Show replies (options.ShowReplies || String.IsNullOrEmpty(tweet.in_reply_to_screen_name)) select new TweetStruct() { Message = tweet.text, Username = tweet.user.screen_name, Avatar = tweet.user.profile_image_url, Timestamp = (DateTime.ParseExact(tweet.created_at, "ddd MMM dd HH:mm:ss %zzzz yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal)).ToFriendlyDate(), Id = tweet.id_str }; tweetList.AddRange(tweets.Take(options.Count > 0 ? options.Count : 10)); } result.Tweets = tweetList; result.DateTimeExecuted = DateTime.Now; result.IsSuccessful = true; result.Settings = options; return(result); }
public async Task <RetrieveTweetsResult> RetrieveCachedTweetsAsync() { var key = Globals.CacheKey + TwitterOptions.Username + "_RetrieveTweets"; var result = new RetrieveTweetsResult(); try { if (!_cache.TryGetValue(key, out result)) { result = await TwitterService.RetrieveTweetsAsync(TwitterOptions, key); _cache.Set(key, result, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(TwitterOptions.CacheMinutes))); } } catch (Exception ex) { result.Exception = ex; Log.LogError(ex, "Error occurred in RetrieveTweets()."); } return(result); }