본문 바로가기

컴터/php

[php로 원격전송]네이버가 XML-RPC 이제서야 지원합니다.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.





http://section.blog.naver.com/sub/NoticeTip.nhn?board=/read/1000003488/10000000000003416054
http://section.blog.naver.com/sub/NoticeTip.nhn
http://wiki.kldp.org/HOWTO//html/XML-RPC-HOWTO/xmlrpc-howto-php.html

네이버가 XML-RPC 지원합니다.
이제 네이버도 대세를 따르는듯 보입니다.

블로그 API 는 윈워드 2007, WIndows Live Writer 로 많이 들합니다.
하지만 저는 이전의 티스토리처럼 php로 웹페이지를 만들어 놓고 원격포스팅을 하려고 티스토리 페이지에서 비번과 경로만 바꾸면 되겠지하고 작업후 포스팅하였지만 에러를 내뿜더군요.

물론 고수분들은 금방 해결하시겠지만 모르시는 분들을 위해 그리고 웹서핑해보아도 찾을수 없어 기록으로도 남길겸 적습니다.

주의.
비번과 아이디는 위의 링크를 참고.
1. 블로그 아이디는 네이버아이디입니다.
2. 제목, 본문만 필요합니다. 태그와 카테고리 부분은 필요없더군요. 만약 있거나 공란이면 에러인듯..(확실치 않음)
3. 전송후 리턴 값이 에러인데 그 에러가 No CURL ~~~ 이라면 CURL이 연동되지 않으니 인터넷 참고해서 연동하세요.
(xmlrpc.ini 보면 https 는 그쪽을 쓰는듯..)
4. xmlrpc.ini에서
 $GLOBALS['xmlrpc_internalencoding']='ISO-8859-1';->
 $GLOBALS['xmlrpc_internalencoding']='UTF-8';  이렇게 수정..안그럼 한글이 깨지더군요
5. 보통 다른 API에선 글전송되는 것들은 base64로 인코딩하는데 네이버는 깨지더군요. 그래서 string 타입으로 해야 합니다.


소스들어갑니다. 새글 삽입예제입니다. 나머지 수정이나 첨부파일은 다른 사이트 보면 많이 나오니 참고바랍니다.;;

<?
include_once 'xmlrpc.inc';

//참고 : http://simulz.kr/zbxe/1868799
function newPost($title, $description){
 //네이버는 카테고리, 태그값을 아예 받질 않는다..그리고 공란이면 에러나는듯함.
 //네이버는 제목, 내용을 string타입으로 보내야 한다. 남들은 base64인데 이유 모름..
 $g_blog_url = "https://api.blog.naver.com/xmlrpc";
 $user_id = "네이버아이디";
 $password = "네이버발급비번";
 $blogid = "네이버아이디";

 $publish = true;//:공개할거냐 안할거냐인데, 네이버의 블로그 설정에 따라 이므로 이건 상관없음(아무렇게나 해도 됨)

 $client = new xmlrpc_client($g_blog_url); // $client변수에 블로그주소를 저장

 $struct = array( // body (struct변수에 제목, 내용 카테고리, 테그를 배열화해서 넣음)
     'title'   => new xmlrpcval($title, "string"),
     'description'   => new xmlrpcval($description, "string")
     );
     

 $f = new xmlrpcmsg("metaWeblog.newPost",
        array(
         new xmlrpcval($blogid, "string"), // blogid.(블로그아이디)
         new xmlrpcval($user_id, "string"), // user ID. (아이디)
         new xmlrpcval($password, "string"), // password (비밀번호)
         new xmlrpcval($struct , "struct"),
         new xmlrpcval($publish, "boolean") //publish... true는 공개, false는 비공개가 된다.
       )
      );

 $f->request_charset_encoding = 'UTF-8';

 return $response = $client->send($f); // $response에 실행명령삽입($client변수로 블로그 로그인 후 send($f) 글 전달함
}

 

$return = newPost('안녕하세요', 'API로 보낸글 입니다.');
print_r($return); 
?>