-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWebParser.m
More file actions
102 lines (76 loc) · 3.12 KB
/
Copy pathWebParser.m
File metadata and controls
102 lines (76 loc) · 3.12 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//
// Schedule.m
// hppletest
//
// Created by Evgeny Lavrik on 9/21/11.
// Copyright 2011 Sitronics Telecom Solutions. All rights reserved.
//
#import "WebParser.h"
#import "Day.h"
#import "Event.h"
#import "TFHpple.h"
#import "TFHppleElement.h"
#import "News.h"
@interface WebParser (hidden)
+ (Event*)getEventFromElements:(NSArray *)elements withPosition:(NSUInteger) position;
@end
@implementation WebParser
+ (NSArray*)getScheduleByURL:(NSString*) url
{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:data];
NSArray *elements = [xpathParser searchWithXPathQuery:@"//div[@class='dayCell'] | //div[@class='dayItem']/b | //div[@class='dayItem']/sup/u"];
for (id element in elements) {
NSLog(@"%@", element);
}
NSMutableArray *days = [[[NSMutableArray alloc] init] autorelease];
for (int i = 0; i < [elements count]; i++)
{
if ((i + 2) > [elements count])
break;
if([[[elements objectAtIndex:i] tagName] isEqualToString:@"div"])
{
Day *day = [[[Day alloc] initWithDay:(uint)[[[elements objectAtIndex:i]content] doubleValue]] autorelease];
[days addObject:day];
int offset = 0;
while(([[[elements objectAtIndex:i + offset + 1] tagName] isEqualToString:@"b"]))
{
Event *event = [self getEventFromElements:elements withPosition:i + offset];
[day.events addObject:event];
offset += 4;
if ((i + 2 + offset) > [elements count])
break;
}
i += offset;
}
}
[xpathParser release];
return days;
}
+ (Event*)getEventFromElements:(NSArray *)elements withPosition:(NSUInteger) position
{
Event *event = [[[Event alloc] init] autorelease];
event.startTime = [NSString stringWithFormat:@"%@:%@", [[elements objectAtIndex:position+1] content], [[elements objectAtIndex:position+2] content]];
event.endTime = [NSString stringWithFormat:@"%@:%@", [[elements objectAtIndex:position+3] content], [[elements objectAtIndex:position+4] content]];
return event;
}
+ (NSArray*)getNewsByURL:(NSString*) url
{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:data];
NSArray *elements = [xpathParser searchWithXPathQuery:@"//div[@class='blogdate'] | //div[@class='blogtext']/a"];
NSMutableArray* news = [[[NSMutableArray alloc] init] autorelease];
for (int i = 0; i < [elements count]; i+=2)
{
if ((i + 2) > [elements count])
break;
News* item = [[[News alloc] init] autorelease];
item.head = [[elements objectAtIndex:i] content];
item.body = [[elements objectAtIndex:i+1] content];
item.href = [url stringByAppendingString:[[[elements objectAtIndex:i+1] attributes] valueForKey:@"href"]];
[news addObject:item];
}
[xpathParser release];
return news;
}
@end