티스토리 뷰
출처 : 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.<?php02.$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="fil13.es/attach/images/58/197/n.ep%200168.JPG" alt="n.ep_0168.JPG" width="1280" height14.="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.<?php02.// _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 백그라운드용 입니다.)
- 안내
- 궁금한 점을 댓글로 남겨주시면 답변해 드립니다.