아이폰을 사용하다 보면 티스토리 글목록을 아이폰내 UITableView에서 보여 주고 제목 클릭 시 내용을 보여주는 경우를 보게된다. 이번 독도 어플 개발 중 서문 등 내용을 보여주기 위해 이 부분을 공부해 보았다.
검색력도 딸리고 티스토리에서는 글 작성 API는 제공하는데 글목록을 다른데 못가져가게 해놨는지 ㅠㅠ
어쨋든 최후의 수단으로 HTML을 파싱하게 되었다.
뭐 잘 찾아보면 더 좋은 수가 있겠지만 이 방법은 표준에 준하는 각종 게시판들을 내 어플에 녹일 수 있는 방법을 제공하므로 차후에 방명록에서도 유용하게 쓰일 수 있겠다.
1. xcode에서 HTML을 파싱하기 위한 API 추가
: hpple 를 사용했음
코드 조각이라는 블러그에 정리가 잘 되어 있음
http://www.codeme.co.kr/103
- Posted by cerd -
2. 이 때 HTML 파싱을 위해 XPath란 것이 사용됨
XPath 에 관한 사용법 : http://www.w3schools.com/XPath/xpath_syntax.asp
3. XPath를 뽑아내기 위해 영문을 읽다보니 머리에 쥐가나서 검색 중 firfox를 사용하는 방법 발견!
http://www.lovelgw.com/Blog/232
- Author : 근원e -
위의 방법들을 조합하여 아이폰내에 독도와 관련한 카테고리만 표출 성공!!
혹시 링크가 깨지거나 작성자분이 지울 수 있으므로 원문도 복사해서 올립니다.
1번 항목
두가지를 잘 조합하면 성공!
검색력도 딸리고 티스토리에서는 글 작성 API는 제공하는데 글목록을 다른데 못가져가게 해놨는지 ㅠㅠ
어쨋든 최후의 수단으로 HTML을 파싱하게 되었다.
뭐 잘 찾아보면 더 좋은 수가 있겠지만 이 방법은 표준에 준하는 각종 게시판들을 내 어플에 녹일 수 있는 방법을 제공하므로 차후에 방명록에서도 유용하게 쓰일 수 있겠다.
1. xcode에서 HTML을 파싱하기 위한 API 추가
: hpple 를 사용했음
코드 조각이라는 블러그에 정리가 잘 되어 있음
http://www.codeme.co.kr/103
- Posted by cerd -
2. 이 때 HTML 파싱을 위해 XPath란 것이 사용됨
XPath 에 관한 사용법 : http://www.w3schools.com/XPath/xpath_syntax.asp
3. XPath를 뽑아내기 위해 영문을 읽다보니 머리에 쥐가나서 검색 중 firfox를 사용하는 방법 발견!
http://www.lovelgw.com/Blog/232
- Author : 근원e -
위의 방법들을 조합하여 아이폰내에 독도와 관련한 카테고리만 표출 성공!!
혹시 링크가 깨지거나 작성자분이 지울 수 있으므로 원문도 복사해서 올립니다.
1번 항목
hpple 다운 : https://github.com/topfunky/hpple3번 항목
참고 : http://stackoverflow.com/questions/405749/parsing-html-on-the-iphone
예제 : 사용 예제
다운 받은 파일에서 아래의 6가지 파일을 프로젝트에 추가.
HTFpple.h/m
HTFppleElement.h/m
XPathQuery.h/m
libxml2 경로를 프로젝트에 추가.
메뉴 > Project > Edit Project Settings > Header Search Paths
${SDKROOT}/usr/include/libxml2를 입력./Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/usr/include/libxml2
libxml2 라이브러리를 프로젝트에 추가.
메뉴 > Project > Edit Project Settings > Other Linker Flags
-lxml2를 입력.
빌드완료 hpple의 사용준비 완료
코드 샘플
NSStringEncoding EUC_KR = -2147481280;NSString *htmlWillInsert = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"주소"] encoding:EUC_KR error:nil];NSData *htmlData = [htmlWillInsert dataUsingEncoding:NSUnicodeStringEncoding];TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlData];NSArray *elements = [xpathParser search:@"xPath구문"]; NSLog(@"%@", elements); for (TFHppleElement *element in elements) { NSLog(@"%@", [element content]);}[xpathParser release];
구글 이미지 파싱하여 원본 링크와 이미지 주소를 얻는 작업중
encoding을 위와 같이 -2147481280으로 했더니 가끔 Unable to Parse가 뜸
EUC_KR 부분을 NSASCIIStringEncoding으로 바꾸니 잘됨.![]()
![]()
가끔 웹 페이지를 파싱하거나 특정 웹 페이지에 값을 파싱해야할 경우가 있습니다. 물론 정규식을 이용해 파싱을 할수 있으나 너무 복잡하고 페이지가 변경될시에 즉각적으로 변경하는데 많은 시간이 걸립니다. 이런 문제를 해결하고 좀더 편리하게 HTML 에 요소들의 값을 가져오기 위해서 PHP DOM 을 이용 할 수 있습니다.
PHP DOM 은 특별히 옵션을 주어 설치하지 않아도 기본적으로 사용할 수 있는 PHP 확장입니다. (--disable-dom 옵션을 주지 않았으면 사용가능)
XPath 란 DOM의 내부를 트리 형태로 접근하기 위한 경로를 지정하는 것입니다. 자세한 설명은 XML XPath 를 따로 다루기로 하겠습니다. ^^ 일단 간단하게 XPath 는 XML의 요소를 접근 하기위한 경로를 표현하는 방식 까지만 알아 두시면 됩니다.
일단 XPath를 사람 손으로 소스를 분석하면서도 알수 있겠지만 Firefox의 부가 기능 중에 하나인 Autopager를 이용해서 손쉽게 XPath를 계산 할 수 있습니다.
AutoPager 부가 기능 다운로드 (https://addons.mozilla.org/en-US/firefox/addon/4925/)부가기능을 설치 하셨으면 내용을 파실할 URL로 이동을 합니다.
이동을 하셨다면 동그라미 안에 십자표시된 아이콘을 눌러 브라우저의 원하는 부분을 선택을 합니다. 선택 한 후에는 Link XPath 부분에 선택된 XPath 및 유사한 XPath 의 일치 사항이 나옵니다 원하는 XPath 값을 선택을 하면 매치된 값이 하단 Results from ... 부분에 나옵니다. 자~ 이제 슬슬 XPath 를 이용해서 값을 추출 해 보겠습니다.
원하시는 값을 출력하는 XPath 를 선택을 해줍니다.
이 예제에서는 //div[@id='content']/div[@class='searchList']/ol/li/a[1] 를 이용하겠습니다.
PHP 에서 이 XPath의 값을 이용해서 값을 추출해 보도록 하겠습니다.01.
/**
02.
* XPath 로 웹 사이트의 데이터 파싱
03.
*/
04.
// DOM Document 로 읽어들일 주소
05.
$strUrl
=
"http://www.lovelgw.com/Blog/search/PHP"
;
06.
07.
// 객체 생성
08.
$oDom
=
new
DOMDocument();
09.
// URL 로드
10.
@
$oDom
->loadHTMLfile(
$strUrl
);
11.
12.
// DOM XPath 객체 생성
13.
$oXPath
=
new
DOMXPath(
$oDom
);
14.
15.
// XPath 표현에 해당하는 값을 가져온다.
16.
$oElement
=
$oXPath
->query(
"//div[@id='content']/div[@class='searchList']/ol/li/a[1]"
);
17.
18.
// 찾아진 횟수만큼 반복한다.
19.
foreach
(
$oElement
as
$key
=>
$oDOMnode
)
20.
{
21.
// $oDOMnode 는 DOMNode 객체임
22.
// nodeValue 는 값을 가지고 옴
23.
echo
$oDOMnode
->nodeValue .
"<br>"
;
24.
25.
// Anchor 테그에서 href 속성의 값을 가지고 옴
26.
echo
$oDOMnode
->getAttribute(
'href'
) .
"<br>"
;
27.
echo
"<br>"
;
28.
}
29.
30.
/**
31.
* 결과
32.
*
33.
2010/06/25 Apache mod_deflate
34.
/Blog/231
35.
36.
2010/06/23 PHP mysql_conenct() Can't connect to local MySQL server through socket '/tmp/mysql.sock' (1)
37.
/Blog/230
38.
39.
2010/06/22 [자축] Atom Home Server 가동 1주년
40.
/Blog/228
41.
42.
2010/06/21 [보안] MySQL 암호화
43.
/Blog/224
44.
45.
2010/06/17 이미지 워터 마크 (PNG Alpha 채널 이용)
46.
/Blog/222
47.
48.
2010/06/16 홈 서버 토렌트 머신
49.
/Blog/221
50.
51.
2010/06/16 PHP Stream 제어
52.
/Blog/217
53.
54.
2010/06/15 MySQL Prepared Statements
55.
/Blog/216
56.
57.
2010/06/04 MySQL 결과 회전
58.
/Blog/205
59.
60.
2010/06/03 PHP 성능향상
61.
/Blog/204
62.
63.
2010/06/02 PHP Session 공유 (memcached 이용)
64.
/Blog/203
65.
66.
*/
참 쉽죠? 위 처럼 PHP DOM을 이용해서 웹 페이지에 원하는 값을 손쉽게 얻어 올 수 있습니다.
정규식을 이용해서 웹 페이지에서 값을 추출하는 것 보다 훨씬 빠르게 , 손쉽게 그리고 정확하게 추출 할 수 있습니다. 웹 페이지 파싱을 PHP DOM을 이용해서 추출 하면 매우 편리하게 원하시는 값을 얻을 수 있습니다. ^^
조금더 윤택한 코딩을 위해~ 하나씩~ 하나씩~ ㅋㅋㅋ
두가지를 잘 조합하면 성공!
반응형
'iPhone > developer' 카테고리의 다른 글
MFMessageComposeViewController를 이용한 app에서 SMS를 보내기 (2) | 2011.04.17 |
---|