public ActionResult PostTweet(string tweetText) { if (string.IsNullOrEmpty(tweetText)) { logger.Error("Null or empty string for post stt"); TempData["Error"] = "Null or empty string for post stt"; return(RedirectToAction("Index")); } else { TweetOutModel tweetOut = new TweetOutModel() { Content = tweetText }; try { TweetInModel tweetIn = TwitterService.PostTweet(tweetOut); TweetsModel.Tweets.Insert(0, tweetIn); } catch (Exception ex) { if (ex.Message.Contains("Twitter")) { logger.Error(ex.Message); TempData["Error"] = ex.Message; } else { throw; } } return(RedirectToAction("Index")); } }
/// <summary> /// Get user timeline /// </summary> /// <param name="count"> num of tweets to get, max 200, must larger than 0 </param> /// <returns> the string response from Twitter: /// success: return the list of tweets /// fail: error code /// </returns> public static IList <TweetInModel> GetTweets(int count, string max_id) { IList <TweetInModel> tweets = new List <TweetInModel>(); string resourceUrl = "https://api.twitter.com/1.1/statuses/user_timeline.json"; var requestParameters = new Dictionary <string, string>(); if (count > 0) { requestParameters.Add("count", count.ToString()); } else { throw new ArgumentException("GetTweets, count must larger than zero"); } if (!string.IsNullOrEmpty(max_id)) { requestParameters.Add("max_id", max_id); } var request = helper.CreateRequest(resourceUrl, HttpMethod.Get, requestParameters); var response = helper.GetResponse(request); if (response.Contains("error")) { dynamic error = JsonConvert.DeserializeObject(response); throw new Exception(error.massage); } else { dynamic timeline = JsonConvert.DeserializeObject(response); foreach (var tweet in timeline) { TweetInModel model = ConvertToTweetModel(tweet); tweets.Add(model); } } return(tweets); }
/// <summary> /// convert from dynamic to tweet model /// </summary> /// <param name="tweet"></param> /// <returns></returns> private static TweetInModel ConvertToTweetModel(dynamic tweet) { if (tweet == null) { throw new ArgumentNullException("tweet"); } TweetInModel model = new TweetInModel(); model.Id = ((dynamic)tweet).id.ToString(); model.AuthorName = ((dynamic)tweet).user.name; model.AuthorUrl = ((dynamic)tweet).user.url; model.Content = ((dynamic)tweet).text; string publishedDate = ((dynamic)tweet).created_at; publishedDate = publishedDate.Substring(0, 19); model.Published = DateTime.ParseExact(publishedDate, "ddd MMM dd HH:mm:ss", null); model.ProfileImage = ((dynamic)tweet).user.profile_image_url; return(model); }
/// <summary> /// /// </summary> /// <param name="tweetText"></param> /// <returns></returns> public static TweetInModel PostTweet(TweetOutModel outTweet) { if (outTweet == null) { throw new ArgumentNullException("outTweet"); } if (string.IsNullOrEmpty(outTweet.Content)) { throw new ArgumentException("PostTweet, text to post can not null or empty"); } string resourceUrl = "https://api.twitter.com/1.1/statuses/update.json"; var requestParameters = new Dictionary <string, string>(); requestParameters.Add("status", (outTweet.Content)); var request = helper.CreateRequest(resourceUrl, HttpMethod.Post, requestParameters); var response = helper.GetResponse(request); if (response.Contains("error")) { dynamic error = JsonConvert.DeserializeObject(response); ErrorModel errorModel = new ErrorModel(); foreach (var item in error.errors) { errorModel.Code = ((dynamic)item).code; errorModel.Message = ((dynamic)item).message; } throw new HttpException("Twitter error return: " + errorModel.Message); } dynamic tweetIn = JsonConvert.DeserializeObject(response); TweetInModel model = ConvertToTweetModel(tweetIn); return(model); }