そのため、ユーザーのツイートを表形式で表示するアプリを作成しています。ただし、(") や絵文字などの単一の文字のみを表示するなど、一部のツイートで何かが破損していることがあります。ツイートの例:
RT @jakemillermusic: Everyone upload your pics that you took today during the ustream and caption it "follow @jakemillermusic #jakemiller"
NSLog で表示すると、次のように出力されます。
2013-04-03 00:34:30.476 ParsingXMLTutorial[3308:c07] RT @jakemillermusic: ustream で今日撮った写真をみんなでアップロードしてキャプションを付けて
2013-04-03 00:34:30.476 ParsingXMLTutorial[3308:c07]」
2013-04-03 00:34:30.477 ParsingXMLTutorial[3308:c07] @jakemillermusic #jakemiller に従ってください
2013-04-03 00:34:30.478 ParsingXMLTutorial[3308:c07]」
XML 形式を取得するために使用している URL は次のとおりです。
解析コードは次のとおりです。
-(id) loadXMLByURL:(NSString *)urlString
{
_tweets = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
//string = [string stringByReplacingOccurrencesOfString:@" " withString:@""]; // space
string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""]; // newline
string = [string stringByReplacingOccurrencesOfString:@"\t" withString:@""];
currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"status"])
{
currentTweet = [Tweet alloc];
isStatus = YES;
}
if ([elementname isEqualToString:@"user"])
{
isStatus = NO;
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (isStatus)
{
if ([elementname isEqualToString:@"created_at"])
{
currentTweet.dateCreated = currentNodeContent;
}
if ([elementname isEqualToString:@"text"])
{
currentTweet.content = currentNodeContent;
}
}
if ([elementname isEqualToString:@"status"])
{
[self.tweets addObject:currentTweet];
currentTweet = nil;
currentNodeContent = nil;
}
}
@end