Mini Kabibi Habibi
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.Script.Serialization;
using System.Globalization;
public class Tweet {
public DateTime TweetDate { get; set; }
public string TimePassed {
get {
var time = DateTime.Now - TweetDate;
if(time.Days > 1)
return time.Days + " days";
if(time.Days == 1)
return time.Days + " day";
if(time.Hours > 1)
return time.Hours + " hours";
if(time.Hours == 1)
return time.Hours + " hour";
if(time.Minutes > 1)
return time.Minutes + " minutes";
if(time.Hours == 1)
return time.Minutes + " minute";
if(time.Seconds > 1)
return time.Minutes + " seconds";
if(time.Seconds == 1)
return time.Minutes + " second";
return string.Empty;
}
}
public string Text { get; set; }
public string UserName { get; set; }
public string UserImageUrl { get; set; }
}
public static class TweetProviderMock {
static string simplifiedJSONResponce = @"
{
""query"":"""",
""results"":[ {
""created_at"":""Mon, 21 May 2012 05:18:26 +0000"",
""from_user"":""Alex Skorkin"",
""profile_image_url"":""Widgets\/Images\/Twitter\/users\/AlexSkorkin.png"",
""text"":""@devexpress Welcome to DevExpress Support Center 2.0""
}, {
""created_at"":""Mon, 21 May 2012 05:18:26 +0000"",
""from_user"":""Mehul Harry"",
""profile_image_url"":""Widgets\/Images\/Twitter\/users\/MehulHarry.png"",
""text"":""Vote for DevExpress in Code Project Reader's 2012 Choice Awards""
}, {
""created_at"":""Mon, 21 May 2012 05:18:26 +0000"",
""from_user"":""DevExpress"",
""profile_image_url"":""Widgets\/Images\/Twitter\/users\/DevExpress.png"",
""text"":""Consolidating Duplicate Code in Visual Studio – Easy with CodeRush""
}, {
""created_at"":""Mon, 21 May 2012 05:18:26 +0000"",
""from_user"":""Azret Botash"",
""profile_image_url"":""Widgets\/Images\/Twitter\/users\/AzretBotash.png"",
""text"":""Building iOS Web Apps with ASP.NET http://dxpr.es/wR1Hej ""
}, {
""created_at"":""Mon, 21 May 2012 05:18:26 +0000"",
""from_user"":""Dave Mendlen"",
""profile_image_url"":""Widgets\/Images\/Twitter\/users\/DaveMendlen.png"",
""text"":""DevExpress tools upgrade focuses on touch development.""
}],
""results_per_page"":6,
""since_id"":0,
""since_id_str"":""0""
}";
public static IEnumerable<Tweet> GetTweets() {
return TwitterUtils.ConvertTimeline(TwitterUtils.ParseJSON(simplifiedJSONResponce));
}
}
public static class TweetProvider {
static string requestNear = "http://search.twitter.com/search.json?q={0}&rpp=3&geocode={1},{2},1mi&include_entities=true&with_twitter_user_id=true&result_type=mixed";
public static IEnumerable<Tweet> GetTweets(string latitude, string longitude) {
return TwitterUtils.ConvertTimeline(TwitterUtils.MakeApiCall(string.Format(requestNear, "", latitude, longitude)));
}
}
public static class TwitterUtils {
public static object MakeApiCall(string url) {
var req = HttpWebRequest.Create(url);
using(var stream = req.GetResponse().GetResponseStream())
using(var reader = new StreamReader(stream, Encoding.UTF8)) {
string jsonResponce = reader.ReadToEnd();
return ParseJSON(jsonResponce);
}
}
public static object ParseJSON(string json) {
return new JavaScriptSerializer().DeserializeObject(json);
}
public static IEnumerable<Tweet> ConvertTimeline(object raw) {
var list = new List<Tweet>();
try {
var results = (raw as Dictionary<string, object>)["results"] as IEnumerable;
foreach(var tweet in results) {
var tuplet = tweet as Dictionary<string, object>;
list.Add(new Tweet {
TweetDate = ParseDate(Convert.ToString(tuplet["created_at"])),
Text = Convert.ToString(tuplet["text"]),
UserName = Convert.ToString(tuplet["from_user"]),
UserImageUrl = Convert.ToString(tuplet["profile_image_url"])
});
if(list.Count >= 6) break;
}
} catch {
}
return list;
}
public static DateTime ParseDate(string raw) {
return DateTime.ParseExact(raw, "ddd, dd MMM yyyy HH:mm:ss zzz", new CultureInfo("en-US"));
}
}