public List<Tweet> FetchTweets() { string data = Query(); if (string.IsNullOrWhiteSpace(data)) return null; List<Tweet> fresh = new List<Tweet>(); JavaScriptSerializer serializer = new JavaScriptSerializer(); Dictionary<string, object> parsed = serializer.Deserialize<Dictionary<string, object>>(data); long tempId; if (long.TryParse(parsed["max_id"].ToString(), out tempId) && tempId > maxId) maxId = tempId; if (parsed.ContainsKey("results")) { ArrayList results = parsed["results"] as ArrayList; foreach (object o in results) { Dictionary<string, object> r = o as Dictionary<string, object>; if (r.ContainsKey("from_user") && r["from_user"].ToString() == "WarframeAlerts") { if (r.ContainsKey("created_at") && r.ContainsKey("id") && r.ContainsKey("from_user_id") && r.ContainsKey("text")) { Tweet tweet = new Tweet(); tweet.Created = DateTime.Parse(r["created_at"].ToString()); tweet.Id = Convert.ToInt64(r["id"].ToString()); tweet.Author = r["from_user"].ToString(); tweet.AuthorId = Convert.ToInt64(r["from_user_id"].ToString()); tweet.Text = r["text"].ToString(); fresh.Add(tweet); } } } } if (fresh.Count > 0) return fresh; return null; }
/// <summary> /// Checks for new tweets and returns them in a list if any are found. /// </summary> /// <param name="fetchAll">Specifies whether all tweets should be collected or just unread tweets.</param> /// <param name="limit">Specifies the maximum amount of tweets that will be collected.</param> public List<Tweet> FetchTweets(bool fetchAll, int limit = 15) { string url = String.Format("{0}&rpp={1}", queryUrl, limit); if (fetchAll && maxId != -1) url += "&since_id=" + maxId.ToString(); string data = client.DownloadString(HttpUtility.UrlPathEncode(url)); if (string.IsNullOrWhiteSpace(data)) return null; List<Tweet> fresh = new List<Tweet>(); Dictionary<string, object> parsed = serializer.Deserialize<Dictionary<string, object>>(data); long tempId; if (parsed.ContainsKey("max_id") && long.TryParse(parsed["max_id"].ToString(), out tempId) && tempId > maxId) maxId = tempId; if (parsed.ContainsKey("results")) { ArrayList results = parsed["results"] as ArrayList; foreach (object o in results) { Dictionary<string, object> r = o as Dictionary<string, object>; if (r.ContainsKey("from_user") && r["from_user"].ToString() == "WarframeAlerts") { if (r.ContainsKey("created_at") && r.ContainsKey("id") && r.ContainsKey("from_user_id") && r.ContainsKey("text")) { Tweet tweet = new Tweet(); tweet.Created = DateTime.Parse(r["created_at"].ToString()); tweet.Id = Convert.ToInt64(r["id"].ToString()); tweet.Author = r["from_user"].ToString(); tweet.AuthorId = Convert.ToInt64(r["from_user_id"].ToString()); tweet.Text = r["text"].ToString(); fresh.Add(tweet); } } } } lastQuery = DateTime.Now; return fresh; }