서버간 데이터 교환 XML-RPC(MetaWeblog)
DAUM BLOG API
Protocols
The DAUM BLOG API is currently implemented for XML-RPC
Methods
- daum.blog.newPost.execute : 새 글 등록
Parameters
- daumid (string) : 다음 사용자 ID
- password (string) : 다음 사용자 PASSWORD
- subject (string) : 글 제목
- body (string) : 글 내용
- tag (string) : 이 글에 대한 태그 (카테고리)
- date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
- (string) : 등록된 글 번호.
- daumid (string) : 다음 사용자 ID
- daum.blog.editPost.execute : 글 수정
Parameters
- daumid (string) : 다음 사용자 ID
- password (string) : 다음 사용자 PASSWORD
- articleno (string) : 글 번호
- subject (string) : 글 제목
- body (string) : 글 내용
- tag (string) : 이 글에 대한 태그 (카테고리)
- date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
- (boolean) : 성공 여부.
- daumid (string) : 다음 사용자 ID
- daum.blog.newComment.execute : 의견 등록
Parameters
- daumid (string) : 다음 사용자 ID
- password (string) : 다음 사용자 PASSWORD
- articleno (string) : 의견을 등록할 글 번호
- name (string) : 작성자 이름
- email (string) : 작성자 이메일
- comment (string) : 의견 내용
- date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
- (boolean) : 등록 여부.
- daumid (string) : 다음 사용자 ID
- daum.blog.newTrackback.execute : 트랙백 등록
Parameters
- daumid (string) : 다음 사용자 ID
- password (string) : 다음 사용자 PASSWORD
- articleno (string) : 트랙백을 걸 글 번호
- url (string) : 트랙백 핑 URL
- title (string) : 트랙백 제목
- blogname (string) : 트랙백을 건 블로그 이름
- excerpt (string) : 트랙백을 건 글의 요약
- date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
- (boolean) : 등록 여부.
- daumid (string) : 다음 사용자 ID
- daum.blog.newPosts.execute : 새 글 복수 등록 (최대 100개)
Parameters
- daumid (string) : 다음 사용자 ID
- password (string) : 다음 사용자 PASSWORD
- article list (array) : 글 리스트
- subject (string) : 글 제목
- body (string) : 글 내용
- tag (string) : 글에 대한 태그 (카테고리)
- subject (string) : 글 제목
- date (string) : 글 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
- comment list (array) : 의견 리스트
- name (string) : 의견 작성자 이름
- email (string) : 의견 작성자 이메일
- comment (string) : 의견 내용
- date (string) : 의견 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
- name (string) : 의견 작성자 이름
- trackback list (array) : 트랙백 리스트
- url (string) : 트랙백 핑 URL
- title (string) : 트랙백 제목
- blogname (string) : 트랙백을 건 블로그 이름
- excerpt (string) : 트랙백을 건 글의 요약
- date (string) : 트랙백 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
- url (string) : 트랙백 핑 URL
- comment list (array) : 의견 리스트
- (boolean) : 등록 여부.
- daumid (string) : 다음 사용자 ID
xml rpc 를 통한 daum blog 에 글 등록 하기
phpschool 의 fguy 님의 daum blog api 를 참고하여 작성하였습니다.
http://www2.phpschool.com/bbs2/inc_view.html?id=12080&code=tnt2&start=0&mode=search&field=title&search_name=&operator=and&period=all&category_id=&s_que=daum
api 는 올려주셨는데 사용법이 없어 올려 보았습니다.
0. 본 문서는 www.phpschool.com 의 tip&tech 게시판에 게시하며 작성자의 허락없이 무단 배포를 금지합니다.
xml 과 http 이해가 가능한자를 기본으로 작성하였습니다.
1. xmlrpc 란 무엇인가?
기존 서버-서버 간 또는 서버-클라이언트간 의 통신에서
form 을 이용한 방식은 페이지를 여러번 거쳐 request - response 를 반복해야하는 단점이 있고
socket 을 이용한 response - request 로 한 페이지 안에서 처리 할 수도 있지만
이 역시 각 서버(업체)마다 서로 상이한 response 결과가
발생하여 이를 다시 파싱하여 프로그램 하기에는 많은 노력이 필요했습니다.
여기에서 나온 대안이 표준문서인 xml 을 이용하는 것이며
xml 중 xmlrpc 방식의 전송규약(protocal) 을 이용하여 서버의 메소드에 바로 접근하는 것이라고
간단히 생각하면 될것 같습니다.
결과적으로 돌아가는 방식은
서버로 내용(xml)을 전송(POST)하여 그 결과(xml)를 받아 오는 방식으로
socket 이나 html - form 을 이용하는 것과 같다고 볼 수 있습니다.
다만 여기서 보내고 받는 방식에 통일된 전송규약(xmlrpc)을 두었다고 생각하면 될것 같습니다.
2. xmlrpc 의 이용 예제
이를 위해 xmlrpc-server 중 공개되어 있는 daum blog 를 이용하여
원격으로 (다음 사이트에 로긴하여 form 을 이용하여 직접입력하지 않고)
daum blog 에 글을 올리는 예제 입니다.
만약 daum 뿐만 아니라 기타 여러 사이트가 xmlrpc server 를 열어 준다면
개인서버등에서 한번의 입력만으로 여러 사이트에 동시에 글을 올리고
그 결과를 쉽게 받아 올 수 있을 것입니다.
(물론 여러 사이트에 한번에 글을 등록하기 위해서 기존에 http - form 이나 socket 을 사용하여 올릴 수도 있습니다.)
xmlrpc 를 이용하기 위해서 먼저 php 가 xml 과 xmlrpc 함수를 지원하도록 컴파일 되어 있어야 합니다.
(xml, xmlrpc 함수가 지원되지 않을때는 socket 과 문자열 파싱의 노가다로 해결 할 수도 있습니다.)
xmlrpc 관련함수는 --with-xmlrpc 로 컴파일시 xmlrpc-server 관련 함수는 기본 지원되나
xmlrpc-client 관련 함수는 지원되지 않으므로 http://sourceforge.net/projects/phpxmlrpc/ 에서 배포하고 있습니다.
fguy 님의 daum blog api 중 발췌
=======================================
Protocols
The DAUM BLOG API is currently implemented for XML-RPC
URI
All XML-RPC requests should go to the following URI: http://blog.daum.net/_blog/XMLRPC.do
Method
daum.blog.newPost.execute : 새 글 등록
daumid (string) : 다음 사용자 ID
password (string) : 다음 사용자 PASSWORD
subject (string) : 글 제목
body (string) : 글 내용
tag (string) : 이 글에 대한 태그 (카테고리)
date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
Return
(string) : 등록된 글 번호.
=======================================
위와 같은 daum blog api 가 공개 되었습니다. 이를 이용하여 글등록을 해보도록 하겠습니다.
아래의 소스는 http://sourceforge.net/projects/phpxmlrpc/ 의 배포파일내의 client.php 를 참조한 것입니다.
<?php
include("xmlrpc.inc"); // http://sourceforge.net/projects/phpxmlrpc/ 의 배포파일에 포함 되어 있음...
$userID = "XXXXXX";
$userPW = "XXXXXX";
$subject= "xml rpc input test";
$body = "Hello XMLRPC";
$tag = "daum tag";
$f = new xmlrpcmsg("daum.blog.newPost.execute",
array( new xmlrpcval($userID, "string"),
new xmlrpcval($userPW, "string"),
new xmlrpcval($subject, "string"),
new xmlrpcval($body, "string"),
new xmlrpcval($tag, "string"),
new xmlrpcval(date("c"), "string") )
);
//print "<PRE>다음으로 보내지는 데이터 원본:<BR>" . htmlentities($f->serialize()) . "</PRE>\n"; // 보내는 메세지 출력
$c = new xmlrpc_client("/_blog/XMLRPC.do", "blog.daum.net", 80);
//$c->setDebug(1); // debug 메세지 출력( daum 에서 보내주는 결과값 )
$r = $c->send($f);
$v = $r->value();
if(!$r->faultCode()) {
print "다음 등록 글 번호 : " . ($v->scalarval()) . "<BR>";
print "<a href=\"http://blog.daum.net/" . $userID . "/" . $v->scalarval() . "\">글보기</a><br>";
}
else {
print "Fault: ";
print "Code: " . htmlspecialchars($r->faultCode()) . "<br>";
print "Reason '" . htmlspecialchars($r->faultString()) . "'<BR>";
}
?>
위와 같이 하시면 다음 블로그에 글이 등록된 결과를 확인 하실 수 있을 겁니다.
3. 참고
http://www.xmlrpc.com/spec
http://xmlrpc-epi.sourceforge.net
시간이 없어 xmlrpc.inc 에 문자열 인코딩 부분을 확인 하지 못해 한글 입력은 현재 바로 사용하시면 깨져서 들어 갈 것입니다.
처리 하신 분들은 댓글로 부탁드려요 ^^;
________________________________________________________________________________________________
하나 더
PHP로 XML-RPC 사용하기
Edd Dumbill는 PHP용 XML-RPC 모듈을 만들었다. 모듈은 UsefulInc XML-RPC website에서 구할 수 있다.
파일을 내려받아 압축을 푼 다음, xmlrpc.inc와 xmlrpcs.inc 의 두 파일을 PHP 스크립트와 같은 디렉토리에 복사하면 된다.
10.1. PHP 클라이언트
다음의 스크립트는 웹페이지에 XML-RPC 호출 루틴을 추가하는 방법을 보여준다.
<html> <head> <title>XML-RPC PHP Demo</title> </head> <body> <h1>XML-RPC PHP Demo</h1> <?php include 'xmlrpc.inc'; // Make an object to represent our server. $server = new xmlrpc_client('/api/sample.php', 'xmlrpc-c.sourceforge.net', 80); // Send a message to the server. $message = new xmlrpcmsg('sample.sumAndDifference', array(new xmlrpcval(5, 'int'), new xmlrpcval(3, 'int'))); $result = $server->send($message); // Process the response. if (!$result) { print "<p>Could not connect to HTTP server.</p>"; } elseif ($result->faultCode()) { print "<p>XML-RPC Fault #" . $result->faultCode() . ": " . $result->faultString(); } else { $struct = $result->value(); $sumval = $struct->structmem('sum'); $sum = $sumval->scalarval(); $differenceval = $struct->structmem('difference'); $difference = $differenceval->scalarval(); print "<p>Sum: " . htmlentities($sum) . ", Difference: " . htmlentities($difference) . "</p>"; } ?> </body></html> |
웹서버에서 PHP 스크립트가 실행되지 않는다면 PHP 웹사이트를 참조하라.
10.2. PHP 서버
다음의 스크립트는 PHP를 이용하여 XML-RPC 서버에 적용하는 방법을 보여준다.
<?php include 'xmlrpc.inc'; include 'xmlrpcs.inc'; function sumAndDifference ($params) { // Parse our parameters. $xval = $params->getParam(0); $x = $xval->scalarval(); $yval = $params->getParam(1); $y = $yval->scalarval(); // Build our response. $struct = array('sum' => new xmlrpcval($x + $y, 'int'), 'difference' => new xmlrpcval($x - $y, 'int')); return new xmlrpcresp(new xmlrpcval($struct, 'struct')); } // Declare our signature and provide some documentation. // (The PHP server supports remote introspection. Nifty!) $sumAndDifference_sig = array(array('struct', 'int', 'int')); $sumAndDifference_doc = 'Add and subtract two numbers'; new xmlrpc_server(array('sample.sumAndDifference' => array('function' => 'sumAndDifference', 'signature' => $sumAndDifference_sig, 'docstring' => $sumAndDifference_doc))); ?> |
위의 스크립트를 웹서버에서 http://localhost/path/sumAndDifference.php와 같은 방식으로 실행시킬 수 있다.
[출처] XML-RPC PHP로 사용하기|작성자 뎅구르르
________________________________________________________________________________________________
하나 더
include 된 inc 파일
여기저기 있던 소스들을 긁어 모아 바로 사용 할 수 있도록 정리 하였습니다..
클라이언트 측 파일
<?php
include 'xmlrpc.inc';
$mode = base64_encode("$mode"); // 한글 깨짐 방지를 위해 인코딩
$message = new xmlrpcmsg('content.xmlrpc_board',array(new xmlrpcval($mode, 'base64')));
// Make an object to represent our server.
$server = new xmlrpc_client("/xmlrpc.php", "xxxx.com", 80);
//$server->setDebug(1);
$result = $server->send($message);
// Process the response.
if (!$result) {
print "<p>Could not connect to HTTP server.</p>";
} elseif ($result->faultCode()) {
print "<p>XML-RPC Fault #" . $result->faultCode() . ": " .
$result->faultString();
} else {
$struct = $result->value();
$mode_val = $struct->structmem('mode');
$mode = base64_decode($mode_val->scalarval());
echo $mode;
}
?>
서버측 파일
<?php
include 'xmlrpc.inc';
include 'xmlrpcs.inc';
function xmlrpc_board ($params) {
$mode_val = $params->getParam(0);
$mode = $mode_val->scalarval();
$rv_mode = base64_decode($mode); //서버에서 받을 때 디코딩
$struct = array('mode' => new xmlrpcval($mode,'base64'));
return new xmlrpcresp(new xmlrpcval($struct, 'struct'));
}
new xmlrpc_server(array('content.xmlrpc_board' => array('function' => 'xmlrpc_board')));
?>
http://urin79.com/zb/376485
'컴퓨터 > 언어,프로그래밍' 카테고리의 다른 글
php에서 문자열 처리함수와 파일처리함수 (0) | 2008.11.03 |
---|---|
MetaWeblog API 사용하기 (0) | 2008.10.23 |
상태표시줄에 링크표시 감추는 스크립트 (0) | 2008.07.25 |
여러줄의 내용을 한줄만 보여주며 자동스크롤 되는 스크립트 (0) | 2008.06.29 |
자바스크립트로 클립보드에 내용저장하기 (0) | 2008.06.21 |