Archive Project
This commit is contained in:
54
iLyrics/Magistrix.m
Normal file → Executable file
54
iLyrics/Magistrix.m
Normal file → Executable file
@@ -19,8 +19,8 @@ typedef enum {
|
||||
|
||||
@implementation Magistrix {
|
||||
NSString *query;
|
||||
int loadedResults;
|
||||
int resultCount;
|
||||
NSInteger loadedResults;
|
||||
NSInteger resultCount;
|
||||
NSString *firstPage;
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ typedef enum {
|
||||
-(void) startNewSearchForQuery: (NSString*) q {
|
||||
[self resetLoadedResults];
|
||||
query = q;
|
||||
int site = (loadedResults/10) + 1;
|
||||
NSInteger site = (loadedResults/10) + 1;
|
||||
NSString *searchPath = [NSString stringWithFormat:@"http://www.magistrix.de/lyrics/search?q=%@&page=%i", [query stringByFormattingForURL], site];
|
||||
NSURL *searchURL = [NSURL URLWithString:searchPath];
|
||||
NSError *error;
|
||||
@@ -61,7 +61,7 @@ typedef enum {
|
||||
}
|
||||
|
||||
-(NSArray*) nextResults {
|
||||
int site = (loadedResults/10) + 1;
|
||||
NSInteger site = (loadedResults/10) + 1;
|
||||
NSString *searchPath = [NSString stringWithFormat:@"http://www.magistrix.de/lyrics/search?q=%@&page=%i", [query stringByFormattingForURL] , site];
|
||||
NSURL *searchURL = [NSURL URLWithString:searchPath];
|
||||
NSString *page;
|
||||
@@ -104,13 +104,13 @@ typedef enum {
|
||||
}
|
||||
|
||||
-(SearchResult*) searchResultFromLyricsPage: (NSString *) page atURL: (NSURL *) url{
|
||||
int headingStart = NSMaxRange([page rangeOfString:@"<h1>"]);
|
||||
int headingEnd = [page rangeOfString:@"</h1>"].location;
|
||||
int artistStart = NSMaxRange([page rangeOfString:@">" options:NSCaseInsensitiveSearch range:NSMakeRange(headingStart, headingEnd-headingStart)]);
|
||||
NSInteger headingStart = NSMaxRange([page rangeOfString:@"<h1>"]);
|
||||
NSInteger headingEnd = [page rangeOfString:@"</h1>"].location;
|
||||
NSInteger artistStart = NSMaxRange([page rangeOfString:@">" options:NSCaseInsensitiveSearch range:NSMakeRange(headingStart, headingEnd-headingStart)]);
|
||||
NSRange artistEndTag = [page rangeOfString:@"</a>" options:NSCaseInsensitiveSearch range:NSMakeRange(artistStart, headingEnd-artistStart)];
|
||||
int artistEnd = artistEndTag.location;
|
||||
int songNameStart = NSMaxRange(artistEndTag);
|
||||
int songNameEnd = headingEnd;
|
||||
NSInteger artistEnd = artistEndTag.location;
|
||||
NSInteger songNameStart = NSMaxRange(artistEndTag);
|
||||
NSInteger songNameEnd = headingEnd;
|
||||
NSString *artist = [[page substringWithRange:NSMakeRange(artistStart, artistEnd-artistStart)] stringByRemovingHTMLTags];
|
||||
NSString *songName = [page substringWithRange:NSMakeRange(songNameStart, songNameEnd-songNameStart)];
|
||||
//Remove the " Lyric" and the " – " from the Song name
|
||||
@@ -120,8 +120,8 @@ typedef enum {
|
||||
}
|
||||
|
||||
-(NSArray*) searchResultsFromPage: (NSString *) page {
|
||||
int resultsTableStart = NSMaxRange([page rangeOfString:@"<table>"]);
|
||||
int resultsTableEnd = [page rangeOfString:@"</table>"].location;
|
||||
NSInteger resultsTableStart = NSMaxRange([page rangeOfString:@"<table>"]);
|
||||
NSInteger resultsTableEnd = [page rangeOfString:@"</table>"].location;
|
||||
NSArray *resultTags = [self resultTagsFromTable:[page substringWithRange:NSMakeRange(resultsTableStart, resultsTableEnd-resultsTableStart)]];
|
||||
NSMutableArray *searchResults = [[NSMutableArray alloc] init];
|
||||
for (NSString *tag in resultTags) {
|
||||
@@ -138,8 +138,8 @@ typedef enum {
|
||||
NSMutableArray *tags = [[NSMutableArray alloc] init];
|
||||
NSUInteger currentIndex = [table rangeOfString:@"<td>"].location;
|
||||
while (currentIndex != NSNotFound) {
|
||||
int startIndex = currentIndex + [@"<td>" length];
|
||||
int endIndex = [table rangeOfString:@"</td>" options:NSCaseInsensitiveSearch range:restRange].location;
|
||||
NSInteger startIndex = currentIndex + [@"<td>" length];
|
||||
NSInteger endIndex = [table rangeOfString:@"</td>" options:NSCaseInsensitiveSearch range:restRange].location;
|
||||
NSRange tagRange = NSMakeRange(startIndex, endIndex-startIndex);
|
||||
[tags addObject:[table substringWithRange:tagRange]];
|
||||
restRange = [self restRangeFromString:table subtractingRange:tagRange];
|
||||
@@ -152,20 +152,20 @@ typedef enum {
|
||||
|
||||
-(SearchResult*) searchResultFromResultTag: (NSString *) tag {
|
||||
NSRange artistStartRange = [tag rangeOfString:@">"];
|
||||
int artistEndIndex = [tag rangeOfString:@"<" options:NSCaseInsensitiveSearch range:[self restRangeFromString:tag subtractingRange:artistStartRange]].location;
|
||||
int artistStartIndex = NSMaxRange(artistStartRange);
|
||||
NSInteger artistEndIndex = [tag rangeOfString:@"<" options:NSCaseInsensitiveSearch range:[self restRangeFromString:tag subtractingRange:artistStartRange]].location;
|
||||
NSInteger artistStartIndex = NSMaxRange(artistStartRange);
|
||||
NSString *artist = [[tag substringWithRange:NSMakeRange(artistStartIndex, artistEndIndex-artistStartIndex)] stringByRemovingHTMLTags];
|
||||
NSRange restRange = [self restRangeFromString:tag subtractingRange:NSMakeRange(artistEndIndex, [@"</a>" length])];
|
||||
NSRange songNameTagStartRange = [tag rangeOfString:@"<a href=\"" options:NSCaseInsensitiveSearch range:restRange];
|
||||
int linkStart = NSMaxRange(songNameTagStartRange);
|
||||
NSInteger linkStart = NSMaxRange(songNameTagStartRange);
|
||||
NSRange linkEndRage = [tag rangeOfString:@"\"" options:NSCaseInsensitiveSearch range:[self restRangeFromString:tag subtractingRange:songNameTagStartRange]];
|
||||
NSURL *link = [self urlFromHref:[tag substringWithRange:NSMakeRange(linkStart, linkEndRage.location-linkStart)]];
|
||||
int songNameStart = NSMaxRange([tag rangeOfString:@">" options:NSCaseInsensitiveSearch range:[self restRangeFromString:tag subtractingRange:songNameTagStartRange]]);
|
||||
int songNameEnd = [tag rangeOfString:@"</a>" options:NSCaseInsensitiveSearch range:[self restRangeFromString:tag subtractingRange:songNameTagStartRange]].location;
|
||||
NSInteger songNameStart = NSMaxRange([tag rangeOfString:@">" options:NSCaseInsensitiveSearch range:[self restRangeFromString:tag subtractingRange:songNameTagStartRange]]);
|
||||
NSInteger songNameEnd = [tag rangeOfString:@"</a>" options:NSCaseInsensitiveSearch range:[self restRangeFromString:tag subtractingRange:songNameTagStartRange]].location;
|
||||
NSString *songName = [[tag substringWithRange:NSMakeRange(songNameStart, songNameEnd-songNameStart)] stringByRemovingHTMLTags];
|
||||
int previewStart = songNameEnd + [@"</a>" length] + [@"\n<p>" length];
|
||||
NSInteger previewStart = songNameEnd + [@"</a>" length] + [@"\n<p>" length];
|
||||
NSRange previewRestRange = NSMakeRange(previewStart, [tag length]-previewStart);
|
||||
int previewEnd = [tag rangeOfString:@"</p>" options:NSCaseInsensitiveSearch range:previewRestRange].location;
|
||||
NSInteger previewEnd = [tag rangeOfString:@"</p>" options:NSCaseInsensitiveSearch range:previewRestRange].location;
|
||||
NSString *preview = [[tag substringWithRange:NSMakeRange(previewStart, previewEnd-previewStart)] stringByRemovingHTMLTags];
|
||||
return [[SearchResult alloc] initWithName:songName fromArtist:artist preview:preview link:link loadedByHoster:self];
|
||||
}
|
||||
@@ -180,7 +180,7 @@ typedef enum {
|
||||
|
||||
|
||||
-(NSRange) restRangeFromString: (NSString *) page subtractingRange: (NSRange) aRange {
|
||||
int loc = NSMaxRange(aRange);
|
||||
NSInteger loc = NSMaxRange(aRange);
|
||||
return NSMakeRange(loc, [page length]-loc);
|
||||
}
|
||||
|
||||
@@ -188,14 +188,14 @@ typedef enum {
|
||||
if (resultCount <= 0) {
|
||||
//Nothing loaded before
|
||||
NSRange resultsLabelStartRange = [page rangeOfString:@"<p>Ergebnisse 1 bis "];
|
||||
int resultsLabelEnd = [page rangeOfString:@"</p>" options:NSCaseInsensitiveSearch range:[self restRangeFromString:page subtractingRange:resultsLabelStartRange]].location;
|
||||
NSInteger resultsLabelEnd = [page rangeOfString:@"</p>" options:NSCaseInsensitiveSearch range:[self restRangeFromString:page subtractingRange:resultsLabelStartRange]].location;
|
||||
NSString *resultsLabel = [page substringWithRange:NSMakeRange(NSMaxRange(resultsLabelStartRange), resultsLabelEnd-resultsLabelStartRange.location)];
|
||||
if ([resultsLabel rangeOfString:@"ungefähr"].location != NSNotFound){
|
||||
//Needs not more than 100 which means 10 sites (which is the maximum)
|
||||
resultCount = 100;
|
||||
} else {
|
||||
int resultsStart = NSMaxRange([resultsLabel rangeOfString:@"von "]);
|
||||
int resultsEnd = [resultsLabel rangeOfString:@"<"].location;
|
||||
NSInteger resultsStart = NSMaxRange([resultsLabel rangeOfString:@"von "]);
|
||||
NSInteger resultsEnd = [resultsLabel rangeOfString:@"<"].location;
|
||||
NSString *results = [resultsLabel substringWithRange:NSMakeRange(resultsStart, resultsEnd-resultsStart)];
|
||||
resultCount = [results intValue];
|
||||
}
|
||||
@@ -221,9 +221,9 @@ typedef enum {
|
||||
}
|
||||
|
||||
-(NSString *) lyricsFromPage: (NSString *)page {
|
||||
int lyricsStart = NSMaxRange([page rangeOfString:@"<div id='songtext'>"]) + [@"\n" length];
|
||||
NSInteger lyricsStart = NSMaxRange([page rangeOfString:@"<div id='songtext'>"]) + [@"\n" length];
|
||||
NSRange restRange = NSMakeRange(lyricsStart, [page length]-lyricsStart);
|
||||
int lyricsEnd = [page rangeOfString:@"<div class='clear'></div>" options:NSCaseInsensitiveSearch range:restRange].location;
|
||||
NSInteger lyricsEnd = [page rangeOfString:@"<div class='clear'></div>" options:NSCaseInsensitiveSearch range:restRange].location;
|
||||
NSString *lyrics = [[page substringWithRange:NSMakeRange(lyricsStart, lyricsEnd-lyricsStart)] stringByRemovingHTMLTags];
|
||||
return lyrics;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user