Mini Kabibi Habibi

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

Imports Microsoft.VisualBasic
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Net
Imports System.Text
Imports System.Web
Imports System.Web.Script.Serialization
Imports System.Globalization

Public Class Tweet
	Private privateTweetDate As DateTime
	Public Property TweetDate() As DateTime
		Get
			Return privateTweetDate
		End Get
		Set(ByVal value As DateTime)
			privateTweetDate = value
		End Set
	End Property
	Public ReadOnly Property TimePassed() As String
		Get
			Dim time = DateTime.Now - TweetDate
			If time.Days > 1 Then
				Return time.Days & " days"
			End If
			If time.Days = 1 Then
				Return time.Days & " day"
			End If
			If time.Hours > 1 Then
				Return time.Hours & " hours"
			End If
			If time.Hours = 1 Then
				Return time.Hours & " hour"
			End If
			If time.Minutes > 1 Then
				Return time.Minutes & " minutes"
			End If
			If time.Hours = 1 Then
				Return time.Minutes & " minute"
			End If
			If time.Seconds > 1 Then
				Return time.Minutes & " seconds"
			End If
			If time.Seconds = 1 Then
				Return time.Minutes & " second"
			End If
			Return String.Empty
		End Get
	End Property
	Private privateText As String
	Public Property Text() As String
		Get
			Return privateText
		End Get
		Set(ByVal value As String)
			privateText = value
		End Set
	End Property
	Private privateUserName As String
	Public Property UserName() As String
		Get
			Return privateUserName
		End Get
		Set(ByVal value As String)
			privateUserName = value
		End Set
	End Property
	Private privateUserImageUrl As String
	Public Property UserImageUrl() As String
		Get
			Return privateUserImageUrl
		End Get
		Set(ByVal value As String)
			privateUserImageUrl = value
		End Set
	End Property
End Class
Public NotInheritable Class TweetProviderMock
	Private Shared simplifiedJSONResponce As String = "" & ControlChars.CrLf & "            {" & ControlChars.CrLf & "	            ""query"":""""," & ControlChars.CrLf & "	            ""results"":[	{" & ControlChars.CrLf & "		            ""created_at"":""Mon, 21 May 2012 05:18:26 +0000""," & ControlChars.CrLf & "		            ""from_user"":""Alex Skorkin""," & ControlChars.CrLf & "		            ""profile_image_url"":""Widgets\/Images\/Twitter\/users\/AlexSkorkin.png""," & ControlChars.CrLf & "		            ""text"":""@devexpress Welcome to DevExpress Support Center 2.0""" & ControlChars.CrLf & "	            }, {" & ControlChars.CrLf & "		            ""created_at"":""Mon, 21 May 2012 05:18:26 +0000""," & ControlChars.CrLf & "		            ""from_user"":""Mehul Harry""," & ControlChars.CrLf & "		            ""profile_image_url"":""Widgets\/Images\/Twitter\/users\/MehulHarry.png""," & ControlChars.CrLf & "		            ""text"":""Vote for DevExpress in Code Project Reader's 2012 Choice Awards""" & ControlChars.CrLf & "	            }, {" & ControlChars.CrLf & "		            ""created_at"":""Mon, 21 May 2012 05:18:26 +0000""," & ControlChars.CrLf & "		            ""from_user"":""DevExpress""," & ControlChars.CrLf & "		            ""profile_image_url"":""Widgets\/Images\/Twitter\/users\/DevExpress.png""," & ControlChars.CrLf & "		            ""text"":""Consolidating Duplicate Code in Visual Studio – Easy with CodeRush""" & ControlChars.CrLf & "	            }, {" & ControlChars.CrLf & "		            ""created_at"":""Mon, 21 May 2012 05:18:26 +0000""," & ControlChars.CrLf & "		            ""from_user"":""Azret Botash""," & ControlChars.CrLf & "		            ""profile_image_url"":""Widgets\/Images\/Twitter\/users\/AzretBotash.png""," & ControlChars.CrLf & "		            ""text"":""Building iOS Web Apps with ASP.NET http://dxpr.es/wR1Hej """ & ControlChars.CrLf & "	            }, {" & ControlChars.CrLf & "		            ""created_at"":""Mon, 21 May 2012 05:18:26 +0000""," & ControlChars.CrLf & "		            ""from_user"":""Dave Mendlen""," & ControlChars.CrLf & "		            ""profile_image_url"":""Widgets\/Images\/Twitter\/users\/DaveMendlen.png""," & ControlChars.CrLf & "		            ""text"":""DevExpress tools upgrade focuses on touch development.""" & ControlChars.CrLf & "	            }]," & ControlChars.CrLf & "	            ""results_per_page"":6," & ControlChars.CrLf & "	            ""since_id"":0," & ControlChars.CrLf & "	            ""since_id_str"":""0""" & ControlChars.CrLf & "            }"
	Private Sub New()
	End Sub
	Public Shared Function GetTweets() As IEnumerable(Of Tweet)
		Return TwitterUtils.ConvertTimeline(TwitterUtils.ParseJSON(simplifiedJSONResponce))
	End Function
End Class
Public NotInheritable Class TweetProvider
	Private Shared requestNear As String = "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"
	Private Sub New()
	End Sub
	Public Shared Function GetTweets(ByVal latitude As String, ByVal longitude As String) As IEnumerable(Of Tweet)
		Return TwitterUtils.ConvertTimeline(TwitterUtils.MakeApiCall(String.Format(requestNear, "", latitude, longitude)))
	End Function
End Class
Public NotInheritable Class TwitterUtils
	Private Sub New()
	End Sub
	Public Shared Function MakeApiCall(ByVal url As String) As Object
		Dim req = HttpWebRequest.Create(url)
		Using stream = req.GetResponse().GetResponseStream()
		Using reader = New StreamReader(stream, Encoding.UTF8)
			Dim jsonResponce As String = reader.ReadToEnd()
			Return ParseJSON(jsonResponce)
		End Using
		End Using
	End Function
	Public Shared Function ParseJSON(ByVal json As String) As Object
		Return New JavaScriptSerializer().DeserializeObject(json)
	End Function
	Public Shared Function ConvertTimeline(ByVal raw As Object) As IEnumerable(Of Tweet)
		Dim list = New List(Of Tweet)()
		Try
			Dim results = TryCast((TryCast(raw, Dictionary(Of String, Object)))("results"), IEnumerable)
			For Each tweet In results
				Dim tuplet = TryCast(tweet, Dictionary(Of String, Object))
				list.Add(New Tweet With {.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 Then
					Exit For
				End If
			Next tweet
		Catch
		End Try
		Return list
	End Function
	Public Shared Function ParseDate(ByVal raw As String) As DateTime
		Return DateTime.ParseExact(raw, "ddd, dd MMM yyyy HH:mm:ss zzz", New CultureInfo("en-US"))
	End Function
End Class