스마트기기개발관련/IOS 개발

iphone 아이폰 개발 - hpple을 이용한 파싱 관련

AlrepondTech 2020. 9. 18. 06:50
반응형

 

 

=================================

=================================

=================================

 

 


출처: http://3am.kr/57


기본적으로 API를 지원해준다면, 아이폰 어플로 제작하여 정보를 나타내기가 비교적 쉽습니다. (쉽다는 이야기는 아님..아우 개발 어려워서 디지겧..ㅠㅠ) 하지만 대부분의 사이트들이 API를 지원해주지 않고, 공부하는 학생이 필요하다고 하여 사이트에 API를 요청하는것도 쉬운일이 아니죠. 그래서 html, xml을 파싱하는 hpple파서를 이용하게 되었고, 그 사용법을 적어보자 합니다. 한글로 설명된 페이지가 별로 없어서 많이 어려웠었는데, 조금이나마 도움이 되었으면 하는 바램이 있네요.

1. hpple 사용을 위한 준비
http://stackoverflow.com/questions/405749/parsing-html-on-the-iphone 
http://blog.objectgraph.com/index.php/2010/02/24/parsing-html-iphone-development/
의 정보를 보고 사용법을 익혔습니다. 안에 예제 소스도 있지요. 이대로 설명 끝! 
이라고 하면 화내실테니. 세세하게 다시 설명해 보겠습니다.

 


제가 아이폰 개발을하면서 배운건 "영어를 무서워 하지 말자" 입니다. 생각보다 쉽습니다.


Project - Edit Project Settings 를 클릭.


4개의 탭 중 Build 를 선택하고 옆의 검색창에 Header Search Path 입력. 밑에 찾아지면 더블클릭.


+ 를 눌러서 추가하여 Recursive 에 체크를 하고 오른쪽에는 ${SDKROOT}/usr/include/libxml2 입력. OK.


 

 

 

 

반응형

 

 

728x90

 

 



아까처럼 Other Linker Flags를 다시 검색하여 더블클릭.



+를 눌러 추가하여 -lxml2 입력. OK!

 

 

hpple-master.zip
0.04MB

 

 


파일 다운로드 후 압축 해제.

프로젝트에 드래그 앤 드롭으로 추가하세요.



Copy에 체크하고 Add.


이렇게 되면 준비는 끝났습니다. 이것을 이용해서 파싱하시면 되는거죠.



2. 예제 실행해보기

위에 링크했던 주소에 보면 예제소스가 있습니다.[다운로드] 열어서 실행해 보시면 제대로 실행이 안될겁니다. (물론 예제는 1번 과정을 하지 않으셔도 됩니다.) 어쩌다 실행이 되는거 같으면서도 또 튕겨버리고 하죠. 저도 이것때문에 많이 헤맸는데, 해결책은 다음과 같습니다.

HtmlParserTestViewController.m 파일을 열어봅니다. viewDidLoad 부분에 파싱하는게 기술되어있는데, 하단에 [htmlData release]; 부분이 있습니다. 이것을 주석처리합니다. 그러면 끝. 



3. 응용하기

http://www.w3schools.com/XPath/xpath_syntax.asp 
를 방문해 보시면 파싱할때 구문을 어떻게 해야하는지 
(NSArray *elements  = [xpathParser search:@"//h3"]; 라인에서 @"//h3"부분) 
기술이 되어 있습니다. 
http://www.w3schools.com/XPath/xpath_examples.asp
이 페이지를 열어보시면 예제들이 있구요. 


4. 응용하기2

htmlString = [[NSString stringWithContentsOfURL:[NSURL URLWithString: @"http://210.115.249.72/domian.asp"] encoding:-2147481280 error:nil] stringByReplacingOccurrencesOfString:@"<br>" withString:@", "];
    htmlString = [htmlString stringByReplacingOccurrencesOfString:@">, " withString:@">"];
    NSData *htmlData = [htmlString dataUsingEncoding:NSUnicodeStringEncoding];
    TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlData];        
    NSArray *elements  = [xpathParser search:@"//table[@width='700']//font"]; 

이 게 제가 다니는 학교의 열람석을 파싱한 예제입니다. 소스가 많이 길어졌는데, 인코딩 문제를 해결해야 했고 <br> 을 제대로 인식하지 못하는 에러가 발생해서 이렇게 고쳐졌습니다. 마지막 라인에 보면 @"//table[@with'700']//font 라인을 통해 가로가 700인 테이블의 모든 소스를 가져왔습니다. elements가 배열로 되어있기 때문에, 일일이 하나씩 찍어보면서 필요한 정보가 있는 변수를 구할 수 있습니다. 이 소스는 손상진님이 도와주셨습니다. (http://lab.sjworks.net/) 


5. 후기
차 일 피일 미루던 포스팅을 드디어 마치네요. 아직도 할 것들이 태산이고, 아이폰 개발은 제게 너무나 어렵습니다.(엉엉) 저처럼 처음 아이폰 개발에 뛰어드신 분들께 이 포스팅이 많이 도움이 되었으면 좋겠다는 바람으로..글을 마칩니다.



덧글은 환영하지만 질문은 좀..ㅠ_ㅠ;; 저도 잘 몰라서..ㅎㅎ

 

 

 

=================================

=================================

=================================

 

 

반응형