Hi,
ich habe mal wieder ein Problem, bei welchem ich keine Lösung finde. Ich habe irgendeine Nachrichtenseite. Es kann jede auf der Welt sein. Diese Seite lade ich in meine App. Nun muss ich irgendwie an den Text rankommen. Das heißt, mich interessiert nicht die ganze Seite sondern nur der Nachrichtentext und da liegt das Problem. Wie in aller Welt bekomme ich den? Ich habe zwar folgenden Algorithmus geschrieben aber der ist auch nicht das gelbe vom Ei. Wenn jetzt zwischen den Text ein Bild oder ein Video kommt, dann aber der Text weiter geht dann schneidet der mir den Text ab dem Video ab. Was auch nicht Sinn und Zweck ist. Weiterhin wenn am Anfang statt am Ende die ganzen Social Buttons wie Facebook, Twitter und Co stehen werden die auch mit reingenommen. Auch nicht ideal. Jemand eine Idee, wie ich das lösen kann?
Ich selber finde mein Code, den ich da geschrieben habe grauenvoll und das ist mehr Lücken flickerei aber irgendwie habe ich keine andere Idee. Ich habe schon versucht anhand der HTML-Tags das herauszubekommen aber das geht genauso wenig, denn jede Seite ist anders und der Text fängt mit mehreren Tags an und hört dann wieder auf, dann kommt Skript und dann fängt der Text wieder an.
Ich bin am verzweifeln! Gibt es da irgendwas, was ein diese Arbeit abnimmt?
Hier mein Code:
Alles anzeigen
Viele Grüße
Nils
ich habe mal wieder ein Problem, bei welchem ich keine Lösung finde. Ich habe irgendeine Nachrichtenseite. Es kann jede auf der Welt sein. Diese Seite lade ich in meine App. Nun muss ich irgendwie an den Text rankommen. Das heißt, mich interessiert nicht die ganze Seite sondern nur der Nachrichtentext und da liegt das Problem. Wie in aller Welt bekomme ich den? Ich habe zwar folgenden Algorithmus geschrieben aber der ist auch nicht das gelbe vom Ei. Wenn jetzt zwischen den Text ein Bild oder ein Video kommt, dann aber der Text weiter geht dann schneidet der mir den Text ab dem Video ab. Was auch nicht Sinn und Zweck ist. Weiterhin wenn am Anfang statt am Ende die ganzen Social Buttons wie Facebook, Twitter und Co stehen werden die auch mit reingenommen. Auch nicht ideal. Jemand eine Idee, wie ich das lösen kann?
Ich selber finde mein Code, den ich da geschrieben habe grauenvoll und das ist mehr Lücken flickerei aber irgendwie habe ich keine andere Idee. Ich habe schon versucht anhand der HTML-Tags das herauszubekommen aber das geht genauso wenig, denn jede Seite ist anders und der Text fängt mit mehreren Tags an und hört dann wieder auf, dann kommt Skript und dann fängt der Text wieder an.
Ich bin am verzweifeln! Gibt es da irgendwas, was ein diese Arbeit abnimmt?
Hier mein Code:
C-Quellcode
- -(NSString *)stringWithoutHTMLContentWithString:(NSString *)htmlString AndTextDescription:(NSString *)textDescription {
- NSAttributedString *attributedTextString = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:nil error:nil];
- NSMutableString *normalString = [[NSMutableString alloc] init];
- NSString *scannerString = [attributedTextString string];
- scannerString = [scannerString stringByReplacingOccurrencesOfString:@"•\n\t" withString:@""];
- scannerString = [scannerString stringByReplacingOccurrencesOfString:@"\n\t\t" withString:@""];
- scannerString = [scannerString stringByReplacingOccurrencesOfString:@"•\t\n" withString:@""];
- scannerString = [scannerString stringByReplacingOccurrencesOfString:@"•\t\n\t" withString:@""];
- scannerString = [scannerString stringByReplacingOccurrencesOfString:@"\n\n\n" withString:@"//n//n//n "];
- scannerString = [scannerString stringByReplacingOccurrencesOfString:@"\n\n\n\n" withString:@"//n//n//n//n"];
- scannerString = [scannerString stringByReplacingOccurrencesOfString:@"\n\n" withString:@"//n//n"];
- scannerString = [scannerString stringByReplacingOccurrencesOfString:@"◦" withString:@""];
- NSScanner *textScanner = [[NSScanner alloc] initWithString:scannerString];
- [textScanner scanUpToString:textDescription intoString:nil];
- [textScanner scanString:textDescription intoString:nil];
- while (![textScanner isAtEnd]) {
- NSString *scentences;
- [textScanner scanUpToCharactersFromSet:[NSCharacterSet characterSetWithCharactersInString:@",.!?"] intoString:&scentences];
- if (scentences && ![scentences isEqualToString:@""]) {
- if (scentences.length >= 300) {
- break;
- } else if ([scentences componentsSeparatedByString:@"\n"].count > 1 && [[scentences componentsSeparatedByString:@"\n"] objectAtIndex:0].length < 10 && ![[[scentences componentsSeparatedByString:@"\n"] objectAtIndex:0] isEqualToString:@"\""]) {
- break;
- }
- NSString *tag;
- [textScanner scanCharactersFromSet:[NSCharacterSet characterSetWithCharactersInString:@",.!?"] intoString:&tag];
- [normalString appendString:scentences];
- if (![tag isEqualToString:@","]) {
- [normalString appendString:@"."];
- [normalString appendString:@" "];
- }
- }
- }
- return normalString;
- }
Nils