트위터 @sitehis Sitehis.com (SiteN.kr + SiteH.kr) 시작페이지로 | 검색공급자추가 | 즐겨찾기추가 | Bookmark and Share
  Sitehis  
사이트보도자료사이트히스토리사이트커뮤니티도메인/호스팅홈페이지제작웹유지보수홈페이지몰솔루션몰디자인몰이벤트제휴몰마이페이지
  스타이동?
아이디
비밀번호
Twitter로그인 | @sitehis
회원가입 | 아이디/비밀번호 찾기
  유머즐거운이야기  
   
  . 인터넷 새소식  
  . 웹개발분야 새소식  
  웹디자인 새소식  
  PHP프로그램 새소식  
  웹서버 새소식  
  HTML/CSS 팁공유  
  Javascript 팁공유  
  PHP 팁공유  
  플래쉬 팁공유  
  제로보드XE 팁공유  
  위젯 팁공유  
  오픈API 팁공유  
  스마트폰어플 팁공유  
  웹서버보안 팁공유  
  유용한 자료실  
  유료솔루션정보  
  유료호스팅정보  
  유료서버임대정보  
  무료호스팅정보  
  Sitehis에 공개제안  
   
상담신청하기
진행중인 이벤트가 없습니다.
 사이트커뮤니티 >
제목

www.xmlrpc.com/metaWeblogApi XML-RPC (자료수집중) http://sitehis.com/db_talk_369

작성자 박선민 작성일 2011-07-20 조회 4315
- 첨부파일 : 네이버블로그글쓰기API스팩문서(20100420).docx (크기: 254,555 bytes)

metaWeblogApi XML-RPC를 통해서 네이버 블로그에도 글을 올릴 수 있다.

관련 정보를 수집하여 봅니다.

공식 RFC : http://www.xmlrpc.com/metaWeblogApi

샘플 소스 네이버 xmlrpc 서버 테스트 명령어 (출처 : http://sangogi.com/2656795 )
  • metaWeblog.newPost (blogid, username, password, struct, publish)
  • metaWeblog.editPost (postid, username, password, struct, publish)
  • metaWeblog.getPost (postid, username, password)
  • metaWeblog.newMediaObject (blogid, username, password, struct)
  • metaWeblog.getCategories (blogid, username, password)
  • metaWeblog.getRecentPosts (blogid, username, password, numberOfPosts)
     


<?
//환경설정
$q_blogApiUrl = array(
"tistory"=>"http://blog.qnibus.com/api",
"naver"=>"https://api.blog.naver.com/xmlrpc",
"egloos"=>"https://rpc.egloos.com/rpc1",
"wordpress"=>"http://qnibus.wordpress.com/xmlrpc.php"
);
$q_blogId = array(
"tistory"=>"123456",
"naver"=>"blogid",
"egloos"=>"blogid",
"wordpress"=>"blogid"
);
$q_userName = array(
"tistory"=>"blog@example.com",
"naver"=>"id",
"egloos"=>"blog@example.com",
"wordpress"=>"id"
);
$q_password = array(
"tistory"=>"password",
"naver"=>"api_key",
"egloos"=>"api_key",
"wordpress"=>"password"
);
require_once 'lib/xmlrpc/lib/xmlrpc.inc';
$GLOBALS['xmlrpc_internalencoding'] = 'UTF-8'; //한글 출력 가능케 함 반드시 넣어야 함 안넣으면 오류발생
$q = $_GET['q'] ? $_GET['q'] : 'naver';
//카테고리 정보 추출 시작
$client = new xmlrpc_client($q_blogApiUrl[$q]);
$message = new xmlrpcmsg("metaWeblog.getCategories",
array(
new xmlrpcval($q_blogId[$q], "string"),
new xmlrpcval($q_userName[$q], "string"),
new xmlrpcval($q_password[$q], "string"),
)
);
$message->request_charset_encoding = 'UTF-8';
$response = $client->send($message);
$value = $response->value(); //카테고리 struct 반환
for($i=0; $i<$value->arraysize(); $i++) $categories[$i] = $value->arraymem($i)->me['struct']['title']->me['string']; //카테고리 타이틀 배열로 생성
natsort($categories); //자연어 정렬
?>
<html>
<head>
<title>원격발행</title>
</head>
<body>
<h1>metaWeblog API</h1>
<ul>
<li><a href="./?q=naver">네이버</a></li>
<li><a href="./?q=tistory">티스토리</a></li>
<li><a href="./?q=egloos">이글루스</a></li>
<li><a href="./?q=wordpress">워드프레스</a></li>
</ul>
<form method="post" enctype="multipart/form-data">
<fieldset>
<legend>newPost Publish</legend>
<input type="hidden" name="q" value="<?php echo $q?>" />
<p>
<label>Title</label>
<input type="text" name="title" size="30" />
</p>
<p>
<label>Category</label>
<select name="categories">
<?php foreach($categories as $val):?>
<option value="<?php echo $val?>"><?php echo $val?></option>
<?php endforeach?>
</select>
</p>
<p>
<label>Description</label>
<textarea name="description" cols="50" rows="5"></textarea>
</p>
<p>
<label>Tags</label>
<input type="text" name="keywords" value="PhotoShake!" />
</p>
<p>
<label>File</label>
<input type="file" name="upload" />
</p>
<p>
<input type="submit" value="submit" />
</p>
</fieldset>
</form>
</body>
</html>
 
<?
//환경설정 (공동으로 사용하는 파일이니 xmlrpc.inc나 config.php로 파일 만들어 include 시켜서 사용하세요 한눈에 보여드리려고 풀어헤쳤습니다.
//반드시 환경설정부는 자신의 블로그 관리에서 확인하신후 정보를 변경하셔야 정상 출력합니다.
$q_blogApiUrl = array(
"tistory"=>"http://blog.qnibus.com/api",
"naver"=>"https://api.blog.naver.com/xmlrpc",
"egloos"=>"https://rpc.egloos.com/rpc1",
"wordpress"=>"http://qnibus.wordpress.com/xmlrpc.php"
);
$q_blogId = array(
"tistory"=>"123456",
"naver"=>"blogid",
"egloos"=>"blogid",
"wordpress"=>"blogid"
);
$q_userName = array(
"tistory"=>"blog@example.com",
"naver"=>"id",
"egloos"=>"blog@example.com",
"wordpress"=>"id"
);
$q_password = array(
"tistory"=>"password",
"naver"=>"api_key",
"egloos"=>"api_key",
"wordpress"=>"password"
);
require_once 'xmlrpc/lib/xmlrpc.inc';
$GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';
// 파일 업로드
if (!empty($_FILES['upload']['name']))
{
$tempFile = $_FILES['upload']['tmp_name'];
$fileName = $_FILES['upload']['name'];
$fileType = $_FILES['upload']['type'];
// 파일 바이너리 데이터 가져오기
$fp=fopen($tempFile, "rb");
if (!$fp) return null; // file open failure !!
while( !feof($fp))
{
$filedescription .= fread( $fp, 1024); // 1024 is the server compatible buffer size
flush();
@ob_flush();
}
fclose($fp);
$client = new xmlrpc_client($q_blogApiUrl[$q]);
$newMediaObject = new xmlrpcmsg("metaWeblog.newMediaObject",
array(
new xmlrpcval($q_blogId[$q], "string"),
new xmlrpcval($q_userName[$q], "string"),
new xmlrpcval($q_password[$q], "string"),
new xmlrpcval(
array(
'name'  => new xmlrpcval($fileName, "string"),
'type'  => new xmlrpcval($fileType, "string"),
'bits' => new xmlrpcval($filedescription, "base64"), //파일 바이너리 값
), "struct")
)
);
$newMediaObject->request_charset_encoding = 'UTF-8';
$tempResponse = $client->send($newMediaObject);
$uploadFileName = $tempResponse->value()->me['struct']['url']->me['string'];
$uploadFileSize = getimagesize($tempFile);
$description = '<img src="'.$uploadFileName.'" '.$uploadFileSize[3].' /><br />'.$description.'<p>'.$_SERVER['REMOTE_ADDR'].'</p>';
}
$content = array(
'title'   => new xmlrpcval($title, "string"),
'description'   => new xmlrpcval($description, "string"),
        'dateCreated'  => new xmlrpcval(date("Ymd")."T".date("H:i:s"), "dateTime.iso8601"),
'categories' => new XMLRPCval(array(new XMLRPCval($categories,"string")), "array"),
($q=='naver') ? 'tags' : 'mt_keywords' => new xmlrpcval($keywords),
);
$client = new xmlrpc_client($q_blogApiUrl[$q]);
$message = new xmlrpcmsg("metaWeblog.newPost",
array(
new xmlrpcval($q_blogId[$q], "string"),
new xmlrpcval($q_userName[$q], "string"),
new xmlrpcval($q_password[$q], "string"),
new xmlrpcval($content, "struct"),
new xmlrpcval(true, "boolean")
)
);
$message->request_charset_encoding = 'UTF-8';
$response = $client->send($message);
$value = $response->value();
$postno = $value->scalarval(); // 발행한 결과로 블로그의 포스트 넘버를 반환합니다.
//디버그 확인
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
if(!$response->faultCode()) echo "성공적으로 발행되었습니다.";
else echo htmlspecialchars($response->faultString()); //에러 메시지 출력
 

 include("xmlrpc.inc");
 $GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';


 $api_url = "https://api.blog.naver.com/xmlrpc";
 $blog_user = "네이버ID";
 $blog_passwd = "API 연결암호";


 

 function upload_image($fpath) {
  global $api_url, $blog_user, $blog_passwd;
 
  $imgbit = file_get_contents($fpath, FILE_BINARY);
  $img = new xmlrpcval(
   array (
    'bits' => new xmlrpcval($imgbit, 'base64'),
    'type' => new xmlrpcval('image/jpeg', 'string'),
    'name' => new xmlrpcval(basename($fpath), 'string')
   ), 'struct');

  $c = new xmlrpc_client($api_url);
//  $c->debug = true; // Uncomment this line for debugging info
  $c->setSSLVerifyPeer(false);

  $x = new xmlrpcmsg("metaWeblog.newMediaObject");
  $x->addParam(new xmlrpcval($blog_user, 'string'));
  $x->addParam(new xmlrpcval($blog_user, 'string'));
  $x->addParam(new xmlrpcval($blog_passwd, 'string'));
  $x->addParam($img);
 
  $c->return_type = 'phpvals';
  $r =$c->send($x, 3, 'https');
  if ($r->errno=="0") {
      return $r->val['url'];
  } else {
      echo "<br>There was an error<pre>";
      print_r($r);
      echo "</pre>";
      return null;
  }
 
 } // upload_image


 function new_post($subj, $content) {
  global $api_url, $blog_user, $blog_passwd;
 
  $c = new xmlrpc_client($api_url);
//  $c->debug = true; // Uncomment this line for debugging info
  $c->setSSLVerifyPeer(false);
 
  $post = new xmlrpcval(
   array (
    'title' => new xmlrpcval($subj, 'string'),
    'description' => new xmlrpcval($content, 'string')
   ), 'struct');
 
  $x = new xmlrpcmsg("metaWeblog.newPost");
  $x->addParam(new xmlrpcval($blog_user, 'string'));
  $x->addParam(new xmlrpcval($blog_user, 'string'));
  $x->addParam(new xmlrpcval($blog_passwd, 'string'));
  $x->addParam($post);
  $x->addParam(new xmlrpcval(true, 'boolean'));
  $x->request_charset_encoding = "UTF-8";
 
  $c->return_type = 'phpvals';
  $r =$c->send($x, 3, 'https');
  if ($r->errno=="0") {
   $post_url = "http://blog.naver.com/$blog_user/".$r->val;
      return $post_url;
  } else {
      echo "<br>There was an error<pre>";
      print_r($r);
      echo "</pre>";
      return null;
  }
 } // new_post




회원가입없이 트윗터 아이디로 로그인하여 댓글을 작성할 수 있습니다~!!



좋은글은 아낌없이 스크랩을^^ 유명해지게^^ 행복해지게^^
   
Facebook페이스북스크랩   구글북마크  


- RSS 구독하기
     
믹시

- 퍼가실 경우에는 각 게시물 출처를 확인하시고 출처를 남겨주세요
- 게시물들은 신문기사와 달리 사실보다 의견 중심일 것입니다.
- 사실이 아니거나 본인 의견과 다르면 댓글로 수정하여 주세요.

이전글 IP-to-Country Handbook (IP로 국가 확인)(자료 수집중)
다음글 php 소스 최적화관련 APC,eAccelerator,XCache (자료수집중)
      
 

sitehis.com intro
sitehis.com price
sitehis.com copyright