This repository was archived by the owner on Aug 27, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathMPWFeed.m
148 lines (109 loc) · 4.08 KB
/
MPWFeed.m
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
RSS.m
A class for reading RSS feeds.
Created by Brent Simmons on Wed Apr 17 2002.
Copyright (c) 2002 Brent Simmons. All rights reserved.
Extensively rewritten (almost from scratch) to use MPWXmlKit
by Marcel Weiher
*/
#import "MPWFeed.h"
#import "NSString+extras.h"
#import "mpwfoundation_imports.h"
#import "MPWMAXParser.h"
#import "MPWXmlAttributes.h"
#import "MPWFeedItem.h"
#import "MPWRSSParser.h"
@implementation MPWFeed
objectAccessor( NSDictionary, headerItems, setHeaderItems )
objectAccessor( NSArray, newsItems, setNewsItems )
objectAccessor( NSString, version, setVersion )
// MAX XML parsing callbacks
-(instancetype)initWithVersion:(NSString*)newVersion items:(NSArray*)newItems header:(NSDictionary*)newHeaderItems
{
self=[super init];
[self setVersion:newVersion];
[self setNewsItems:newItems];
[self setHeaderItems:newHeaderItems];
return self;
}
-(Class)feedItemClass { return [MPWFeedItem class]; }
- (instancetype) initWithData: (NSData *) rssData normalize: (BOOL) fl {
id parser =[[[MPWRSSParser alloc] init] autorelease];
[parser setFeedClass:[self class]];
[parser setFeedItemClass:[self feedItemClass]];
[self release];
// NSLog(@"parser feedClass: %@",[parser feedClass]);
self = [[parser parsedData:rssData] retain];
// [self setNewsItems:[NSMutableArray array]];
// [parser parse:rssData];
return (self);
} /*initWithData*/
- (instancetype) initWithURL: (NSURL *) url normalize: (BOOL) fl {
NSData *rssData=[NSData dataWithContentsOfURL:url];
NSAssert1( rssData , @"couldn't load RSS feed '%@'",url);
return [self initWithData: rssData normalize: fl];
}
- (void) dealloc
{
[headerItems release];
[newsItems release];
[version release];
[super dealloc];
}
@end
@interface NSObject(testing)
+frameworkResource:filename category:category;
@end
@implementation MPWFeed(testing)
+(MPWFeed*)_parseTestFeedFile:(NSString*)filename
{
id rssData = [self frameworkResource:filename category:@"rss"];
return [[[self alloc] initWithData:rssData normalize: NO] autorelease];
}
+(void)testMetaobjectHeader
{
NSDictionary *header = [[self _parseTestFeedFile:@"metaobject"] headerItems];
IDEXPECT( [header objectForKey:@"title"], @"metablog" , @"title" );
IDEXPECT( [header objectForKey:@"lastBuildDate"], @"Sun, 20 Apr 2008 21:13:50 +0000" , @"lastBuildDate" );
}
+(void)testMetaobjectNewsItems
{
NSArray *newsItems = [[self _parseTestFeedFile:@"metaobject"] newsItems];
INTEXPECT( [newsItems count], 10 , @"number of news items");
id item1=[newsItems objectAtIndex:0];
IDEXPECT( [item1 title], @"Higher Order Messaging backgrounded" , @"number of news items");
}
+(void)testRevision3Header
{
NSDictionary *header = [[self _parseTestFeedFile:@"revision3-diggnation-quicktime"] headerItems];
NSDictionary *image = [header objectForKey:@"image"];
IDEXPECT( [header objectForKey:@"title"], @"Diggnation (Small Quicktime)" , @"title" );
// NSLog(@"image: %@",image);
IDEXPECT( [image objectForKey:@"url"], @"http://revision3.com/static/images/shows/diggnation/diggnation.jpg", @"image ur");
IDEXPECT( [header objectForKey:@"itunes:explicit"], @"yes", @"itunes:explcit element");
}
+(void)testRevision3NewsItems
{
NSArray *newsItems = [[self _parseTestFeedFile:@"revision3-diggnation-quicktime"] newsItems];
INTEXPECT( [newsItems count], 25 , @"number of news items");
id item1=[newsItems objectAtIndex:0];
IDEXPECT( [item1 title], @"Diggnation - The Crazy Episode Taped Live in New York City" , @"number of news items");
// NSLog(@"item1 remainder: %@",[item1 remainder]);
IDEXPECT( [[[item1 remainder] objectForKey:@"enclosure"] objectForKey:@"url"], @"http://www.podtrac.com/pts/redirect.m4v/bitcast-a.bitgravity.com/revision3/web/diggnation/0154/diggnation--0154--2008-06-12studbeez--small.m4v" , @"enclosure url");
// NSLog(@"newsItems: %@",newsItems);
}
+(void)testVersion
{
IDEXPECT( [[self _parseTestFeedFile:@"metaobject"] version], @"2.0" , @"verison" );
}
+testSelectors
{
return [NSArray arrayWithObjects:
@"testMetaobjectHeader",
@"testMetaobjectNewsItems",
@"testVersion",
@"testRevision3Header",
@"testRevision3NewsItems",
nil];
}
@end