summaryrefslogtreecommitdiff
path: root/SpacesToDasBlog/trunk/src/app/SpacesToDasBlog.Console/SpaceHtmlParser.cs
blob: 6246bf9b71f10a1c366bf67d1b23c0d42eb5766a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.IO;
using System.Net;

namespace SpacesToDasBlog.ConsoleUI {
	public class SpaceHtmlParser {
		public SpaceHtmlParser( string blogUrl ) {
			_blogUrl = blogUrl;
		}

		public string BlogUrl {
			get { return _blogUrl; }
		}

		public DateTime GetEntryDate( string entryId ) {
			return GetEntryDate( entryId, GetPageHtml( entryId ) );
		}

		private static string GetTime( string html ) {
			int start = html.IndexOf( " AM" );
			start = ( start == -1 ) ? html.IndexOf( " PM" ) : start;
			start = start - 7;
			int end = start + 10;

			return html.Substring( start, end - start );
		}

		private static string GetMonthAndYear( string entryId, string responseFromServer ) {
			responseFromServer = responseFromServer.Substring( responseFromServer.IndexOf( "LastMDatecns!" + entryId ), 50 );
			int start = responseFromServer.IndexOf( ">" ) + 1;
			int end = responseFromServer.IndexOf( "<" );
			return responseFromServer.Substring( start, end - start ) + " 2005";
		}

		private static DateTime GetEntryDate( string entryId, string responseFromServer ) {
			string dateTime = GetMonthAndYear( entryId, responseFromServer ) + " " + GetTime( responseFromServer );
			DateTime result;
			if ( DateTime.TryParse( dateTime, out result ) ) {
				return result;
			}
			return DateTime.MinValue;
		}

		private string GetPageHtml( string entryId ) {
			WebResponse response = null;
			StreamReader reader = null;
			string responseFromServer;
			try {
				WebRequest request = WebRequest.Create( _blogUrl + entryId + ".entry" );
				response = request.GetResponse( );
				//Console.WriteLine( ( ( HttpWebResponse )response ).StatusDescription );

				Stream dataStream = response.GetResponseStream( );

				reader = new StreamReader( dataStream );
				responseFromServer = reader.ReadToEnd( );
				//Console.WriteLine( responseFromServer );
			}
			finally {
				if ( reader != null ) {
					reader.Close( );
				}
				if ( response != null ) {
					response.Close( );
				}
			}

			return responseFromServer;
		}

		private string _blogUrl;
	}
}