티스토리 뷰
출처 : http://www.xpressengine.com/18413458#one_18413458
- Javascript를 이용하여 JSON 형식으로 가져오기(XE 내부용)
- Javascript를 이용하여 JSON 형식으로 가져오기(단독형)
- PHP를 이용하여 xml-rpc로 XML형식으로 가져오기(XE 내부용)
- PHP를 이용하여 xml-rpc로 XML형식으로 가져오기(단독형)
1. Javascript를 이용하여 JSON 형식으로 가져오기(XE 내부용)
01.
<
script
type
=
"text/javascript"
>
02.
(function($){
03.
$("html").ready(function(){
04.
function insert(msg){
05.
$("#list").html(msg.oDocument.title);
06.
}
07.
$.exec_json("board.dispBoardContentView",{mid:"board",document_srl:"332"}, insert);
08.
});
09.
})(jQuery);
10.
</
script
>
11.
12.
<
div
id
=
"list"
></
div
>
- XE로 HTML이 실행 가능한 곳에 위 소스를 붙여주세요.
(layouts:layout.html, widgets:list.html, skins:list.html 등등..) - common/js/jquery.js, common/js/xml_handler.js의 정보만을 참조하며 jQuery.exec_json();가 xml_handler에 제공 됩니다.
- jQuery.exec_json("모듈.act명",{mid:"board",document_srl:"332",매개변수:"값"....}, 호출함수);
- 첫번째 값은 module=board 과 act=dispBoardContentView 이기에 . 을 구분으로 적어주셔야 합니다.
- 두번째 정보는 그외의 매개변수들 입니다. 대체적으로 mid,document_srl,category_srl 등이 있겠습니다.
- 마지막 값은 정보를 가져온 내용을 어느 Javascript 함수로 넘길지 함수명을 적어주세요.
2. Javascript를 이용하여 JSON 형식으로 가져오기(단독형)
01.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
02.
<
html
lang
=
"ko"
xml:lang
=
"ko"
xmlns
=
"http://www.w3.org/1999/xhtml"
>
03.
<
head
>
04.
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=UTF-8"
/>
05.
<
script
type
=
"text/javascript"
src
=
"common/js/jquery.js"
></
script
>
06.
<
script
type
=
"text/javascript"
src
=
"common/js/xml_handler.js"
></
script
>
07.
<
script
type
=
"text/javascript"
>
08.
var waiting_message = "wait";
09.
var request_uri = "xe/";
10.
11.
(function($){
12.
$("html").ready(function(){
13.
function insert(msg){
14.
$("#list").html(msg.oDocument.title);
15.
}
16.
$.exec_json("board.dispBoardContentView",{mid:"board",document_srl:"197"}, insert);
17.
});
18.
})(jQuery);
19.
</
script
>
20.
</
head
>
21.
<
body
>
22.
<
div
id
=
"list"
></
div
>
23.
<
div
id
=
"waitingforserverresponse"
></
div
>
24.
</
body
>
25.
</
html
>
- 파일의 경로를 xe가 설치되어있는 index.php와 같은 경로에 임의의 api.html로 만들어봅니다.
- 상기 설명했다시피 jquery.js, xml_handler.js 두가지의 정보만을 가지고 같은 형식으로 처리합니다.
- 중요한 내용은 exec_json에서 수행하는 필요조건의 변수가 만들어져있어야 합니다.
waiting_message, request_uri, id="waitingforserverresponse"
확인
상기 1번 확인 내용과 동일 합니다.
3. PHP를 이용하여 xml-rpc로 XML형식으로 가져오기(XE 내부용)
01.
<?php
02.
$uri
=
"http://127.0.0.1/xe/"
;
03.
$body
= '<?xml version=
"1.0"
encoding=
"utf-8"
?>
04.
<methodCall>
05.
<params>
06.
<module><![CDATA[board]]></module>
07.
<act><![CDATA[dispBoardContentView]]></act>
08.
<mid><![CDATA[board]]></mid>
09.
<document_srl><![CDATA[197]]></document_srl>
10.
</params>
11.
</methodCall>';
12.
13.
$buff
= @FileHandler::getRemoteResource(
$uri
,
$body
, 3,
"POST"
,
"application/xml"
);
14.
echo
$buff
;
15.
?>
- 본인이 사용하려는 모듈, 위젯 등에 작성하셔서 확인 합니다.
- 결과물은 XML형식이기 때문에 따로 파싱해서 담으셔야 합니다.(파싱은 알아서...)
- $body의 기본포멧에서 params에 각 매개변수를 입력하고 <![CDATA[값]]> 같이 CDATA 안에 값을 넣어주셔야 합니다.
- FileHandler::getRemoteResource의 구체적인 내용은 (2)에서 설명 하겠습니다.
확인
01.
<
response
>
02.
<
error
>0</
error
>
03.
<
message
>success</
message
>
04.
<
oDocument
>
05.
<
document_srl
>
<![CDATA[197]]>
</
document_srl
>
06.
<
category_srl
>
<![CDATA[0]]>
</
category_srl
>
07.
<
is_secret
>
<![CDATA[N]]>
</
is_secret
>
08.
<
nick_name
>
<![CDATA[관리자]]>
</
nick_name
>
09.
<
user_id
>
<![CDATA[admin]]>
</
user_id
>
10.
<
user_name
>
<![CDATA[관리자]]>
</
user_name
>
11.
<
title
>
<![CDATA[aefawfasd]]>
</
title
>
12.
<
content
>
<![CDATA[<p> fasfasfasf<img editor_component="image_link" src="fil
13.
es/attach/images/58/197/n.ep%200168.JPG" alt="n.ep_0168.JPG" width="1280" height
14.
="720" />
15.
</p>]]>
</
content
>
16.
<
tags
>
<![CDATA[]]>
</
tags
>
17.
<
voted_count
>
<![CDATA[0]]>
</
voted_count
>
18.
<
blamed_count
>
<![CDATA[0]]>
</
blamed_count
>
19.
<
comment_count
>
<![CDATA[0]]>
</
comment_count
>
20.
<
regdate
>
<![CDATA[20090729222342]]>
</
regdate
>
21.
<
last_update
>
<![CDATA[20090729222342]]>
</
last_update
>
22.
<
extra_vars
>
23.
</
extra_vars
>
24.
</
oDocument
>
25.
</
response
>
이런식으로 정보를 가져 옵니다. 가져온 정보를 활용하실려면 파싱이 필요하겠죠.
4. PHP를 이용하여 xml-rpc로 XML형식으로 가져오기(단독형)
01.
<?php
02.
// _XE_PATH_ 생성
03.
define(
"_XE_PATH_"
,
str_replace
(
"api.php"
,
""
,
str_replace
(
"\\", "
/",
__FILE__
)));
04.
// FileHandler(PEAR,Socket) 등을 사용하기 위해서 XE 정보를 선언
05.
define(
"__ZBXE__"
, true);
06.
require_once
(_XE_PATH_.
"config/config.inc.php"
);
07.
08.
$uri
=
"http://127.0.0.1/xe/"
;
09.
$body
= '<?xml version=
"1.0"
encoding=
"utf-8"
?>
10.
<methodCall>
11.
<params>
12.
<module><![CDATA[board]]></module>
13.
<act><![CDATA[dispBoardContentView]]></act>
14.
<mid><![CDATA[board]]></mid>
15.
<document_srl><![CDATA[197]]></document_srl>
16.
</params>
17.
</methodCall>';
18.
19.
$buff
= @FileHandler::getRemoteResource(
$uri
,
$body
, 3,
"POST"
,
"application/xml"
);
20.
echo
$buff
;
21.
?>
- 파일의 경로를 xe가 설치되어있는 index.php와 같은 경로에 임의의 api.php로 만들어봅니다.
- FileHandler.class.php의 getRemoteResource를 사용하기 위해서 XE에서 기본적으로 사용되는 함수를 가져와야 합니다.
(거의 다 가져오게 됩니다.)
- 중요한 내용은 FileHandler::getRemoteResource에서 수행하는 필요조건의 값들이 선언되어 있어야 합니다.
_XE_PATH_, __ZBXE__, config.inc.php, Handler.class.php, FileHandler.class.php
- 단독형 내용은 웹처리, shell 스크립트처리에서도 모두 가능합니다.
참고자료
- SOL님의 SMS로 XE 게시판에 글쓰기 http://sol.textyle.kr/23984
- 뎅ㅇㅣ님의 XE - JSON 모듈 만들기 http://wannabewize.tistory.com/89
- Hide_D님 board.api.php 사용법 http://www.xpressengine.com/18405009
(2) 항목에서는 좀 더 고급단계로 아래 항목에 대해 설명하겠습니다.
board.api.php 흐름이해
FileHandler::getRemoteResource 구조(간단히)
header 선언, blogapi 애드온으로 metaWeblog 글 입력하기
api 처리용 셈플 모듈 만들어보기
SOL님의 도움으로 연구 끝에 어느정도 알아내서 팁으로 남겨 봅니다.(까먹기전에)
XE의 강의 및 팁이 많지만 API에 대한 구현 등에 대해서는 미지의 세계 마냥 정보가 보이질 않습니다.
제가 nmsXE의 nms.socket.php 내에서 api 통신 구현해보면서 감잡은 내용을 간략하게 설명해보았습니다.
제가 구현한 내용은 nmsXE:nms.socket.php 에 있으니 관심있으신 분들은 참고해보세요.(shell 백그라운드용 입니다.)
- 안내
- 궁금한 점을 댓글로 남겨주시면 답변해 드립니다.