Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/ASP.NET/CS/TouchBoard/App_Code/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/ASP.NET/CS/TouchBoard/App_Code/TweetProvider.cs

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"));
    }
}