コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }