NSURLは便利。
相変わらずメソッドは多いが今回はおかげで助かっている。
HTMLのパーサはさすがに無いが、
リンク先のパースならば、ソースのデータをエンコードしてから、
まず"href="を探して">"を探す。
で、間のストリングを今のURLと参照する形でNSURLを初期化して文字列として配列に加える。
これを、ソース"href="のレンジが無くなるまで繰り返す。
(以下はここに載せてないオリジナルのメソッドを幾つか使っているので注意が必要)
という感じで、外からはcStringとしてアクセスできるように作った。
載っけたメソッドが核。
で、こいつ↓が結構つかえる人。
NSURL *url= [[NSURL alloc] initWithString:sourceString relativeToURL: ThisURL ];
相対パスも(NSURL*)ThisURLを参照することで絶対パスで返してくれます。
ただし、こんなの↓もリンク先としてパースされてくるので注意が必要。
javascript:location.reload()
エラーハンドリングは今後チクチクやる予定。
たぶん使う人はいないと思いますが、参考までに??
なお、openGLでフォント表示するには、改行をパースしなくてはたぶんできません。
ついでなので、一番下に載っけてみます。
ソースが汚いのと体裁が崩れてるのはご愛嬌で。
使う時は"WebKit.h"をインクルードするのを忘れずに。
-(void)GetDataAndParse:(NSString*)URLStr
{
LINES = [[NSMutableArray alloc] init];
URLS = [[NSMutableArray alloc] init];
ThisURL=[NSURL URLWithString:URLStr];
NSMutableURLRequest *req = [ NSMutableURLRequest requestWithURL : ThisURL];
NSData *data=[ThisURL resourceDataUsingCache:NO];
NSString* HOST=[ThisURL host];
NSString* PATH=[ThisURL relativePath];
CurrentPath=[HOST stringByAppendingPathComponent:PATH];
NSLog(@"currentPath = %@",CurrentPath);
if([data length]>0)
{
NSString *sources=[[[NSString alloc] initWithData:data encoding:NSShiftJISStringEncoding] autorelease];
NSLog(@"%@",sources);
[self makeParsedArrayWithLineBreak:sources];
[self makeParsedArrayWithURL:sources];
}else
{
NSLog(@"NO DATA : %@",URLStr);
}
}
//////////////////////////////
/* PARSE with URL Links. */
//////////////////////////////
-(void)makeParsedArrayWithURL:(NSString*)string
{
NSString* parsedString;
NSString* LinkBegin = [NSString stringWithString:@"href="];
NSString* LinkEnd = [NSString stringWithString:@">"];
NSString* tempStr = [NSString stringWithString:[string description]];
NSRange HREF_Begin_range = [tempStr rangeOfString:LinkBegin];
while(HREF_Begin_range.length > 0)
{
NSString* subString;
NSRange HREF_End_range;
subString = [tempStr substringFromIndex:HREF_Begin_range.location+[LinkBegin length]];
subString = [self cut1stDQ:subString];
HREF_End_range = [subString rangeOfString:LinkEnd];
parsedString = [subString substringToIndex:HREF_End_range.location];
parsedString = [self cutAfter2ndDQ:parsedString];
parsedString = [self toRelURL:parsedString];
tempStr=[subString substringFromIndex:HREF_End_range.location+[LinkEnd length]];
HREF_Begin_range = [tempStr rangeOfString:LinkBegin];
[URLS addObject:parsedString];
NSLog(@"%@",parsedString);
}
}
-(NSString*)toRelURL:(NSString*)sourceString
{
NSURL *url= [[NSURL alloc] initWithString:sourceString relativeToURL: ThisURL ];
return [url absoluteString];
}
//////////////////////////////
/* PARSE with Line Breaks. */
//////////////////////////////
- (void)makeParsedArrayWithLineBreak:(NSString*)string
{
NSString* parsedString;
NSRange range;
NSRange subrange;
int length = [string length];
range = NSMakeRange(0, length);
while(range.length > 0)
{
subrange = [string lineRangeForRange:NSMakeRange(range.location, 0)];
parsedString = [string substringWithRange:subrange];
[LINES addObject:parsedString];
range.location = NSMaxRange(subrange);
range.length -= subrange.length;
}
}
by HIRA