본문 바로가기

컴퓨터/언어,프로그래밍

서버간 데이터 교환 XML-RPC(MetaWeblog)

서버간 데이터 교환 XML-RPC(MetaWeblog)

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


 

Methods

  • daum.blog.newPost.execute : 새 글 등록
    Parameters
    1. daumid (string) : 다음 사용자 ID
    2. password (string) : 다음 사용자 PASSWORD
    3. subject (string) : 글 제목
    4. body (string) : 글 내용
    5. tag (string) : 이 글에 대한 태그 (카테고리)
    6. date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
    Return
    • (string) : 등록된 글 번호.

  • daum.blog.editPost.execute : 글 수정
    Parameters
    1. daumid (string) : 다음 사용자 ID
    2. password (string) : 다음 사용자 PASSWORD
    3. articleno (string) : 글 번호
    4. subject (string) : 글 제목
    5. body (string) : 글 내용
    6. tag (string) : 이 글에 대한 태그 (카테고리)
    7. date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
    Returns
    • (boolean) : 성공 여부.

  • daum.blog.newComment.execute : 의견 등록
    Parameters
    1. daumid (string) : 다음 사용자 ID
    2. password (string) : 다음 사용자 PASSWORD
    3. articleno (string) : 의견을 등록할 글 번호
    4. name (string) : 작성자 이름
    5. email (string) : 작성자 이메일
    6. comment (string) : 의견 내용
    7. date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
    Returns
    • (boolean) : 등록 여부.

  • daum.blog.newTrackback.execute : 트랙백 등록
    Parameters
    1. daumid (string) : 다음 사용자 ID
    2. password (string) : 다음 사용자 PASSWORD
    3. articleno (string) : 트랙백을 걸 글 번호
    4. url (string) : 트랙백 핑 URL
    5. title (string) : 트랙백 제목
    6. blogname (string) : 트랙백을 건 블로그 이름
    7. excerpt (string) : 트랙백을 건 글의 요약
    8. date (string) : 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
    Returns
    • (boolean) : 등록 여부.

  • daum.blog.newPosts.execute : 새 글 복수 등록 (최대 100개)
    Parameters
    1. daumid (string) : 다음 사용자 ID
    2. password (string) : 다음 사용자 PASSWORD
    3. article list (array) : 글 리스트
      1. subject (string) : 글 제목
      2. body (string) : 글 내용
      3. tag (string) : 글에 대한 태그 (카테고리)
    4. date (string) : 글 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
      1. comment list (array) : 의견 리스트
        1. name (string) : 의견 작성자 이름
        2. email (string) : 의견 작성자 이메일
        3. comment (string) : 의견 내용
        4. date (string) : 의견 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')
      2. trackback list (array) : 트랙백 리스트
        1. url (string) : 트랙백 핑 URL
        2. title (string) : 트랙백 제목
        3. blogname (string) : 트랙백을 건 블로그 이름
        4. excerpt (string) : 트랙백을 건 글의 요약
        5. date (string) : 트랙백 작성일자 (ISO8601 형식. yyyy-MM-dd'T'HH:mm:ss'Z')

    Returns
    • (boolean) : 등록 여부.



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 에 문자열 인코딩 부분을 확인 하지 못해 한글 입력은 현재 바로 사용하시면 깨져서 들어 갈 것입니다.
       처리 하신 분들은 댓글로 부탁드려요 ^^;


출처 : http://www.phpschool.com/bbs2/inc_view.html?id=12238&code=tnt2&start=0&mode=&field=&search_name=&operator=&period=&category_id=&s_que=


________________________________________________________________________________________________

하나 더


PHP로 XML-RPC 사용하기

Edd Dumbill는 PHP용 XML-RPC 모듈을 만들었다. 모듈은 UsefulInc XML-RPC website에서 구할 수 있다.

파일을 내려받아 압축을 푼 다음, xmlrpc.incxmlrpcs.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와 같은 방식으로 실행시킬 수 있다. 




________________________________________________________________________________________________

하나 더




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
제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...