2012. 3. 5. 17:53ㆍ제2외국어/iOS
(1)에서 Hpple을 사용하기 위한 셋팅을 끝냈고, (2)에서는 Hpple을 대충 사용해보겠습니다.
자 목표는 제가 NBA를 좋아하는 관계로 NBA-동부의 순위를 가져오는걸 목표로 진행하겠습니다.
[준비물]
1. NBA 팀별 순위가 적혀있는 URL ( 네이버 사랑합니다. )
http://news.naver.com/sports/index.nhn?category=nba&ctg=record&mod=team_record
2. HTML 소스를 보게 하는 브라우저들
모든 브라우저는 [ 오른쪽 버튼 -> 요소 검사 ] 를 통해 HTML 소스를 볼 수 있습니다만!!
제가 추천하는 브라우저는 FireFox + 파폭의 부가기능 중 Auto Pager 라는 기능입니다.
( 이유는 나중에 알 수 있습니다. )
3. 난해한 제 글을 이해할 수 있는 수준의 지능입니다.
[ 시작하기 ]
(1)번에서 셋팅한 프로젝트를 그대로 진행하겠습니다.
ViewController.h 에
#import "TFHpple.h" 를 추가합니다
그리고 ViewController.m 에 함수를 하나 만들고 뷰가 로드될때 부르겠습니다.
/////////////////////////////////////////////////////////////////////////////////////////////////
-(void)UseOfHpple
{
NSString *_URL = [NSString stringWithContentsOfURL:
[NSURL URLWithString:@"http://news.naver.com/sports/index.nhn?category=nba&ctg=record&mod=team_record"]encoding:NSUTF8StringEncoding error:nil ];
NSData *htmlData = [_URL dataUsingEncoding:NSUTF8StringEncoding];
if (htmlData != nil) {
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlData];
NSArray *parserArray = [xpathParser search:@"//div[@id='content']/table/tbody/tr/td/table/tbody/tr/td[1]"];
TFHppleElement *element = [parserArray objectAtIndex:0];
for(int i=0; i<[parserArray count]; i++)
{
NSLog(@"%@", [element content]);
}
}
else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"연결 실패"
message:@"데이터를 가져올 수 없습니다."
delegate:self cancelButtonTitle:@"확인" otherButtonTitles:nil];
[alert show];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self UseOfHpple];
}
/////////////////////////////////////////////////////////////////////////////////////////////////
소스를 대충 살펴보시면
NSString의 URL을 인코딩하여 NSData로
Hpple을 사용해서 HTML 데이터로 변환하고
파서를 사용하여 (구문 분석 -> 사용) Element로 쪼개서 뿌려줍니다.
xPath구문에 대한 정보 : http://www.w3schools.com/xpath/xpath_syntax.asp
소스는 간단한데!
xPath 구문을 분석하고 사용하는게 제일 귀찮습니다.
이 때 파폭의 위력이 나타납니다.
//div[@id='content']/table/tbody/tr/td/table/tbody/tr/td[1]
위와 같이 복잡한 구문을 어떻게 뽑았는지 보겠습니다.
준비물에 있었던 것 처럼
파이어폭스깔고 --> 부가기능 (Auto Pager) 를 설치하면
파이어폭스에서 오른쪽 버튼을 눌렀을 경우 다음과 같이 나옮니다.
1. Auto Pager --> XPath Utils --> Create XPath
2. (-- ing)
2. 원하는 항목 ( 전 팀명만 원하기 때문에 대표적으로 앞에 있는 '시카고'를 선택했습니다.)
(빨간색 태두리로 범위를 알 수 있습니다.)
3. (2)에서 선택하면 이렇게 됩니다.
[ 이쪽이 우리가 원하는 정보 ]
Content XPath 를 보면
목록이 뜨는데
목록을 눌러보면
Result from: ~~ 에
(목록에서) 선택한 구문의 결과가 뜨게됩니다.
이걸 보시면 팀명만 나온 구문을 얻을 수 있습니다.
//div[@id='content']/table/tbody/tr/td/table/tbody/tr/td[1] GET!!
아.... 힘들게 다 했는데!!
결과창을 돌려봤지만 되지를 않는군요
디버깅 결과 http://news.naver.com/sports/index.nhn?category=nba&ctg=record&mod=team_record 이 URL을
(네이버 전체가 안되는 줄 알았지만, 네이버 홈페이지는 되고, 뉴스 페이지 부터 저 인코딩으로는 되지 않습니다. )
뭐 이 방법을 사용해서 다른 URL에서 사용하시기 바랍니다.
PS. 해결법 알려주세요.
'제2외국어 > iOS' 카테고리의 다른 글
[UIView] 애니메이션효과 주기 (6) | 2012.04.05 |
---|---|
[iOS]UIColor, RGB값 간단히 Macro로 사용하기 (1) | 2012.03.20 |
[iOS] Html 파서, Hpple사용하기 (1) (1) | 2012.03.05 |
[Storyboard] Segue 로 페이지 전환 (소스로) (2) | 2011.12.09 |
iPhone 계산기만들기(3) (0) | 2011.12.06 |